]> git.saurik.com Git - apple/xnu.git/blobdiff - osfmk/i386/thread.h
xnu-4570.51.1.tar.gz
[apple/xnu.git] / osfmk / i386 / thread.h
index b75e36a990027b95528ea0c4b2170db3f2a71201..d9ec2568eeae29dd4287ca5e681045c4cfee4bbc 100644 (file)
 
 #include <kern/simple_lock.h>
 
+#include <i386/fpu.h>
 #include <i386/iopb.h>
 #include <i386/seg.h>
 #include <i386/tss.h>
 #include <i386/eflags.h>
 
 #include <i386/cpu_data.h>
+#include <i386/proc_reg.h>
 
 #include <machine/pal_routines.h>
 
 /*
- *     x86_kernel_state:
+ *     machine_thread_kernel_state, x86_kernel_state:
  *
  *     This structure corresponds to the state of kernel registers
  *     as saved in a context-switch.  It lives at the base of the stack.
@@ -100,6 +102,11 @@ struct x86_kernel_state {
        uint64_t        k_rip;
 };
 
+#ifdef MACH_KERNEL_PRIVATE
+typedef struct x86_kernel_state machine_thread_kernel_state;
+#include <kern/thread_kernel_state.h>
+#endif
+
 /*
  * Maps state flavor to number of words in the state:
  */
@@ -116,8 +123,7 @@ struct machine_thread {
        void                    *ifps;
        void                    *ids;
        decl_simple_lock_data(,lock);           /* protects ifps and ids */
-       uint64_t                iss_pte0;
-       uint64_t                iss_pte1;
+       xstate_t                xstate;
 
 #ifdef MACH_BSD
        uint64_t                cthread_self;   /* for use of cthread package */
@@ -128,6 +134,12 @@ struct machine_thread {
 
        struct pal_pcb          pal_pcb;
        uint32_t                specFlags;
+       /* N.B.: These "specFlags" are read-modify-written non-atomically within
+        * the copyio routine. So conceivably any exception that modifies the
+        * flags in a persistent manner could be clobbered if it occurs within
+        * a copyio context. For now, the only other flag here is OnProc which
+        * is not modified except at context switch.
+        */
 #define                OnProc          0x1
 #define                CopyIOActive    0x2 /* Checked to ensure DTrace actions do not re-enter copyio(). */
        uint64_t                thread_gpu_ns;
@@ -163,19 +175,21 @@ extern void *act_thread_csave(void);
 extern void act_thread_catt(void *ctx);
 extern void act_thread_cfree(void *ctx);
 
+#define FIND_PERFCONTROL_STATE(th)     (PERFCONTROL_STATE_NULL)
 
 /*
  *     On the kernel stack is:
  *     stack:  ...
- *             struct x86_kernel_state
+ *             struct thread_kernel_state
  *     stack+kernel_stack_size
  */
 
+
 #define STACK_IKS(stack)       \
-       ((struct x86_kernel_state *)((stack) + kernel_stack_size) - 1)
+       (&(((struct thread_kernel_state *)((stack) + kernel_stack_size)) - 1)->machine)
 
 /*
- * Return the current stack depth including x86_kernel_state
+ * Return the current stack depth including thread_kernel_state
  */
 static inline vm_offset_t
 current_stack_depth(void)
@@ -190,7 +204,7 @@ current_stack_depth(void)
        __asm__ volatile("mov %%esp, %0" : "=m" (stack_ptr));
 #endif
        return (current_cpu_datap()->cpu_kernel_stack
-               + sizeof(struct x86_kernel_state)
+               + sizeof(struct thread_kernel_state)
                - stack_ptr); 
 }