]> git.saurik.com Git - apple/xnu.git/blobdiff - osfmk/i386/mp.h
xnu-4903.221.2.tar.gz
[apple/xnu.git] / osfmk / i386 / mp.h
index 5fffdf0c16cd28610bf13f56e1dd466119f5e66e..705f41c189b92bf86fdf8bd26ba2db536646389f 100644 (file)
@@ -103,6 +103,7 @@ extern      int     kdb_debug;
 extern int     kdb_active[];
 
 extern volatile boolean_t mp_kdp_trap;
+extern volatile boolean_t mp_kdp_is_NMI;
 extern         volatile boolean_t force_immediate_debugger_NMI;
 extern  volatile boolean_t pmap_tlb_flush_timeout;
 extern  volatile usimple_lock_t spinlock_timed_out;
@@ -111,10 +112,12 @@ extern  uint32_t spinlock_timeout_NMI(uintptr_t thread_addr);
 
 extern uint64_t        LastDebuggerEntryAllowance;
 
-extern void    mp_kdp_enter(void);
-extern void    mp_kdp_exit(void);
+extern void      mp_kdp_enter(boolean_t proceed_on_failure);
+extern void      mp_kdp_exit(void);
+extern boolean_t mp_kdp_all_cpus_halted(void);
 
 extern boolean_t       mp_recent_debugger_activity(void);
+extern void    kernel_spin(uint64_t spin_ns);
 
 /*
  * All cpu rendezvous:
@@ -128,6 +131,8 @@ extern void mp_rendezvous_no_intrs(
                void (*action_func)(void *),
                void *arg);
 extern void mp_rendezvous_break_lock(void);
+extern void mp_rendezvous_lock(void);
+extern void mp_rendezvous_unlock(void);
 
 /*
  * All cpu broadcast.
@@ -183,10 +188,16 @@ extern cpu_t mp_cpus_call1(
                void            (*action_func)(void *, void*),
                void            *arg0,
                void            *arg1,
-               cpumask_t       *cpus_calledp,
-               cpumask_t       *cpus_notcalledp);
+               cpumask_t       *cpus_calledp);
 
-extern void mp_cpus_NMIPI(cpumask_t cpus);
+typedef enum {
+       NONE = 0,
+       SPINLOCK_TIMEOUT,
+       TLB_FLUSH_TIMEOUT,
+       CROSSCALL_TIMEOUT,
+       INTERRUPT_WATCHDOG
+} NMI_reason_t;
+extern void NMIPI_panic(cpumask_t cpus, NMI_reason_t reason);
 
 /* Interrupt a set of cpus, forcing an exit out of non-root mode */
 extern void mp_cpus_kick(cpumask_t cpus);
@@ -271,42 +282,6 @@ i_bit_impl(long word, long bit) {
 #define i_bit(bit, word)       i_bit_impl((long)(*(word)), bit)
 #endif
 
-#if    MACH_RT
-
-#if   defined(__x86_64__)
-
-#define _DISABLE_PREEMPTION                                    \
-       incl    %gs:CPU_PREEMPTION_LEVEL
-
-#define _ENABLE_PREEMPTION                                     \
-       decl    %gs:CPU_PREEMPTION_LEVEL                ;       \
-       jne     9f                                      ;       \
-       call    EXT(kernel_preempt_check)               ;       \
-9:     
-
-#define _ENABLE_PREEMPTION_NO_CHECK                            \
-       decl    %gs:CPU_PREEMPTION_LEVEL
-
-#else
-#error Unsupported architecture
-#endif
-
-/* x86_64 just calls through to the other macro directly */
-#define DISABLE_PREEMPTION             _DISABLE_PREEMPTION
-#define ENABLE_PREEMPTION              _ENABLE_PREEMPTION
-#define ENABLE_PREEMPTION_NO_CHECK     _ENABLE_PREEMPTION_NO_CHECK
-#define MP_DISABLE_PREEMPTION          _DISABLE_PREEMPTION
-#define MP_ENABLE_PREEMPTION           _ENABLE_PREEMPTION
-#define MP_ENABLE_PREEMPTION_NO_CHECK  _ENABLE_PREEMPTION_NO_CHECK
-
-#else  /* MACH_RT */
-#define DISABLE_PREEMPTION
-#define ENABLE_PREEMPTION
-#define ENABLE_PREEMPTION_NO_CHECK
-#define MP_DISABLE_PREEMPTION
-#define MP_ENABLE_PREEMPTION
-#define MP_ENABLE_PREEMPTION_NO_CHECK
-#endif /* MACH_RT */
 
 #endif /* _I386_MP_H_ */