]> git.saurik.com Git - apple/xnu.git/blobdiff - osfmk/kern/policy_internal.h
xnu-4903.270.47.tar.gz
[apple/xnu.git] / osfmk / kern / policy_internal.h
index 59a7b9a79bbcdefbcc85b9a7d0d221a9b06e3418..0a2e47e3507f8058746b40a46ac835188448dcc7 100644 (file)
@@ -89,7 +89,7 @@ extern kern_return_t task_importance(task_t task, integer_t importance);
 /* unused                               0x2B */
 #define TASK_POLICY_TERMINATED          0x2C
 #define TASK_POLICY_NEW_SOCKETS_BG      0x2D
-/* unused                               0x2E */
+#define TASK_POLICY_SUP_ACTIVE          0x2E
 #define TASK_POLICY_LATENCY_QOS         0x2F
 #define TASK_POLICY_THROUGH_QOS         0x30
 #define TASK_POLICY_WATCHERS_BG         0x31
@@ -106,8 +106,10 @@ extern kern_return_t task_importance(task_t task, integer_t importance);
 #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_MAX                 0x3F
 
@@ -132,11 +134,12 @@ extern int  proc_task_role_to_darwin_role(int 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);
+    ipc_port_t * portwatch_ports, int portwatch_count);
+extern void proc_inherit_task_role(task_t new_task, task_t old_task);
 
 /* IO Throttle tiers */
 #define THROTTLE_LEVEL_NONE     -1
-#define        THROTTLE_LEVEL_TIER0     0      /* IOPOL_NORMAL, IOPOL_DEFAULT, IOPOL_PASSIVE */
+#define THROTTLE_LEVEL_TIER0     0      /* IOPOL_NORMAL, IOPOL_DEFAULT, IOPOL_PASSIVE */
 
 #define THROTTLE_LEVEL_THROTTLED 1
 #define THROTTLE_LEVEL_TIER1     1      /* IOPOL_STANDARD */
@@ -165,22 +168,17 @@ extern void proc_apply_task_networkbg(void * bsd_info, thread_t thread);
 #endif /* MACH_BSD */
 
 /* Functions used by pthread_shims.c */
-extern boolean_t proc_thread_qos_add_override(task_t task, thread_t thread, uint64_t tid,
-                                              int override_qos, boolean_t first_override_for_resource,
-                                              user_addr_t resource, int resource_type);
-extern int proc_thread_qos_add_override_check_owner(thread_t thread, int override_qos,
-               boolean_t first_override_for_resource, user_addr_t resource, int resource_type,
-               user_addr_t user_lock_addr, mach_port_name_t user_lock_owner);
-extern boolean_t proc_thread_qos_remove_override(task_t task, thread_t thread, uint64_t tid,
-                                                 user_addr_t resource, int resource_type);
-extern boolean_t proc_thread_qos_reset_override(task_t task, thread_t thread, uint64_t tid,
-                                                 user_addr_t resource, int resource_type);
-extern int proc_thread_qos_squash_override(thread_t thread, user_addr_t resource, int resource_type);
-
-extern kern_return_t
-thread_set_workq_qos(thread_t thread, int qos_tier, int relprio);
-extern kern_return_t
-thread_set_workq_pri(thread_t thread, integer_t priority, integer_t policy);
+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,
+    user_addr_t resource, int resource_type);
+extern int proc_thread_qos_remove_override(task_t task, thread_t thread, uint64_t tid,
+    user_addr_t resource, int resource_type);
+
+extern void thread_reset_workq_qos(thread_t thread, uint32_t qos);
+extern void thread_set_workq_override(thread_t thread, uint32_t qos);
+extern void thread_set_workq_pri(thread_t thread, thread_qos_t qos, integer_t priority, integer_t policy);
+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
 task_get_default_manager_qos(task_t task);
@@ -189,10 +187,15 @@ extern void proc_thread_qos_deallocate(thread_t thread);
 
 extern int task_clear_cpuusage(task_t task, int cpumon_entitled);
 
