diff options
Diffstat (limited to 'arch/i386')
| -rw-r--r-- | arch/i386/kernel/efi.c | 14 | ||||
| -rw-r--r-- | arch/i386/kernel/time.c | 4 |
2 files changed, 10 insertions, 8 deletions
diff --git a/arch/i386/kernel/efi.c b/arch/i386/kernel/efi.c index e3e42fd62401..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,18 +106,17 @@ static void efi_call_phys_prelog(void) | |||
| 103 | */ | 106 | */ |
| 104 | local_flush_tlb(); | 107 | local_flush_tlb(); |
| 105 | 108 | ||
| 106 | per_cpu(cpu_gdt_descr, 0).address = | 109 | cpu_gdt_descr->address = __pa(cpu_gdt_descr->address); |
| 107 | __pa(per_cpu(cpu_gdt_descr, 0).address); | 110 | load_gdt(cpu_gdt_descr); |
| 108 | load_gdt((struct Xgt_desc_struct *)__pa(&per_cpu(cpu_gdt_descr, 0))); | ||
| 109 | } | 111 | } |
| 110 | 112 | ||
| 111 | static void efi_call_phys_epilog(void) | 113 | static void efi_call_phys_epilog(void) |
| 112 | { | 114 | { |
| 113 | unsigned long cr4; | 115 | unsigned long cr4; |
| 116 | struct Xgt_desc_struct *cpu_gdt_descr = &per_cpu(cpu_gdt_descr, 0); | ||
| 114 | 117 | ||
| 115 | per_cpu(cpu_gdt_descr, 0).address = | 118 | cpu_gdt_descr->address = __va(cpu_gdt_descr->address); |
| 116 | (unsigned long)__va(per_cpu(cpu_gdt_descr, 0).address); | 119 | load_gdt(cpu_gdt_descr); |
| 117 | load_gdt((struct Xgt_desc_struct *)__va(&per_cpu(cpu_gdt_descr, 0))); | ||
| 118 | 120 | ||
| 119 | cr4 = read_cr4(); | 121 | cr4 = read_cr4(); |
| 120 | 122 | ||
diff --git a/arch/i386/kernel/time.c b/arch/i386/kernel/time.c index a14d594bfbeb..9d3074759856 100644 --- a/arch/i386/kernel/time.c +++ b/arch/i386/kernel/time.c | |||
| @@ -412,9 +412,9 @@ static int timer_resume(struct sys_device *dev) | |||
| 412 | write_seqlock_irqsave(&xtime_lock, flags); | 412 | write_seqlock_irqsave(&xtime_lock, flags); |
| 413 | xtime.tv_sec = sec; | 413 | xtime.tv_sec = sec; |
| 414 | xtime.tv_nsec = 0; | 414 | xtime.tv_nsec = 0; |
| 415 | write_sequnlock_irqrestore(&xtime_lock, flags); | 415 | jiffies_64 += sleep_length; |
| 416 | jiffies += sleep_length; | ||
| 417 | wall_jiffies += sleep_length; | 416 | wall_jiffies += sleep_length; |
| 417 | write_sequnlock_irqrestore(&xtime_lock, flags); | ||
| 418 | if (last_timer->resume) | 418 | if (last_timer->resume) |
| 419 | last_timer->resume(); | 419 | last_timer->resume(); |
| 420 | cur_timer = last_timer; | 420 | cur_timer = last_timer; |
