Fedora kernel-2.6.17-1.2142_FC4 patched with stable patch-2.6.17.4-vs2.0.2-rc26.diff
[linux-2.6.git] / include / asm-arm / thread_info.h
index ab1a6f4..cfbccb6 100644 (file)
 
 #ifdef __KERNEL__
 
+#include <linux/compiler.h>
+#include <asm/fpstate.h>
+
+#define THREAD_SIZE_ORDER      1
+#define THREAD_SIZE            8192
+#define THREAD_START_SP                (THREAD_SIZE - 8)
+
 #ifndef __ASSEMBLY__
 
 struct task_struct;
 struct exec_domain;
 
-#include <asm/fpstate.h>
 #include <asm/ptrace.h>
 #include <asm/types.h>
 #include <asm/domain.h>
@@ -40,11 +46,11 @@ struct cpu_context_save {
 
 /*
  * low level task data that entry.S needs immediate access to.
- * We assume cpu_context follows immedately after cpu_domain.
+ * __switch_to() assumes cpu_context follows immediately after cpu_domain.
  */
 struct thread_info {
        unsigned long           flags;          /* low level flags */
-       __s32                   preempt_count;  /* 0 => preemptable, <0 => bug */
+       int                     preempt_count;  /* 0 => preemptable, <0 => bug */
        mm_segment_t            addr_limit;     /* address limit */
        struct task_struct      *task;          /* main task structure */
        struct exec_domain      *exec_domain;   /* execution domain */
@@ -52,8 +58,10 @@ struct thread_info {
        __u32                   cpu_domain;     /* cpu domain */
        struct cpu_context_save cpu_context;    /* cpu context */
        __u8                    used_cp[16];    /* thread used copro */
-       union fp_state          fpstate;
-       struct restart_block    restart_block;
+       unsigned long           tp_value;
+       union fp_state          fpstate __attribute__((aligned(8)));
+       union vfp_state         vfpstate;
+       struct restart_block    restart_block;
 };
 
 #define INIT_THREAD_INFO(tsk)                                          \
@@ -82,38 +90,29 @@ static inline struct thread_info *current_thread_info(void) __attribute_const__;
 static inline struct thread_info *current_thread_info(void)
 {
        register unsigned long sp asm ("sp");
-       return (struct thread_info *)(sp & ~0x1fff);
+       return (struct thread_info *)(sp & ~(THREAD_SIZE - 1));
 }
 
-#define THREAD_SIZE            (8192)
-
 extern struct thread_info *alloc_thread_info(struct task_struct *task);
 extern void free_thread_info(struct thread_info *);
 
-#define get_thread_info(ti)    get_task_struct((ti)->task)
-#define put_thread_info(ti)    put_task_struct((ti)->task)
-
 #define thread_saved_pc(tsk)   \
-       ((unsigned long)(pc_pointer((tsk)->thread_info->cpu_context.pc)))
+       ((unsigned long)(pc_pointer(task_thread_info(tsk)->cpu_context.pc)))
 #define thread_saved_fp(tsk)   \
-       ((unsigned long)((tsk)->thread_info->cpu_context.fp))
-
-#else /* !__ASSEMBLY__ */
+       ((unsigned long)(task_thread_info(tsk)->cpu_context.fp))
 
-#define TI_FLAGS       0
-#define TI_PREEMPT     4
-#define TI_ADDR_LIMIT  8
-#define TI_TASK                12
-#define TI_EXEC_DOMAIN 16
-#define TI_CPU         20
-#define TI_CPU_DOMAIN  24
-#define TI_CPU_SAVE    28
-#define TI_USED_CP     76
-#define TI_FPSTATE     (TI_USED_CP+16)
+extern void iwmmxt_task_disable(struct thread_info *);
+extern void iwmmxt_task_copy(struct thread_info *, void *);
+extern void iwmmxt_task_restore(struct thread_info *, void *);
+extern void iwmmxt_task_release(struct thread_info *);
 
 #endif
 
-#define PREEMPT_ACTIVE 0x04000000
+/*
+ * We use bit 30 of the preempt_count to indicate that kernel
+ * preemption is occuring.  See include/asm-arm/hardirq.h.
+ */
+#define PREEMPT_ACTIVE 0x40000000
 
 /*
  * thread information flags:
@@ -128,15 +127,16 @@ extern void free_thread_info(struct thread_info *);
 #define TIF_SIGPENDING         1
 #define TIF_NEED_RESCHED       2
 #define TIF_SYSCALL_TRACE      8
-#define TIF_USED_FPU           16
-#define TIF_POLLING_NRFLAG     17
+#define TIF_POLLING_NRFLAG     16
+#define TIF_USING_IWMMXT       17
+#define TIF_MEMDIE             18
 
 #define _TIF_NOTIFY_RESUME     (1 << TIF_NOTIFY_RESUME)
 #define _TIF_SIGPENDING                (1 << TIF_SIGPENDING)
 #define _TIF_NEED_RESCHED      (1 << TIF_NEED_RESCHED)
 #define _TIF_SYSCALL_TRACE     (1 << TIF_SYSCALL_TRACE)
-#define _TIF_USED_FPU          (1 << TIF_USED_FPU)
 #define _TIF_POLLING_NRFLAG    (1 << TIF_POLLING_NRFLAG)
+#define _TIF_USING_IWMMXT      (1 << TIF_USING_IWMMXT)
 
 /*
  * Change these and you break ASM code in entry-common.S