diff options
Diffstat (limited to 'arch/i386/kernel/efi.c')
-rw-r--r-- | arch/i386/kernel/efi.c | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/arch/i386/kernel/efi.c b/arch/i386/kernel/efi.c index ecad519fd395..c9cad7ba0d2d 100644 --- a/arch/i386/kernel/efi.c +++ b/arch/i386/kernel/efi.c | |||
@@ -70,10 +70,13 @@ static void efi_call_phys_prelog(void) | |||
70 | { | 70 | { |
71 | unsigned long cr4; | 71 | unsigned long cr4; |
72 | unsigned long temp; | 72 | unsigned long temp; |
73 | struct Xgt_desc_struct *cpu_gdt_descr; | ||
73 | 74 | ||
74 | spin_lock(&efi_rt_lock); | 75 | spin_lock(&efi_rt_lock); |
75 | local_irq_save(efi_rt_eflags); | 76 | local_irq_save(efi_rt_eflags); |
76 | 77 | ||
78 | cpu_gdt_descr = &per_cpu(cpu_gdt_descr, 0); | ||
79 | |||
77 | /* | 80 | /* |
78 | * If I don't have PSE, I should just duplicate two entries in page | 81 | * If I don't have PSE, I should just duplicate two entries in page |
79 | * directory. If I have PSE, I just need to duplicate one entry in | 82 | * directory. If I have PSE, I just need to duplicate one entry in |
@@ -103,17 +106,18 @@ static void efi_call_phys_prelog(void) | |||
103 | */ | 106 | */ |
104 | local_flush_tlb(); | 107 | local_flush_tlb(); |
105 | 108 | ||
106 | cpu_gdt_descr[0].address = __pa(cpu_gdt_descr[0].address); | 109 | cpu_gdt_descr->address = __pa(cpu_gdt_descr->address); |
107 | load_gdt((struct Xgt_desc_struct *) __pa(&cpu_gdt_descr[0])); | 110 | load_gdt(cpu_gdt_descr); |
108 | } | 111 | } |
109 | 112 | ||
110 | static void efi_call_phys_epilog(void) | 113 | static void efi_call_phys_epilog(void) |
111 | { | 114 | { |
112 | unsigned long cr4; | 115 | unsigned long cr4; |
116 | struct Xgt_desc_struct *cpu_gdt_descr = &per_cpu(cpu_gdt_descr, 0); | ||
117 | |||
118 | cpu_gdt_descr->address = __va(cpu_gdt_descr->address); | ||
119 | load_gdt(cpu_gdt_descr); | ||
113 | 120 | ||
114 | cpu_gdt_descr[0].address = | ||
115 | (unsigned long) __va(cpu_gdt_descr[0].address); | ||
116 | load_gdt(&cpu_gdt_descr[0]); | ||
117 | cr4 = read_cr4(); | 121 | cr4 = read_cr4(); |
118 | 122 | ||
119 | if (cr4 & X86_CR4_PSE) { | 123 | if (cr4 & X86_CR4_PSE) { |