]> git.saurik.com Git - apple/xnu.git/blobdiff - osfmk/kern/policy_internal.h
xnu-7195.50.7.100.1.tar.gz
[apple/xnu.git] / osfmk / kern / policy_internal.h
index 0a2e47e3507f8058746b40a46ac835188448dcc7..fc1b4b6f456e555adba15aeef44064b8245b54d2 100644 (file)
@@ -41,7 +41,8 @@
 #include <mach/task_policy.h>
 #include <kern/task.h>
 #include <kern/ledger.h>
-
+#include <sys/kdebug.h>
+#include <kern/sched_prim.h>
 /*
  ******************************
  * XNU-internal functionality
@@ -74,42 +75,41 @@ extern kern_return_t task_importance(task_t task, integer_t importance);
 /* flavors (also DBG_IMPORTANCE subclasses  0x20 - 0x3F) */
 
 /* internal or external, thread or task */
-#define TASK_POLICY_DARWIN_BG           0x21
-#define TASK_POLICY_IOPOL               0x22
-#define TASK_POLICY_IO                  0x23
-#define TASK_POLICY_PASSIVE_IO          0x24
+#define TASK_POLICY_DARWIN_BG           IMP_TASK_POLICY_DARWIN_BG
+#define TASK_POLICY_IOPOL               IMP_TASK_POLICY_IOPOL
+#define TASK_POLICY_IO                  IMP_TASK_POLICY_IO
+#define TASK_POLICY_PASSIVE_IO          IMP_TASK_POLICY_PASSIVE_IO
 
 /* internal, task only */
-#define TASK_POLICY_DARWIN_BG_IOPOL     0x27
+#define TASK_POLICY_DARWIN_BG_IOPOL     IMP_TASK_POLICY_DARWIN_BG_IOPOL
 
 /* task-only attributes */
-#define TASK_POLICY_TAL                 0x28
-#define TASK_POLICY_BOOST               0x29
-#define TASK_POLICY_ROLE                0x2A
+/* unused                               was: IMP_TASK_POLICY_TAL */
+#define TASK_POLICY_BOOST               IMP_TASK_POLICY_BOOST
+#define TASK_POLICY_ROLE                IMP_TASK_POLICY_ROLE
 /* unused                               0x2B */
-#define TASK_POLICY_TERMINATED          0x2C
-#define TASK_POLICY_NEW_SOCKETS_BG      0x2D
-#define TASK_POLICY_SUP_ACTIVE          0x2E
-#define TASK_POLICY_LATENCY_QOS         0x2F
-#define TASK_POLICY_THROUGH_QOS         0x30
-#define TASK_POLICY_WATCHERS_BG         0x31
-
-#define TASK_POLICY_SFI_MANAGED         0x34
-#define TASK_POLICY_ALL_SOCKETS_BG      0x37
-
-#define TASK_POLICY_BASE_LATENCY_AND_THROUGHPUT_QOS  0x39 /* latency as value1, throughput as value2 */
-#define TASK_POLICY_OVERRIDE_LATENCY_AND_THROUGHPUT_QOS  0x3A /* latency as value1, throughput as value2 */
+#define TASK_POLICY_TERMINATED          IMP_TASK_POLICY_TERMINATED
+#define TASK_POLICY_NEW_SOCKETS_BG      IMP_TASK_POLICY_NEW_SOCKETS_BG
+#define TASK_POLICY_SUP_ACTIVE          IMP_TASK_POLICY_SUP_ACTIVE
+#define TASK_POLICY_LATENCY_QOS         IMP_TASK_POLICY_LATENCY_QOS
+#define TASK_POLICY_THROUGH_QOS         IMP_TASK_POLICY_THROUGH_QOS
+#define TASK_POLICY_WATCHERS_BG         IMP_TASK_POLICY_WATCHERS_BG
+#define TASK_POLICY_SFI_MANAGED         IMP_TASK_POLICY_SFI_MANAGED
+#define TASK_POLICY_ALL_SOCKETS_BG      IMP_TASK_POLICY_ALL_SOCKETS_BG
+
+#define TASK_POLICY_BASE_LATENCY_AND_THROUGHPUT_QOS IMP_TASK_POLICY_BASE_LATENCY_AND_THROUGHPUT_QOS /* latency as value1, throughput as value2 */
+#define TASK_POLICY_OVERRIDE_LATENCY_AND_THROUGHPUT_QOS  IMP_TASK_POLICY_OVERRIDE_LATENCY_AND_THROUGHPUT_QOS /* latency as value1, throughput as value2 */
 
 /* thread-only attributes */
