diff options
author | Thomas Gleixner <tglx@linutronix.de> | 2015-07-30 00:30:51 +0200 |
---|---|---|
committer | Thomas Gleixner <tglx@linutronix.de> | 2015-07-30 00:51:47 +0200 |
commit | c948c26048ecb1023d2e68222c736f7da41da498 (patch) | |
tree | 5a279f6f55acc0a2389096692eb8a5a80eab62dc /arch/x86/kernel/apic/apic.c | |
parent | b23d8e527815954768861bb20d2b224009fff7cd (diff) | |
download | op-kernel-dev-c948c26048ecb1023d2e68222c736f7da41da498.zip op-kernel-dev-c948c26048ecb1023d2e68222c736f7da41da498.tar.gz |
x86/apic: Drop local_irq_save/restore in timer callbacks
These callbacks are called with interrupts disabled from the core
code. Fixup the local caller to disable interrupts.
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Cc: Viresh Kumar <viresh.kumar@linaro.org>
Diffstat (limited to 'arch/x86/kernel/apic/apic.c')
-rw-r--r-- | arch/x86/kernel/apic/apic.c | 18 |
1 files changed, 3 insertions, 15 deletions
diff --git a/arch/x86/kernel/apic/apic.c b/arch/x86/kernel/apic/apic.c index ecd6705..1dceb27 100644 --- a/arch/x86/kernel/apic/apic.c +++ b/arch/x86/kernel/apic/apic.c @@ -464,40 +464,27 @@ static int lapic_next_deadline(unsigned long delta, static int lapic_timer_shutdown(struct clock_event_device *evt) { - unsigned long flags; unsigned int v; /* Lapic used as dummy for broadcast ? */ if (evt->features & CLOCK_EVT_FEAT_DUMMY) return 0; - local_irq_save(flags); - v = apic_read(APIC_LVTT); v |= (APIC_LVT_MASKED | LOCAL_TIMER_VECTOR); apic_write(APIC_LVTT, v); apic_write(APIC_TMICT, 0); - - local_irq_restore(flags); - return 0; } static inline int lapic_timer_set_periodic_oneshot(struct clock_event_device *evt, bool oneshot) { - unsigned long flags; - /* Lapic used as dummy for broadcast ? */ if (evt->features & CLOCK_EVT_FEAT_DUMMY) return 0; - local_irq_save(flags); - __setup_APIC_LVTT(lapic_timer_frequency, oneshot, 1); - - local_irq_restore(flags); - return 0; } @@ -804,6 +791,7 @@ static int __init calibrate_APIC_clock(void) cpu_relax(); /* Stop the lapic timer */ + local_irq_disable(); lapic_timer_shutdown(levt); /* Jiffies delta */ @@ -815,8 +803,8 @@ static int __init calibrate_APIC_clock(void) apic_printk(APIC_VERBOSE, "... jiffies result ok\n"); else levt->features |= CLOCK_EVT_FEAT_DUMMY; - } else - local_irq_enable(); + } + local_irq_enable(); if (levt->features & CLOCK_EVT_FEAT_DUMMY) { pr_warning("APIC timer disabled due to verification failure\n"); |