aboutsummaryrefslogtreecommitdiffstats
path: root/arch/x86/include/asm/processor.h
diff options
context:
space:
mode:
Diffstat (limited to 'arch/x86/include/asm/processor.h')
-rw-r--r--arch/x86/include/asm/processor.h31
1 files changed, 27 insertions, 4 deletions
diff --git a/arch/x86/include/asm/processor.h b/arch/x86/include/asm/processor.h
index 091cd8855f2..dabab1a19dd 100644
--- a/arch/x86/include/asm/processor.h
+++ b/arch/x86/include/asm/processor.h
@@ -16,6 +16,7 @@ struct mm_struct;
16#include <asm/cpufeature.h> 16#include <asm/cpufeature.h>
17#include <asm/system.h> 17#include <asm/system.h>
18#include <asm/page.h> 18#include <asm/page.h>
19#include <asm/pgtable_types.h>
19#include <asm/percpu.h> 20#include <asm/percpu.h>
20#include <asm/msr.h> 21#include <asm/msr.h>
21#include <asm/desc_defs.h> 22#include <asm/desc_defs.h>
@@ -73,7 +74,7 @@ struct cpuinfo_x86 {
73 char pad0; 74 char pad0;
74#else 75#else
75 /* Number of 4K pages in DTLB/ITLB combined(in pages): */ 76 /* Number of 4K pages in DTLB/ITLB combined(in pages): */
76 int x86_tlbsize; 77 int x86_tlbsize;
77 __u8 x86_virt_bits; 78 __u8 x86_virt_bits;
78 __u8 x86_phys_bits; 79 __u8 x86_phys_bits;
79#endif 80#endif
@@ -353,7 +354,7 @@ struct i387_soft_struct {
353 u8 no_update; 354 u8 no_update;
354 u8 rm; 355 u8 rm;
355 u8 alimit; 356 u8 alimit;
356 struct info *info; 357 struct math_emu_info *info;
357 u32 entry_eip; 358 u32 entry_eip;
358}; 359};
359 360
@@ -378,7 +379,29 @@ union thread_xstate {
378 379
379#ifdef CONFIG_X86_64 380#ifdef CONFIG_X86_64
380DECLARE_PER_CPU(struct orig_ist, orig_ist); 381DECLARE_PER_CPU(struct orig_ist, orig_ist);
382
383union irq_stack_union {
384 char irq_stack[IRQ_STACK_SIZE];
385 /*
386 * GCC hardcodes the stack canary as %gs:40. Since the
387 * irq_stack is the object at %gs:0, we reserve the bottom
388 * 48 bytes of the irq stack for the canary.
389 */
390 struct {
391 char gs_base[40];
392 unsigned long stack_canary;
393 };
394};
395
396DECLARE_PER_CPU(union irq_stack_union, irq_stack_union);
397DECLARE_INIT_PER_CPU(irq_stack_union);
398
399DECLARE_PER_CPU(char *, irq_stack_ptr);
400#else /* X86_64 */
401#ifdef CONFIG_CC_STACKPROTECTOR
402DECLARE_PER_CPU(unsigned long, stack_canary);
381#endif 403#endif
404#endif /* X86_64 */
382 405
383extern void print_cpu_info(struct cpuinfo_x86 *); 406extern void print_cpu_info(struct cpuinfo_x86 *);
384extern unsigned int xstate_size; 407extern unsigned int xstate_size;
@@ -752,9 +775,9 @@ extern int sysenter_setup(void);
752extern struct desc_ptr early_gdt_descr; 775extern struct desc_ptr early_gdt_descr;
753 776
754extern void cpu_set_gdt(int); 777extern void cpu_set_gdt(int);
755extern void switch_to_new_gdt(void); 778extern void switch_to_new_gdt(int);
779extern void load_percpu_segment(int);
756extern void cpu_init(void); 780extern void cpu_init(void);
757extern void init_gdt(int cpu);
758 781
759static inline unsigned long get_debugctlmsr(void) 782static inline unsigned long get_debugctlmsr(void)
760{ 783{