|
@@ -63,23 +63,23 @@ cpumask_t cpu_sibling_setup_map;
|
|
|
|
|
|
static struct cpu_dev *this_cpu __cpuinitdata;
|
|
static struct cpu_dev *this_cpu __cpuinitdata;
|
|
|
|
|
|
|
|
+DEFINE_PER_CPU_PAGE_ALIGNED(struct gdt_page, gdt_page) = { .gdt = {
|
|
#ifdef CONFIG_X86_64
|
|
#ifdef CONFIG_X86_64
|
|
-/* We need valid kernel segments for data and code in long mode too
|
|
|
|
- * IRET will check the segment types kkeil 2000/10/28
|
|
|
|
- * Also sysret mandates a special GDT layout
|
|
|
|
- */
|
|
|
|
-/* The TLS descriptors are currently at a different place compared to i386.
|
|
|
|
- Hopefully nobody expects them at a fixed place (Wine?) */
|
|
|
|
-DEFINE_PER_CPU(struct gdt_page, gdt_page) = { .gdt = {
|
|
|
|
|
|
+ /*
|
|
|
|
+ * We need valid kernel segments for data and code in long mode too
|
|
|
|
+ * IRET will check the segment types kkeil 2000/10/28
|
|
|
|
+ * Also sysret mandates a special GDT layout
|
|
|
|
+ *
|
|
|
|
+ * The TLS descriptors are currently at a different place compared to i386.
|
|
|
|
+ * Hopefully nobody expects them at a fixed place (Wine?)
|
|
|
|
+ */
|
|
[GDT_ENTRY_KERNEL32_CS] = { { { 0x0000ffff, 0x00cf9b00 } } },
|
|
[GDT_ENTRY_KERNEL32_CS] = { { { 0x0000ffff, 0x00cf9b00 } } },
|
|
[GDT_ENTRY_KERNEL_CS] = { { { 0x0000ffff, 0x00af9b00 } } },
|
|
[GDT_ENTRY_KERNEL_CS] = { { { 0x0000ffff, 0x00af9b00 } } },
|
|
[GDT_ENTRY_KERNEL_DS] = { { { 0x0000ffff, 0x00cf9300 } } },
|
|
[GDT_ENTRY_KERNEL_DS] = { { { 0x0000ffff, 0x00cf9300 } } },
|
|
[GDT_ENTRY_DEFAULT_USER32_CS] = { { { 0x0000ffff, 0x00cffb00 } } },
|
|
[GDT_ENTRY_DEFAULT_USER32_CS] = { { { 0x0000ffff, 0x00cffb00 } } },
|
|
[GDT_ENTRY_DEFAULT_USER_DS] = { { { 0x0000ffff, 0x00cff300 } } },
|
|
[GDT_ENTRY_DEFAULT_USER_DS] = { { { 0x0000ffff, 0x00cff300 } } },
|
|
[GDT_ENTRY_DEFAULT_USER_CS] = { { { 0x0000ffff, 0x00affb00 } } },
|
|
[GDT_ENTRY_DEFAULT_USER_CS] = { { { 0x0000ffff, 0x00affb00 } } },
|
|
-} };
|
|
|
|
#else
|
|
#else
|
|
-DEFINE_PER_CPU_PAGE_ALIGNED(struct gdt_page, gdt_page) = { .gdt = {
|
|
|
|
[GDT_ENTRY_KERNEL_CS] = { { { 0x0000ffff, 0x00cf9a00 } } },
|
|
[GDT_ENTRY_KERNEL_CS] = { { { 0x0000ffff, 0x00cf9a00 } } },
|
|
[GDT_ENTRY_KERNEL_DS] = { { { 0x0000ffff, 0x00cf9200 } } },
|
|
[GDT_ENTRY_KERNEL_DS] = { { { 0x0000ffff, 0x00cf9200 } } },
|
|
[GDT_ENTRY_DEFAULT_USER_CS] = { { { 0x0000ffff, 0x00cffa00 } } },
|
|
[GDT_ENTRY_DEFAULT_USER_CS] = { { { 0x0000ffff, 0x00cffa00 } } },
|
|
@@ -112,8 +112,8 @@ DEFINE_PER_CPU_PAGE_ALIGNED(struct gdt_page, gdt_page) = { .gdt = {
|
|
|
|
|
|
[GDT_ENTRY_ESPFIX_SS] = { { { 0x00000000, 0x00c09200 } } },
|
|
[GDT_ENTRY_ESPFIX_SS] = { { { 0x00000000, 0x00c09200 } } },
|
|
[GDT_ENTRY_PERCPU] = { { { 0x00000000, 0x00000000 } } },
|
|
[GDT_ENTRY_PERCPU] = { { { 0x00000000, 0x00000000 } } },
|
|
-} };
|
|
|
|
#endif
|
|
#endif
|
|
|
|
+} };
|
|
EXPORT_PER_CPU_SYMBOL_GPL(gdt_page);
|
|
EXPORT_PER_CPU_SYMBOL_GPL(gdt_page);
|
|
|
|
|
|
#ifdef CONFIG_X86_32
|
|
#ifdef CONFIG_X86_32
|