+#if CONFIG_EMBEDDED
+/* 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 */
 
 /* Importance inheritance functions not under IMPORTANCE_INHERITANCE */
 extern void task_importance_mark_donor(task_t task, boolean_t donating);
 extern void task_importance_reset(task_t task);
+extern void task_importance_init_from_parent(task_t new_task, task_t parent_task);
 
 #if IMPORTANCE_INHERITANCE
 extern boolean_t task_is_importance_donor(task_t task);
@@ -218,9 +221,9 @@ extern boolean_t proc_task_is_tal(task_t task);
 #define TASK_POLICY_RESOURCE_ATTRIBUTE_DEFAULT          TASK_POLICY_RESOURCE_ATTRIBUTE_NONE
 
 extern int proc_get_task_ruse_cpu(task_t task, uint32_t *policyp, uint8_t *percentagep,
-                                  uint64_t *intervalp, uint64_t *deadlinep);
+    uint64_t *intervalp, uint64_t *deadlinep);
 extern int proc_set_task_ruse_cpu(task_t task, uint32_t policy, uint8_t percentage,
-                                  uint64_t interval, uint64_t deadline, int cpumon_entitled);
+    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);
 extern int proc_clear_task_ruse_cpu(task_t task, int cpumon_entitled);
@@ -238,32 +241,22 @@ extern void task_clear_has_been_notified(task_t task, int pressurelevel);
 extern void task_clear_used_for_purging(task_t task);
 extern int task_importance_estimate(task_t task);
 
-/*
- * Allocate/assign a single work interval ID for a thread,
- * and support deallocating it.
- */
-extern kern_return_t thread_policy_create_work_interval(thread_t thread, uint64_t *work_interval_id);
-extern kern_return_t thread_policy_destroy_work_interval(thread_t thread, uint64_t work_interval_id);
-
 extern kern_return_t thread_policy_set_internal(thread_t thread, thread_policy_flavor_t flavor,
-                                                thread_policy_t policy_info, mach_msg_type_number_t count);
-
-struct promote_token {
-       uint16_t        pt_basepri;
-       uint16_t        pt_qos;
-};
+    thread_policy_t policy_info, mach_msg_type_number_t count);
 
-#define PROMOTE_TOKEN_INIT ((struct promote_token){.pt_basepri = 0, .pt_qos = 0})
+extern boolean_t thread_recompute_user_promotion_locked(thread_t thread);
+extern thread_qos_t thread_user_promotion_qos_for_pri(int priority);
 
-extern void thread_user_promotion_add(thread_t thread, thread_t promoter, struct promote_token* promote_token);
-extern void thread_user_promotion_update(thread_t thread, thread_t promoter, struct promote_token* promote_token);
-extern void thread_user_promotion_drop(thread_t thread);
+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);
-extern uint32_t thread_get_ipc_override(thread_t thread);
+
+/* for ipc_pset.c */
+extern thread_qos_t thread_get_requested_qos(thread_t thread, int *relpri);
 
 /*
  ******************************
@@ -280,13 +273,14 @@ extern uint32_t thread_get_ipc_override(thread_t thread);
 
 typedef struct task_pend_token {
        uint32_t        tpt_update_sockets      :1,
-                       tpt_update_timers       :1,
-                       tpt_update_watchers     :1,
-                       tpt_update_live_donor   :1,
-                       tpt_update_coal_sfi     :1,
-                       tpt_update_throttle     :1,
-                       tpt_update_thread_sfi   :1,
-                       tpt_force_recompute_pri :1;
+           tpt_update_timers       :1,
+           tpt_update_watchers     :1,
+           tpt_update_live_donor   :1,
+           tpt_update_coal_sfi     :1,
+           tpt_update_throttle     :1,
+           tpt_update_thread_sfi   :1,
+           tpt_force_recompute_pri :1,
+           tpt_update_tg_ui_flag   :1;
 } *task_pend_token_t;
 
 extern void task_policy_update_complete_unlocked(task_t task, task_pend_token_t pend_token);
@@ -324,6 +318,14 @@ 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
+/* 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 */
 
 #if IMPORTANCE_INHERITANCE
 extern boolean_t task_is_marked_importance_donor(task_t task);
