]> git.saurik.com Git - apple/xnu.git/blobdiff - osfmk/kern/locks.h
xnu-4903.241.1.tar.gz
[apple/xnu.git] / osfmk / kern / locks.h
index 99017d2cc19e04383d9acbb5207aed923f18926b..4db3c40f51de3609b7a04d3eed98d7d771be3984 100644 (file)
@@ -116,6 +116,12 @@ typedef    struct _lck_grp_ {
        lck_grp_stat_t          lck_grp_stat;
 } lck_grp_t;
 
+#define lck_grp_miss           lck_grp_stat.lck_grp_mtx_stat.lck_grp_mtx_miss_cnt
+#define lck_grp_held           lck_grp_stat.lck_grp_mtx_stat.lck_grp_mtx_held_cnt
+#define lck_grp_util           lck_grp_stat.lck_grp_mtx_stat.lck_grp_mtx_util_cnt
+#define lck_grp_wait           lck_grp_stat.lck_grp_mtx_stat.lck_grp_mtx_wait_cnt
+#define lck_grp_direct_wait    lck_grp_stat.lck_grp_mtx_stat.lck_grp_mtx_held_cnt
+
 #define LCK_GRP_NULL   (lck_grp_t *)0
 
 #else
@@ -265,8 +271,14 @@ extern wait_result_t       lck_spin_sleep_deadline(
 
 #ifdef KERNEL_PRIVATE
 
+extern void                    lck_spin_lock_nopreempt(                lck_spin_t              *lck);
+
+extern void                    lck_spin_unlock_nopreempt(              lck_spin_t              *lck);
+
 extern boolean_t               lck_spin_try_lock(                      lck_spin_t              *lck);
 
+extern boolean_t               lck_spin_try_lock_nopreempt(            lck_spin_t              *lck);
+
 /* NOT SAFE: To be used only by kernel debugger to avoid deadlock. */
 extern boolean_t               kdp_lck_spin_is_acquired(               lck_spin_t              *lck);
 
@@ -313,6 +325,17 @@ extern wait_result_t       lck_mtx_sleep_deadline(
                                                                        event_t                         event,
                                                                        wait_interrupt_t        interruptible,
                                                                        uint64_t                        deadline);
+#if DEVELOPMENT || DEBUG
+extern void            erase_all_test_mtx_stats(void);
+extern int             get_test_mtx_stats_string(char* buffer, int buffer_size);
+extern void            lck_mtx_test_init(void);
+extern void            lck_mtx_test_lock(void);
+extern void            lck_mtx_test_unlock(void);
+extern int             lck_mtx_test_mtx_uncontended(int iter, char* buffer, int buffer_size);
+extern int             lck_mtx_test_mtx_contended(int iter, char* buffer, int buffer_size);
+extern int             lck_mtx_test_mtx_uncontended_loop_time(int iter, char* buffer, int buffer_size);
+extern int             lck_mtx_test_mtx_contended_loop_time(int iter, char* buffer, int buffer_size);
+#endif
 
 #ifdef KERNEL_PRIVATE
 
@@ -396,8 +419,6 @@ extern int                          lck_mtx_lock_acquire(
 extern void                            lck_mtx_unlock_wakeup(
                                                                        lck_mtx_t               *lck,
                                                                        thread_t                holder);
-extern void                            lck_mtx_unlockspin_wakeup(
-                                                                       lck_mtx_t               *lck);
 
 extern boolean_t               lck_mtx_ilk_unlock(
                                                                        lck_mtx_t               *lck);
@@ -405,6 +426,8 @@ extern boolean_t            lck_mtx_ilk_unlock(
 extern boolean_t               lck_mtx_ilk_try_lock(
                                                                        lck_mtx_t               *lck);
 
+extern void lck_mtx_wakeup_adjust_pri(thread_t thread, integer_t priority);
+
 #endif
 
 #define decl_lck_rw_data(class,name)     class lck_rw_t name;
@@ -466,9 +489,10 @@ extern void                                lck_rw_assert(
                                                                        lck_rw_t                *lck,
                                                                        unsigned int            type);
 
-extern void                            lck_rw_clear_promotion(
-                                                                       thread_t                thread);
+extern void lck_rw_clear_promotion(thread_t thread, uintptr_t trace_obj);
 extern void lck_rw_set_promotion_locked(thread_t thread);
+
+uintptr_t unslide_for_kdebug(void* object);
 #endif
 
 #ifdef KERNEL_PRIVATE