diff options
| author | Benjamin Herrenschmidt <benh@kernel.crashing.org> | 2012-02-08 14:34:13 -0500 |
|---|---|---|
| committer | Benjamin Herrenschmidt <benh@kernel.crashing.org> | 2012-02-13 23:01:38 -0500 |
| commit | 6fe5f5f3ffade25aa94526010f219df3be521bf7 (patch) | |
| tree | 08b4148aad720793b37564c8ef8cdef0aea10241 | |
| parent | 7a768d30caa30e66ba89659f1845cc35b1bfc715 (diff) | |
powerpc: Fix WARN_ON in decrementer_check_overflow
We use __get_cpu_var() which triggers a false positive warning
in smp_processor_id() thinking interrupts are enabled (at this
point, they are soft-enabled but hard-disabled).
Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
| -rw-r--r-- | arch/powerpc/kernel/irq.c | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/arch/powerpc/kernel/irq.c b/arch/powerpc/kernel/irq.c index 701d4aceb4f4..01e2877e8e04 100644 --- a/arch/powerpc/kernel/irq.c +++ b/arch/powerpc/kernel/irq.c | |||
| @@ -118,10 +118,14 @@ static inline notrace void set_soft_enabled(unsigned long enable) | |||
| 118 | static inline notrace void decrementer_check_overflow(void) | 118 | static inline notrace void decrementer_check_overflow(void) |
| 119 | { | 119 | { |
| 120 | u64 now = get_tb_or_rtc(); | 120 | u64 now = get_tb_or_rtc(); |
| 121 | u64 *next_tb = &__get_cpu_var(decrementers_next_tb); | 121 | u64 *next_tb; |
| 122 | |||
| 123 | preempt_disable(); | ||
| 124 | next_tb = &__get_cpu_var(decrementers_next_tb); | ||
| 122 | 125 | ||
| 123 | if (now >= *next_tb) | 126 | if (now >= *next_tb) |
| 124 | set_dec(1); | 127 | set_dec(1); |
| 128 | preempt_enable(); | ||
| 125 | } | 129 | } |
| 126 | 130 | ||
| 127 | notrace void arch_local_irq_restore(unsigned long en) | 131 | notrace void arch_local_irq_restore(unsigned long en) |
