diff options
Diffstat (limited to 'arch/x86/include/asm/processor.h')
-rw-r--r-- | arch/x86/include/asm/processor.h | 45 |
1 files changed, 31 insertions, 14 deletions
diff --git a/arch/x86/include/asm/processor.h b/arch/x86/include/asm/processor.h index 3bfd5235a9e..76139506c3e 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 |
@@ -247,7 +248,6 @@ struct x86_hw_tss { | |||
247 | #define IO_BITMAP_LONGS (IO_BITMAP_BYTES/sizeof(long)) | 248 | #define IO_BITMAP_LONGS (IO_BITMAP_BYTES/sizeof(long)) |
248 | #define IO_BITMAP_OFFSET offsetof(struct tss_struct, io_bitmap) | 249 | #define IO_BITMAP_OFFSET offsetof(struct tss_struct, io_bitmap) |
249 | #define INVALID_IO_BITMAP_OFFSET 0x8000 | 250 | #define INVALID_IO_BITMAP_OFFSET 0x8000 |
250 | #define INVALID_IO_BITMAP_OFFSET_LAZY 0x9000 | ||
251 | 251 | ||
252 | struct tss_struct { | 252 | struct tss_struct { |
253 | /* | 253 | /* |
@@ -262,11 +262,6 @@ struct tss_struct { | |||
262 | * be within the limit. | 262 | * be within the limit. |
263 | */ | 263 | */ |
264 | unsigned long io_bitmap[IO_BITMAP_LONGS + 1]; | 264 | unsigned long io_bitmap[IO_BITMAP_LONGS + 1]; |
265 | /* | ||
266 | * Cache the current maximum and the last task that used the bitmap: | ||
267 | */ | ||
268 | unsigned long io_bitmap_max; | ||
269 | struct thread_struct *io_bitmap_owner; | ||
270 | 265 | ||
271 | /* | 266 | /* |
272 | * .. and then another 0x100 bytes for the emergency kernel stack: | 267 | * .. and then another 0x100 bytes for the emergency kernel stack: |
@@ -378,9 +373,30 @@ union thread_xstate { | |||
378 | 373 | ||
379 | #ifdef CONFIG_X86_64 | 374 | #ifdef CONFIG_X86_64 |
380 | DECLARE_PER_CPU(struct orig_ist, orig_ist); | 375 | DECLARE_PER_CPU(struct orig_ist, orig_ist); |
376 | |||
377 | union irq_stack_union { | ||
378 | char irq_stack[IRQ_STACK_SIZE]; | ||
379 | /* | ||
380 | * GCC hardcodes the stack canary as %gs:40. Since the | ||
381 | * irq_stack is the object at %gs:0, we reserve the bottom | ||
382 | * 48 bytes of the irq stack for the canary. | ||
383 | */ | ||
384 | struct { | ||
385 | char gs_base[40]; | ||
386 | unsigned long stack_canary; | ||
387 | }; | ||
388 | }; | ||
389 | |||
390 | DECLARE_PER_CPU(union irq_stack_union, irq_stack_union); | ||
391 | DECLARE_INIT_PER_CPU(irq_stack_union); | ||
392 | |||
393 | DECLARE_PER_CPU(char *, irq_stack_ptr); | ||
394 | #else /* X86_64 */ | ||
395 | #ifdef CONFIG_CC_STACKPROTECTOR | ||
396 | DECLARE_PER_CPU(unsigned long, stack_canary); | ||
381 | #endif | 397 | #endif |
398 | #endif /* X86_64 */ | ||
382 | 399 | ||
383 | extern void print_cpu_info(struct cpuinfo_x86 *); | ||
384 | extern unsigned int xstate_size; | 400 | extern unsigned int xstate_size; |
385 | extern void free_thread_xstate(struct task_struct *); | 401 | extern void free_thread_xstate(struct task_struct *); |
386 | extern struct kmem_cache *task_xstate_cachep; | 402 | extern struct kmem_cache *task_xstate_cachep; |
@@ -752,9 +768,9 @@ extern int sysenter_setup(void); | |||
752 | extern struct desc_ptr early_gdt_descr; | 768 | extern struct desc_ptr early_gdt_descr; |
753 | 769 | ||
754 | extern void cpu_set_gdt(int); | 770 | extern void cpu_set_gdt(int); |
755 | extern void switch_to_new_gdt(void); | 771 | extern void switch_to_new_gdt(int); |
772 | extern void load_percpu_segment(int); | ||
756 | extern void cpu_init(void); | 773 | extern void cpu_init(void); |
757 | extern void init_gdt(int cpu); | ||
758 | 774 | ||
759 | static inline unsigned long get_debugctlmsr(void) | 775 | static inline unsigned long get_debugctlmsr(void) |
760 | { | 776 | { |
@@ -839,6 +855,7 @@ static inline void spin_lock_prefetch(const void *x) | |||
839 | * User space process size: 3GB (default). | 855 | * User space process size: 3GB (default). |
840 | */ | 856 | */ |
841 | #define TASK_SIZE PAGE_OFFSET | 857 | #define TASK_SIZE PAGE_OFFSET |
858 | #define TASK_SIZE_MAX TASK_SIZE | ||
842 | #define STACK_TOP TASK_SIZE | 859 | #define STACK_TOP TASK_SIZE |
843 | #define STACK_TOP_MAX STACK_TOP | 860 | #define STACK_TOP_MAX STACK_TOP |
844 | 861 | ||
@@ -898,7 +915,7 @@ extern unsigned long thread_saved_pc(struct task_struct *tsk); | |||
898 | /* | 915 | /* |
899 | * User space process size. 47bits minus one guard page. | 916 | * User space process size. 47bits minus one guard page. |
900 | */ | 917 | */ |
901 | #define TASK_SIZE64 ((1UL << 47) - PAGE_SIZE) | 918 | #define TASK_SIZE_MAX ((1UL << 47) - PAGE_SIZE) |
902 | 919 | ||
903 | /* This decides where the kernel will search for a free chunk of vm | 920 | /* This decides where the kernel will search for a free chunk of vm |
904 | * space during mmap's. | 921 | * space during mmap's. |
@@ -907,12 +924,12 @@ extern unsigned long thread_saved_pc(struct task_struct *tsk); | |||
907 | 0xc0000000 : 0xFFFFe000) | 924 | 0xc0000000 : 0xFFFFe000) |
908 | 925 | ||
909 | #define TASK_SIZE (test_thread_flag(TIF_IA32) ? \ | 926 | #define TASK_SIZE (test_thread_flag(TIF_IA32) ? \ |
910 | IA32_PAGE_OFFSET : TASK_SIZE64) | 927 | IA32_PAGE_OFFSET : TASK_SIZE_MAX) |
911 | #define TASK_SIZE_OF(child) ((test_tsk_thread_flag(child, TIF_IA32)) ? \ | 928 | #define TASK_SIZE_OF(child) ((test_tsk_thread_flag(child, TIF_IA32)) ? \ |
912 | IA32_PAGE_OFFSET : TASK_SIZE64) | 929 | IA32_PAGE_OFFSET : TASK_SIZE_MAX) |
913 | 930 | ||
914 | #define STACK_TOP TASK_SIZE | 931 | #define STACK_TOP TASK_SIZE |
915 | #define STACK_TOP_MAX TASK_SIZE64 | 932 | #define STACK_TOP_MAX TASK_SIZE_MAX |
916 | 933 | ||
917 | #define INIT_THREAD { \ | 934 | #define INIT_THREAD { \ |
918 | .sp0 = (unsigned long)&init_stack + sizeof(init_stack) \ | 935 | .sp0 = (unsigned long)&init_stack + sizeof(init_stack) \ |