-#define TASK_POLICY_PIDBIND_BG          0x32
+#define TASK_POLICY_PIDBIND_BG          IMP_TASK_POLICY_PIDBIND_BG
 /* unused                               0x33 */
-#define TASK_POLICY_QOS                 0x35
-#define TASK_POLICY_QOS_OVERRIDE        0x36
-#define TASK_POLICY_QOS_AND_RELPRIO     0x38 /* QoS as value1, relative priority as value2 */
-#define TASK_POLICY_QOS_WORKQ_OVERRIDE  0x3B
-#define TASK_POLICY_QOS_PROMOTE         0x3C
-#define TASK_POLICY_QOS_IPC_OVERRIDE    0x3D
-// was TASK_POLICY_QOS_SYNC_IPC_OVERRIDE 0x3E
+#define TASK_POLICY_QOS                 0x35 /* Used only as a convenience for getter */
+#define TASK_POLICY_QOS_OVERRIDE        IMP_TASK_POLICY_QOS_OVERRIDE
+#define TASK_POLICY_QOS_AND_RELPRIO     IMP_TASK_POLICY_QOS_AND_RELPRIO /* QoS as value1, relative priority as value2 */
+#define TASK_POLICY_QOS_WORKQ_OVERRIDE  IMP_TASK_POLICY_QOS_WORKQ_OVERRIDE
+#define TASK_POLICY_QOS_PROMOTE         IMP_TASK_POLICY_QOS_PROMOTE
+#define TASK_POLICY_QOS_KEVENT_OVERRIDE IMP_TASK_POLICY_QOS_KEVENT_OVERRIDE
+#define TASK_POLICY_QOS_SERVICER_OVERRIDE IMP_TASK_POLICY_QOS_SERVICER_OVERRIDE
 
 #define TASK_POLICY_MAX                 0x3F
 
