]> git.saurik.com Git - apple/xnu.git/blobdiff - osfmk/kern/call_entry.h
xnu-4570.41.2.tar.gz
[apple/xnu.git] / osfmk / kern / call_entry.h
index 36f47a31b96da7fc3e7b9f2596a462f888ac105c..dede1bffba1406dc1845e19f28309fd86bf3d81f 100644 (file)
 #ifndef _KERN_CALL_ENTRY_H_
 #define _KERN_CALL_ENTRY_H_
 
-#ifdef MACH_KERNEL_PRIVATE
+#ifdef XNU_KERNEL_PRIVATE
 #include <kern/queue.h>
 
+#if !CONFIG_EMBEDDED
+#define TIMER_TRACE    1
+#endif
+
 typedef void           *call_entry_param_t;
 typedef void           (*call_entry_func_t)(
                                call_entry_param_t      param0,
@@ -47,16 +51,22 @@ typedef struct call_entry {
     call_entry_param_t param0;
     call_entry_param_t param1;
     uint64_t           deadline;
+#if TIMER_TRACE
+    uint64_t           entry_time;
+#endif
 } call_entry_data_t;
 
 typedef struct call_entry      *call_entry_t;
 
+#ifdef MACH_KERNEL_PRIVATE
 
 #define        call_entry_setup(entry, pfun, p0)                       \
 MACRO_BEGIN                                                    \
        (entry)->func           = (call_entry_func_t)(pfun);    \
        (entry)->param0         = (call_entry_param_t)(p0);     \
        (entry)->queue          = NULL;                         \
+       (entry)->deadline       = 0;                            \
+       queue_chain_init((entry)->q_link);                      \
 MACRO_END
 
 #define qe(x)          ((queue_entry_t)(x))
@@ -70,9 +80,9 @@ call_entry_enqueue_tail(
         queue_t                 old_queue = entry->queue;
 
         if (old_queue != NULL)
-                (void)remque(qe(entry));
-
-        enqueue_tail(queue, qe(entry));
+               re_queue_tail(queue, &entry->q_link);
+       else
+               enqueue_tail(queue, &entry->q_link);
 
         entry->queue = queue;
 
@@ -124,8 +134,7 @@ call_entry_enqueue_deadline(
                }
                insque(qe(entry), qe(current));
        }
-       else
-       if (deadline < entry->deadline) {
+       else if (deadline < entry->deadline) {
                current = CE(queue_prev(qe(entry)));
 
                (void)remque(qe(entry));
@@ -147,4 +156,6 @@ call_entry_enqueue_deadline(
 }
 #endif /* MACH_KERNEL_PRIVATE */
 
+#endif /* XNU_KERNEL_PRIVATE */
+
 #endif /* _KERN_CALL_ENTRY_H_ */