diff options
| -rw-r--r-- | arch/x86_64/kernel/trampoline.S | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/arch/x86_64/kernel/trampoline.S b/arch/x86_64/kernel/trampoline.S index 6d9c9a8e7d0e..23a03eb91fc7 100644 --- a/arch/x86_64/kernel/trampoline.S +++ b/arch/x86_64/kernel/trampoline.S | |||
| @@ -42,8 +42,15 @@ r_base = . | |||
| 42 | movl $0xA5A5A5A5, trampoline_data - r_base | 42 | movl $0xA5A5A5A5, trampoline_data - r_base |
| 43 | # write marker for master knows we're running | 43 | # write marker for master knows we're running |
| 44 | 44 | ||
| 45 | lidt idt_48 - r_base # load idt with 0, 0 | 45 | /* |
| 46 | lgdt gdt_48 - r_base # load gdt with whatever is appropriate | 46 | * GDT tables in non default location kernel can be beyond 16MB and |
| 47 | * lgdt will not be able to load the address as in real mode default | ||
| 48 | * operand size is 16bit. Use lgdtl instead to force operand size | ||
| 49 | * to 32 bit. | ||
| 50 | */ | ||
| 51 | |||
| 52 | lidtl idt_48 - r_base # load idt with 0, 0 | ||
| 53 | lgdtl gdt_48 - r_base # load gdt with whatever is appropriate | ||
| 47 | 54 | ||
| 48 | xor %ax, %ax | 55 | xor %ax, %ax |
| 49 | inc %ax # protected mode (PE) bit | 56 | inc %ax # protected mode (PE) bit |