@@ -128,13 +128,13 @@ extern void proc_set_thread_policy_with_tid(task_t task, uint64_t tid, int categ
 extern boolean_t thread_has_qos_policy(thread_t thread);
 extern kern_return_t thread_remove_qos_policy(thread_t thread);
 
-extern int  proc_darwin_role_to_task_role(int darwin_role, int* task_role);
-extern int  proc_task_role_to_darwin_role(int task_role);
+extern int  proc_darwin_role_to_task_role(int darwin_role, task_role_t* task_role);
+extern int  proc_task_role_to_darwin_role(task_role_t task_role);
 
 /* Functions used by kern_exec.c */
 extern void task_set_main_thread_qos(task_t task, thread_t main_thread);
-extern void proc_set_task_spawnpolicy(task_t task, int apptype, int qos_clamp, int role,
-    ipc_port_t * portwatch_ports, int portwatch_count);
+extern void proc_set_task_spawnpolicy(task_t task, thread_t thread, int apptype, int qos_clamp, task_role_t role,
+    ipc_port_t * portwatch_ports, uint32_t portwatch_count);
 extern void proc_inherit_task_role(task_t new_task, task_t old_task);
 
 /* IO Throttle tiers */
@@ -167,6 +167,9 @@ extern int task_get_apptype(task_t);
 extern void proc_apply_task_networkbg(void * bsd_info, thread_t thread);
 #endif /* MACH_BSD */
 
+extern void thread_freeze_base_pri(thread_t thread);
+extern bool thread_unfreeze_base_pri(thread_t thread);
+
 /* Functions used by pthread_shims.c */
 extern int proc_thread_qos_add_override(task_t task, thread_t thread, uint64_t tid,
     int override_qos, boolean_t first_override_for_resource,
@@ -180,17 +183,17 @@ extern void thread_set_workq_pri(thread_t thread, thread_qos_t qos, integer_t pr
 extern uint8_t thread_workq_pri_for_qos(thread_qos_t qos) __pure2;
 extern thread_qos_t thread_workq_qos_for_pri(int priority);
 
-extern int
+extern thread_qos_t
 task_get_default_manager_qos(task_t task);
 
 extern void proc_thread_qos_deallocate(thread_t thread);
 
 extern int task_clear_cpuusage(task_t task, int cpumon_entitled);
 
-#if CONFIG_EMBEDDED
+#if CONFIG_TASKWATCH
 /* Taskwatch related external BSD interface */
 extern int proc_lf_pidbind(task_t curtask, uint64_t tid, task_t target_task, int bind);
-#endif /* CONFIG_EMBEDDED */
+#endif /* CONFIG_TASKWATCH */
 
 /* Importance inheritance functions not under IMPORTANCE_INHERITANCE */
 extern void task_importance_mark_donor(task_t task, boolean_t donating);
@@ -222,7 +225,7 @@ extern boolean_t proc_task_is_tal(task_t task);
 
 extern int proc_get_task_ruse_cpu(task_t task, uint32_t *policyp, uint8_t *percentagep,
     uint64_t *intervalp, uint64_t *deadlinep);
-extern int proc_set_task_ruse_cpu(task_t task, uint32_t policy, uint8_t percentage,
+extern int proc_set_task_ruse_cpu(task_t task, uint16_t policy, uint8_t percentage,
     uint64_t interval, uint64_t deadline, int cpumon_entitled);
 extern int task_suspend_cpumon(task_t task);
 extern int task_resume_cpumon(task_t task);
@@ -245,15 +248,21 @@ extern kern_return_t thread_policy_set_internal(thread_t thread, thread_policy_f
     thread_policy_t policy_info, mach_msg_type_number_t count);
 
 extern boolean_t thread_recompute_user_promotion_locked(thread_t thread);
+extern boolean_t thread_recompute_kernel_promotion_locked(thread_t thread);
 extern thread_qos_t thread_user_promotion_qos_for_pri(int priority);
 
 extern void thread_set_exec_promotion(thread_t thread);
 extern void thread_clear_exec_promotion(thread_t thread);
 
-/* for IPC override management */
-extern void thread_add_ipc_override(thread_t thread, uint32_t qos_override);
-extern void thread_update_ipc_override(thread_t thread, uint32_t qos_override);
-extern void thread_drop_ipc_override(thread_t thread);
+/* for servicer override management (workloops only) */
+extern void thread_add_servicer_override(thread_t thread, uint32_t qos_override);
+extern void thread_update_servicer_override(thread_t thread, uint32_t qos_override);
+extern void thread_drop_servicer_override(thread_t thread);
+
+/* for generic kevent override management */
+extern void thread_add_kevent_override(thread_t thread, uint32_t qos_override);
+extern void thread_update_kevent_override(thread_t thread, uint32_t qos_override);
+extern void thread_drop_kevent_override(thread_t thread);
 
 /* for ipc_pset.c */
 extern thread_qos_t thread_get_requested_qos(thread_t thread, int *relpri);
@@ -280,7 +289,8 @@ typedef struct task_pend_token {
            tpt_update_throttle     :1,
            tpt_update_thread_sfi   :1,
            tpt_force_recompute_pri :1,
-           tpt_update_tg_ui_flag   :1;
+           tpt_update_tg_ui_flag   :1,
+           tpt_update_turnstile    :1;
 } *task_pend_token_t;
 
 extern void task_policy_update_complete_unlocked(task_t task, task_pend_token_t pend_token);
@@ -290,8 +300,8 @@ extern void thread_policy_update_locked(thread_t thread, task_pend_token_t pend_
 extern void thread_policy_update_complete_unlocked(thread_t task, task_pend_token_t pend_token);
 
 typedef struct {
-       int             qos_pri[THREAD_QOS_LAST];
-       int             qos_iotier[THREAD_QOS_LAST];
+       int16_t         qos_pri[THREAD_QOS_LAST];
+       int16_t         qos_iotier[THREAD_QOS_LAST];
        uint32_t        qos_through_qos[THREAD_QOS_LAST];
        uint32_t        qos_latency_qos[THREAD_QOS_LAST];
 } qos_policy_params_t;
@@ -318,14 +328,13 @@ extern void thread_policy_create(thread_t thread);
 extern boolean_t task_is_daemon(task_t task);
 extern boolean_t task_is_app(task_t task);
 
-#if CONFIG_EMBEDDED
+#if CONFIG_TASKWATCH
 /* Taskwatch related external interface */
 extern void thead_remove_taskwatch(thread_t thread);
 extern void task_removewatchers(task_t task);
-extern void task_watch_init(void);
 
 typedef struct task_watcher task_watch_t;
-#endif /* CONFIG_EMBEDDED */
+#endif /* CONFIG_TASKWATCH */
 
 #if IMPORTANCE_INHERITANCE
 extern boolean_t task_is_marked_importance_donor(task_t task);
@@ -344,7 +353,7 @@ extern boolean_t task_is_marked_importance_denap_receiver(task_t task);
 extern void proc_init_cpumon_params(void);
 extern void thread_policy_init(void);
 
-int task_compute_main_thread_qos(task_t task);
+thread_qos_t task_compute_main_thread_qos(task_t task);
 
 /* thread policy internals */
 extern void thread_policy_reset(thread_t thread);