]> git.saurik.com Git - apple/xnu.git/blobdiff - osfmk/kern/processor.h
xnu-2422.100.13.tar.gz
[apple/xnu.git] / osfmk / kern / processor.h
index fcf61d0444612d7e04fa4dbfc64d74bbd1c461f5..a634c2594a500a886e0b75fc1c03a4117f126a51 100644 (file)
@@ -87,10 +87,22 @@ struct processor_set {
 
        processor_t                     low_pri, low_count;
 
 
        processor_t                     low_pri, low_count;
 
-       int                                     processor_count;
+       int                                     online_processor_count;
+
+       int                                     cpu_set_low, cpu_set_hi;
+       int                                     cpu_set_count;
 
        decl_simple_lock_data(,sched_lock)      /* lock for above */
 
 
        decl_simple_lock_data(,sched_lock)      /* lock for above */
 
+#if defined(CONFIG_SCHED_TRADITIONAL) || defined(CONFIG_SCHED_FIXEDPRIORITY)
+       struct run_queue        pset_runq;      /* runq for this processor set */
+       int                                     pset_runq_bound_count;
+               /* # of threads in runq bound to any processor in pset */
+#endif
+   
+       /* CPUs that have been sent an unacknowledged remote AST for scheduling purposes */
+       uint32_t                        pending_AST_cpu_mask;
+
        struct ipc_port *       pset_self;              /* port for operations */
        struct ipc_port *       pset_name_self; /* port for information */
 
        struct ipc_port *       pset_self;              /* port for operations */
        struct ipc_port *       pset_name_self; /* port for information */
 
@@ -111,8 +123,8 @@ struct pset_node {
 
 extern struct pset_node        pset_node0;
 
 
 extern struct pset_node        pset_node0;
 
-extern queue_head_t            tasks, threads;
-extern int                             tasks_count, threads_count;
+extern queue_head_t            tasks, terminated_tasks, threads; /* Terminated tasks are ONLY for stackshot */
+extern int                             tasks_count, terminated_tasks_count, threads_count;
 decl_lck_mtx_data(extern,tasks_threads_lock)
 
 struct processor_meta {
 decl_lck_mtx_data(extern,tasks_threads_lock)
 
 struct processor_meta {
@@ -135,6 +147,7 @@ struct processor {
        processor_set_t         processor_set;  /* assigned set */
 
        int                                     current_pri;    /* priority of current thread */
        processor_set_t         processor_set;  /* assigned set */
 
        int                                     current_pri;    /* priority of current thread */
+       sched_mode_t            current_thmode; /* sched mode of current thread */
        int                                     cpu_id;                 /* platform numeric id */
 
        timer_call_data_t       quantum_timer;  /* timer for quantum expiration */
        int                                     cpu_id;                 /* platform numeric id */
 
        timer_call_data_t       quantum_timer;  /* timer for quantum expiration */
@@ -144,7 +157,13 @@ struct processor {
        uint64_t                        deadline;               /* current deadline */
        int                                     timeslice;              /* quanta before timeslice ends */
 
        uint64_t                        deadline;               /* current deadline */
        int                                     timeslice;              /* quanta before timeslice ends */
 
+#if defined(CONFIG_SCHED_TRADITIONAL) || defined(CONFIG_SCHED_FIXEDPRIORITY)
        struct run_queue        runq;                   /* runq for this processor */
        struct run_queue        runq;                   /* runq for this processor */
+       int                                     runq_bound_count; /* # of threads bound to this processor */
+#endif
+#if defined(CONFIG_SCHED_GRRR)
+       struct grrr_run_queue   grrr_runq;      /* Group Ratio Round-Robin runq */
+#endif
        processor_meta_t        processor_meta;
 
        struct ipc_port *       processor_self; /* port for operations */
        processor_meta_t        processor_meta;
 
        struct ipc_port *       processor_self; /* port for operations */
@@ -161,6 +180,8 @@ extern uint32_t                     processor_avail_count;
 
 extern processor_t             master_processor;
 
 
 extern processor_t             master_processor;
 
+extern boolean_t               sched_stats_active;
+
 /*
  *     Processor state is accessed by locking the scheduling lock
  *     for the assigned processor set.
 /*
  *     Processor state is accessed by locking the scheduling lock
  *     for the assigned processor set.
@@ -200,7 +221,7 @@ MACRO_END
 #define pset_count_hint(ps, p, cnt)            \
 MACRO_BEGIN                                                                                            \
        if ((p) != (ps)->low_count) {                                           \
 #define pset_count_hint(ps, p, cnt)            \
 MACRO_BEGIN                                                                                            \
        if ((p) != (ps)->low_count) {                                           \
-               if ((cnt) < (ps)->low_count->runq.count)                \
+               if ((cnt) < SCHED(processor_runq_count)((ps)->low_count))               \
                        (ps)->low_count = (p);                                          \
                else                                                                                    \
                if ((ps)->low_count->state < PROCESSOR_IDLE)    \
                        (ps)->low_count = (p);                                          \
                else                                                                                    \
                if ((ps)->low_count->state < PROCESSOR_IDLE)    \
@@ -208,12 +229,23 @@ MACRO_BEGIN                                                                                               \
        }                                                                                                       \
 MACRO_END
 
        }                                                                                                       \
 MACRO_END
 
-extern void            processor_bootstrap(void) __attribute__((section("__TEXT, initcode")));
+#define pset_pri_init_hint(ps, p)              \
+MACRO_BEGIN                                                                                            \
+       (ps)->low_pri = (p);                                                            \
+MACRO_END
+
+#define pset_count_init_hint(ps, p)            \
+MACRO_BEGIN                                                                                            \
+       (ps)->low_count = (p);                                                          \
+MACRO_END
+
+
+extern void            processor_bootstrap(void);
 
 extern void            processor_init(
                                        processor_t             processor,
                                        int                             cpu_id,
 
 extern void            processor_init(
                                        processor_t             processor,
                                        int                             cpu_id,
-                                       processor_set_t processor_set) __attribute__((section("__TEXT, initcode")));
+                                       processor_set_t processor_set);
 
 extern void            processor_meta_init(
                                        processor_t             processor,
 
 extern void            processor_meta_init(
                                        processor_t             processor,
@@ -235,7 +267,7 @@ extern processor_set_t      pset_create(
 
 extern void            pset_init(
                                        processor_set_t         pset,
 
 extern void            pset_init(
                                        processor_set_t         pset,
-                                       pset_node_t                     node) __attribute__((section("__TEXT, initcode")));
+                                       pset_node_t                     node);
 
 extern kern_return_t   processor_info_count(
                                                        processor_flavor_t              flavor,
 
 extern kern_return_t   processor_info_count(
                                                        processor_flavor_t              flavor,
@@ -244,11 +276,15 @@ extern kern_return_t      processor_info_count(
 #define pset_deallocate(x)
 #define pset_reference(x)
 
 #define pset_deallocate(x)
 #define pset_reference(x)
 
-extern void                    machine_run_count(
-                                               uint32_t        count);
+extern void                            machine_run_count(
+                                                       uint32_t        count);
+
+extern boolean_t               machine_processor_is_inactive(
+                                                       processor_t                     processor);
 
 
-extern boolean_t       machine_cpu_is_inactive(
-                                               int                     cpu_id);
+extern processor_t             machine_choose_processor(
+                                                       processor_set_t         pset,
+                                                       processor_t                     processor);
 
 #else  /* MACH_KERNEL_PRIVATE */
 
 
 #else  /* MACH_KERNEL_PRIVATE */