x86: move x86_64 gdt closer to i386
i386 and x86_64 used two different schemes for maintaining the gdt. With this patch, x86_64 initial gdt table is defined in a .c file, same way as i386 is now. Also, we call it "gdt_page", and the descriptor, "early_gdt_descr". This way we achieve common naming, which can allow for more code integration. Signed-off-by: Glauber Costa <gcosta@redhat.com> Signed-off-by: Ingo Molnar <mingo@elte.hu>
This commit is contained in:
committed by
Ingo Molnar
parent
736f12bff9
commit
a939098afc
@ -61,18 +61,14 @@
|
||||
#define GDT_ENTRY_TLS_MAX (GDT_ENTRY_TLS_MIN + GDT_ENTRY_TLS_ENTRIES - 1)
|
||||
|
||||
#define GDT_ENTRY_DEFAULT_USER_CS 14
|
||||
#define __USER_CS (GDT_ENTRY_DEFAULT_USER_CS * 8 + 3)
|
||||
|
||||
#define GDT_ENTRY_DEFAULT_USER_DS 15
|
||||
#define __USER_DS (GDT_ENTRY_DEFAULT_USER_DS * 8 + 3)
|
||||
|
||||
#define GDT_ENTRY_KERNEL_BASE 12
|
||||
|
||||
#define GDT_ENTRY_KERNEL_CS (GDT_ENTRY_KERNEL_BASE + 0)
|
||||
#define __KERNEL_CS (GDT_ENTRY_KERNEL_CS * 8)
|
||||
|
||||
#define GDT_ENTRY_KERNEL_DS (GDT_ENTRY_KERNEL_BASE + 1)
|
||||
#define __KERNEL_DS (GDT_ENTRY_KERNEL_DS * 8)
|
||||
|
||||
#define GDT_ENTRY_TSS (GDT_ENTRY_KERNEL_BASE + 4)
|
||||
#define GDT_ENTRY_LDT (GDT_ENTRY_KERNEL_BASE + 5)
|
||||
@ -139,10 +135,11 @@
|
||||
#else
|
||||
#include <asm/cache.h>
|
||||
|
||||
#define __KERNEL_CS 0x10
|
||||
#define __KERNEL_DS 0x18
|
||||
#define GDT_ENTRY_KERNEL32_CS 1
|
||||
#define GDT_ENTRY_KERNEL_CS 2
|
||||
#define GDT_ENTRY_KERNEL_DS 3
|
||||
|
||||
#define __KERNEL32_CS 0x08
|
||||
#define __KERNEL32_CS (GDT_ENTRY_KERNEL32_CS * 8)
|
||||
|
||||
/*
|
||||
* we cannot use the same code segment descriptor for user and kernel
|
||||
@ -150,10 +147,10 @@
|
||||
* The segment offset needs to contain a RPL. Grr. -AK
|
||||
* GDT layout to get 64bit syscall right (sysret hardcodes gdt offsets)
|
||||
*/
|
||||
|
||||
#define __USER32_CS 0x23 /* 4*8+3 */
|
||||
#define __USER_DS 0x2b /* 5*8+3 */
|
||||
#define __USER_CS 0x33 /* 6*8+3 */
|
||||
#define GDT_ENTRY_DEFAULT_USER32_CS 4
|
||||
#define GDT_ENTRY_DEFAULT_USER_DS 5
|
||||
#define GDT_ENTRY_DEFAULT_USER_CS 6
|
||||
#define __USER32_CS (GDT_ENTRY_DEFAULT_USER32_CS * 8 + 3)
|
||||
#define __USER32_DS __USER_DS
|
||||
|
||||
#define GDT_ENTRY_TSS 8 /* needs two entries */
|
||||
@ -175,6 +172,10 @@
|
||||
|
||||
#endif
|
||||
|
||||
#define __KERNEL_CS (GDT_ENTRY_KERNEL_CS * 8)
|
||||
#define __KERNEL_DS (GDT_ENTRY_KERNEL_DS * 8)
|
||||
#define __USER_DS (GDT_ENTRY_DEFAULT_USER_DS* 8 + 3)
|
||||
#define __USER_CS (GDT_ENTRY_DEFAULT_USER_CS* 8 + 3)
|
||||
#ifndef CONFIG_PARAVIRT
|
||||
#define get_kernel_rpl() 0
|
||||
#endif
|
||||
|
Reference in New Issue
Block a user