diff options
Diffstat (limited to 'arch/x86/include/asm/thread_info.h')
| -rw-r--r-- | arch/x86/include/asm/thread_info.h | 62 | 
1 files changed, 9 insertions, 53 deletions
diff --git a/arch/x86/include/asm/thread_info.h b/arch/x86/include/asm/thread_info.h index 27811190cbd..854053889d4 100644 --- a/arch/x86/include/asm/thread_info.h +++ b/arch/x86/include/asm/thread_info.h @@ -9,6 +9,7 @@  #include <linux/compiler.h>  #include <asm/page.h> +#include <asm/percpu.h>  #include <asm/types.h>  /* @@ -28,17 +29,10 @@ struct thread_info {  	__u32			flags;		/* low level flags */  	__u32			status;		/* thread synchronous flags */  	__u32			cpu;		/* current CPU */ -	int			preempt_count;	/* 0 => preemptable, -						   <0 => BUG */ +	int			saved_preempt_count;  	mm_segment_t		addr_limit;  	struct restart_block    restart_block;  	void __user		*sysenter_return; -#ifdef CONFIG_X86_32 -	unsigned long           previous_esp;   /* ESP of the previous stack in -						   case of nested (IRQ) stacks -						*/ -	__u8			supervisor_stack[0]; -#endif  	unsigned int		sig_on_uaccess_error:1;  	unsigned int		uaccess_err:1;	/* uaccess failed */  }; @@ -49,7 +43,7 @@ struct thread_info {  	.exec_domain	= &default_exec_domain,	\  	.flags		= 0,			\  	.cpu		= 0,			\ -	.preempt_count	= INIT_PREEMPT_COUNT,	\ +	.saved_preempt_count = INIT_PREEMPT_COUNT,	\  	.addr_limit	= KERNEL_DS,		\  	.restart_block = {			\  		.fn = do_no_restart_syscall,	\ @@ -89,6 +83,7 @@ struct thread_info {  #define TIF_FORK		18	/* ret_from_fork */  #define TIF_NOHZ		19	/* in adaptive nohz mode */  #define TIF_MEMDIE		20	/* is terminating due to OOM killer */ +#define TIF_POLLING_NRFLAG	21	/* idle is polling for TIF_NEED_RESCHED */  #define TIF_IO_BITMAP		22	/* uses I/O bitmap */  #define TIF_FORCED_TF		24	/* true if TF in eflags artificially */  #define TIF_BLOCKSTEP		25	/* set when we want DEBUGCTLMSR_BTF */ @@ -112,6 +107,7 @@ struct thread_info {  #define _TIF_IA32		(1 << TIF_IA32)  #define _TIF_FORK		(1 << TIF_FORK)  #define _TIF_NOHZ		(1 << TIF_NOHZ) +#define _TIF_POLLING_NRFLAG	(1 << TIF_POLLING_NRFLAG)  #define _TIF_IO_BITMAP		(1 << TIF_IO_BITMAP)  #define _TIF_FORCED_TF		(1 << TIF_FORCED_TF)  #define _TIF_BLOCKSTEP		(1 << TIF_BLOCKSTEP) @@ -154,11 +150,9 @@ struct thread_info {  #define _TIF_WORK_CTXSW_PREV (_TIF_WORK_CTXSW|_TIF_USER_RETURN_NOTIFY)  #define _TIF_WORK_CTXSW_NEXT (_TIF_WORK_CTXSW) -#define PREEMPT_ACTIVE		0x10000000 +#define STACK_WARN		(THREAD_SIZE/8) +#define KERNEL_STACK_OFFSET	(5*(BITS_PER_LONG/8)) -#ifdef CONFIG_X86_32 - -#define STACK_WARN	(THREAD_SIZE/8)  /*   * macros/functions for gaining access to the thread information structure   * @@ -166,40 +160,6 @@ struct thread_info {   */  #ifndef __ASSEMBLY__ - -/* how to get the current stack pointer from C */ -register unsigned long current_stack_pointer asm("esp") __used; - -/* how to get the thread information struct from C */ -static inline struct thread_info *current_thread_info(void) -{ -	return (struct thread_info *) -		(current_stack_pointer & ~(THREAD_SIZE - 1)); -} - -#else /* !__ASSEMBLY__ */ - -/* how to get the thread information struct from ASM */ -#define GET_THREAD_INFO(reg)	 \ -	movl $-THREAD_SIZE, reg; \ -	andl %esp, reg - -/* use this one if reg already contains %esp */ -#define GET_THREAD_INFO_WITH_ESP(reg) \ -	andl $-THREAD_SIZE, reg - -#endif - -#else /* X86_32 */ - -#include <asm/percpu.h> -#define KERNEL_STACK_OFFSET (5*8) - -/* - * macros/functions for gaining access to the thread information structure - * preempt_count needs to be 1 initially, until the scheduler is functional. - */ -#ifndef __ASSEMBLY__  DECLARE_PER_CPU(unsigned long, kernel_stack);  static inline struct thread_info *current_thread_info(void) @@ -214,8 +174,8 @@ static inline struct thread_info *current_thread_info(void)  /* how to get the thread information struct from ASM */  #define GET_THREAD_INFO(reg) \ -	movq PER_CPU_VAR(kernel_stack),reg ; \ -	subq $(THREAD_SIZE-KERNEL_STACK_OFFSET),reg +	_ASM_MOV PER_CPU_VAR(kernel_stack),reg ; \ +	_ASM_SUB $(THREAD_SIZE-KERNEL_STACK_OFFSET),reg ;  /*   * Same if PER_CPU_VAR(kernel_stack) is, perhaps with some offset, already in @@ -225,8 +185,6 @@ static inline struct thread_info *current_thread_info(void)  #endif -#endif /* !X86_32 */ -  /*   * Thread-synchronous status.   * @@ -235,8 +193,6 @@ static inline struct thread_info *current_thread_info(void)   * have to worry about atomic accesses.   */  #define TS_COMPAT		0x0002	/* 32bit syscall active (64BIT)*/ -#define TS_POLLING		0x0004	/* idle task polling need_resched, -					   skip sending interrupt */  #define TS_RESTORE_SIGMASK	0x0008	/* restore signal mask in do_signal() */  #ifndef __ASSEMBLY__  | 
