]> git.saurik.com Git - apple/xnu.git/blobdiff - osfmk/arm/pmap.h
xnu-7195.101.1.tar.gz
[apple/xnu.git] / osfmk / arm / pmap.h
index 760592fd699dd4adc37316e1444d1877cdc26035..13c58aa156f0a0a3844380149832e61a9ea45375 100644 (file)
@@ -47,6 +47,7 @@
 #include <mach/kern_return.h>
 #include <mach/machine/vm_types.h>
 #include <arm/pmap_public.h>
+#include <kern/ast.h>
 #include <mach/arm/thread_status.h>
 #if defined(__arm64__)
 #include <arm64/tlb.h>
@@ -331,7 +332,7 @@ extern pmap_paddr_t mmu_uvtop(vm_offset_t va);
 #define PMAP_GC_WAIT            2
 
 #if DEVELOPMENT || DEBUG
-#define pmap_cs_log_h(msg, args...) { if(pmap_cs_log_hacks) printf("PMAP_CS: " msg "\n", args); }
+#define pmap_cs_log_h(msg, args...) { if(pmap_cs_log_hacks) printf("PMAP_CS: " msg "\n", ##args); }
 #define pmap_cs_log pmap_cs_log_h
 
 #else
@@ -461,7 +462,7 @@ extern  void pmap_gc(void);
 #if HAS_APPLE_PAC
 extern void * pmap_sign_user_ptr(void *value, ptrauth_key key, uint64_t data, uint64_t jop_key);
 extern void * pmap_auth_user_ptr(void *value, ptrauth_key key, uint64_t data, uint64_t jop_key);
-#endif /* HAS_APPLE_PAC && XNU_MONITOR */
+#endif /* HAS_APPLE_PAC */
 
 /*
  * Interfaces implemented as macros.
@@ -620,10 +621,10 @@ pmap_disable_user_jop(pmap_t pmap);
 #define PMAP_LEDGER_ALLOC_INDEX 58
 #define PMAP_LEDGER_FREE_INDEX 59
 
-#if HAS_APPLE_PAC && XNU_MONITOR
+#if HAS_APPLE_PAC
 #define PMAP_SIGN_USER_PTR 60
 #define PMAP_AUTH_USER_PTR 61
-#endif /* HAS_APPLE_PAC && XNU_MONITOR */
+#endif /* HAS_APPLE_PAC */
 
 #define PHYS_ATTRIBUTE_CLEAR_RANGE_INDEX 66
 
@@ -636,8 +637,15 @@ pmap_disable_user_jop(pmap_t pmap);
 
 #define PMAP_SET_VM_MAP_CS_ENFORCED_INDEX 72
 
+#define PMAP_SET_COMPILATION_SERVICE_CDHASH_INDEX   73
+#define PMAP_MATCH_COMPILATION_SERVICE_CDHASH_INDEX 74
+
 
-#define PMAP_COUNT 74
+#if DEVELOPMENT || DEBUG
+#define PMAP_TEST_TEXT_CORRUPTION_INDEX 76
+#endif /* DEVELOPMENT || DEBUG */
+
+#define PMAP_COUNT 77
 
 #define PMAP_INVALID_CPU_NUM (~0U)
 
@@ -651,6 +659,18 @@ extern void pmap_cpu_data_init(void);
 /* Get the pmap per-CPU data for the current CPU. */
 extern pmap_cpu_data_t * pmap_get_cpu_data(void);
 
+/*
+ * For most batched page operations, we pick a sane default page count
+ * interval at which to check for pending preemption and exit the PPL if found.
+ */
+#define PMAP_DEFAULT_PREEMPTION_CHECK_PAGE_INTERVAL 64
+
+inline bool
+pmap_pending_preemption(void)
+{
+       return !!(*((volatile ast_t*)ast_pending()) & AST_URGENT);
+}
+
 #if XNU_MONITOR
 extern boolean_t pmap_ppl_locked_down;
 
@@ -728,6 +748,10 @@ extern void CleanPoC_DcacheRegion_Force_nopreempt(vm_offset_t va, size_t length)
 #define pmap_unlock_bit(l, i)           hw_unlock_bit(l, i)
 #endif
 
+#if DEVELOPMENT || DEBUG
+extern kern_return_t pmap_test_text_corruption(pmap_paddr_t);
+#endif /* DEVELOPMENT || DEBUG */
+
 #endif /* #ifndef ASSEMBLER */
 
 #if __ARM_KERNEL_PROTECT__