diff options
| -rw-r--r-- | arch/x86/include/asm/smpboot_hooks.h | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/arch/x86/include/asm/smpboot_hooks.h b/arch/x86/include/asm/smpboot_hooks.h index 725b77831993..49adfd7bb4a4 100644 --- a/arch/x86/include/asm/smpboot_hooks.h +++ b/arch/x86/include/asm/smpboot_hooks.h | |||
| @@ -10,7 +10,11 @@ static inline void smpboot_clear_io_apic_irqs(void) | |||
| 10 | 10 | ||
| 11 | static inline void smpboot_setup_warm_reset_vector(unsigned long start_eip) | 11 | static inline void smpboot_setup_warm_reset_vector(unsigned long start_eip) |
| 12 | { | 12 | { |
| 13 | unsigned long flags; | ||
| 14 | |||
| 15 | spin_lock_irqsave(&rtc_lock, flags); | ||
| 13 | CMOS_WRITE(0xa, 0xf); | 16 | CMOS_WRITE(0xa, 0xf); |
| 17 | spin_unlock_irqrestore(&rtc_lock, flags); | ||
| 14 | local_flush_tlb(); | 18 | local_flush_tlb(); |
| 15 | pr_debug("1.\n"); | 19 | pr_debug("1.\n"); |
| 16 | *((volatile unsigned short *)phys_to_virt(apic->trampoline_phys_high)) = | 20 | *((volatile unsigned short *)phys_to_virt(apic->trampoline_phys_high)) = |
| @@ -23,6 +27,8 @@ static inline void smpboot_setup_warm_reset_vector(unsigned long start_eip) | |||
| 23 | 27 | ||
| 24 | static inline void smpboot_restore_warm_reset_vector(void) | 28 | static inline void smpboot_restore_warm_reset_vector(void) |
| 25 | { | 29 | { |
| 30 | unsigned long flags; | ||
| 31 | |||
| 26 | /* | 32 | /* |
| 27 | * Install writable page 0 entry to set BIOS data area. | 33 | * Install writable page 0 entry to set BIOS data area. |
| 28 | */ | 34 | */ |
| @@ -32,7 +38,9 @@ static inline void smpboot_restore_warm_reset_vector(void) | |||
| 32 | * Paranoid: Set warm reset code and vector here back | 38 | * Paranoid: Set warm reset code and vector here back |
| 33 | * to default values. | 39 | * to default values. |
| 34 | */ | 40 | */ |
| 41 | spin_lock_irqsave(&rtc_lock, flags); | ||
| 35 | CMOS_WRITE(0, 0xf); | 42 | CMOS_WRITE(0, 0xf); |
| 43 | spin_unlock_irqrestore(&rtc_lock, flags); | ||
| 36 | 44 | ||
| 37 | *((volatile u32 *)phys_to_virt(apic->trampoline_phys_low)) = 0; | 45 | *((volatile u32 *)phys_to_virt(apic->trampoline_phys_low)) = 0; |
| 38 | } | 46 | } |
