diff options
Diffstat (limited to 'arch/x86/include/asm/processor.h')
-rw-r--r-- | arch/x86/include/asm/processor.h | 31 |
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 |
380 | DECLARE_PER_CPU(struct orig_ist, orig_ist); | 381 | DECLARE_PER_CPU(struct orig_ist, orig_ist); |
382 | |||
383 | union 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 | |||
396 | DECLARE_PER_CPU(union irq_stack_union, irq_stack_union); | ||
397 | DECLARE_INIT_PER_CPU(irq_stack_union); | ||
398 | |||
399 | DECLARE_PER_CPU(char *, irq_stack_ptr); | ||
400 | #else /* X86_64 */ | ||
401 | #ifdef CONFIG_CC_STACKPROTECTOR | ||
402 | DECLARE_PER_CPU(unsigned long, stack_canary); | ||
381 | #endif | 403 | #endif |
404 | #endif /* X86_64 */ | ||
382 | 405 | ||
383 | extern void print_cpu_info(struct cpuinfo_x86 *); | 406 | extern void print_cpu_info(struct cpuinfo_x86 *); |
384 | extern unsigned int xstate_size; | 407 | extern unsigned int xstate_size; |
@@ -752,9 +775,9 @@ extern int sysenter_setup(void); | |||
752 | extern struct desc_ptr early_gdt_descr; | 775 | extern struct desc_ptr early_gdt_descr; |
753 | 776 | ||
754 | extern void cpu_set_gdt(int); | 777 | extern void cpu_set_gdt(int); |
755 | extern void switch_to_new_gdt(void); | 778 | extern void switch_to_new_gdt(int); |
779 | extern void load_percpu_segment(int); | ||
756 | extern void cpu_init(void); | 780 | extern void cpu_init(void); |
757 | extern void init_gdt(int cpu); | ||
758 | 781 | ||
759 | static inline unsigned long get_debugctlmsr(void) | 782 | static inline unsigned long get_debugctlmsr(void) |
760 | { | 783 | { |