@@ -338,7 +340,6 @@ extern boolean_t task_is_marked_importance_denap_receiver(task_t task);
 #define TASK_RUSECPU_FLAGS_DEADLINE                     0x04
 #define TASK_RUSECPU_FLAGS_FATAL_CPUMON                 0x08    /* CPU usage monitor violations are fatal */
 #define TASK_RUSECPU_FLAGS_FATAL_WAKEUPSMON             0x10    /* wakeups monitor violations are fatal */
-#define TASK_RUSECPU_FLAGS_PHYS_FOOTPRINT_EXCEPTION     0x20    /* exceeding physical footprint generates EXC_RESOURCE */
 
 extern void proc_init_cpumon_params(void);
 extern void thread_policy_init(void);
@@ -354,41 +355,41 @@ extern void thread_policy_update_tasklocked(thread_t thread, integer_t priority,
 #include "mach/resource_notify.h"       /* from MIG */
 
 /*! @function   send_resource_violation
-    @abstract   send usage monitor violation notification
-
-    @param  violator  the task (process) violating its CPU budget
-    @param  ledger_info   the entry tracking the resource limit
-    @param  flags   see constants for type in sys/reason.h
-
-    @result KERN_SUCCESS if the message was sent
-
-    @discussion
-        send_resource_violation() calls the corresponding MIG routine
-        over the host special RESOURCE_NOTIFY port.
-*/
*   @abstract   send usage monitor violation notification
+ *
*   @param  violator  the task (process) violating its CPU budget
*   @param  ledger_info   the entry tracking the resource limit
*   @param  flags   see constants for type in sys/reason.h
+ *
*   @result KERN_SUCCESS if the message was sent
+ *
*   @discussion
*       send_resource_violation() calls the corresponding MIG routine
*       over the host special RESOURCE_NOTIFY port.
+ */
 kern_return_t send_resource_violation(typeof(send_cpu_usage_violation),
-                                      task_t violator,
-                                      struct ledger_entry_info *ledger_info,
-                                      resource_notify_flags_t flags);
+    task_t violator,
+    struct ledger_entry_info *ledger_info,
+    resource_notify_flags_t flags);
 
 /*! @function  trace_resource_violation
   @abstract  trace violations on K32/64
-
-    @param  code   the (K64) DBG_MACH_RESOURCE trace code
-    @param  ledger_info   the entry tracking the resource limit
-
-    @discussion
-        Trace observed usage and corresponding limit on K32 or K64.  On
-        K32, a pair of trace points are used.  The low nibble of the K32
-        trace points must start at double the low nibble of the provided
-        K64 trace point.  For example:
              #define LOGWRITES_VIOLATED              0x022
-               ...
              #define LOGWRITES_VIOLATED_K32A         0x024
              #define LOGWRITES_VIOLATED_K32B         0x025
-*/
*   @abstract trace violations on K32/64
+ *
*   @param  code   the (K64) DBG_MACH_RESOURCE trace code
*   @param  ledger_info   the entry tracking the resource limit
+ *
*   @discussion
*       Trace observed usage and corresponding limit on K32 or K64.  On
*       K32, a pair of trace points are used.  The low nibble of the K32
*       trace points must start at double the low nibble of the provided
*       K64 trace point.  For example:
+ #define LOGWRITES_VIOLATED              0x022
              ...
+ #define LOGWRITES_VIOLATED_K32A         0x024
+ #define LOGWRITES_VIOLATED_K32B         0x025
+ */
 void trace_resource_violation(uint16_t code,
-                              struct ledger_entry_info *ledger_info);
+    struct ledger_entry_info *ledger_info);
 
 #endif /* MACH_KERNEL_PRIVATE */