Messages in this thread | | | Date | Tue, 17 Aug 2010 20:56:56 +0800 | From | Yong Zhang <> | Subject | Re: [PATCH] fix BUG using smp_processor_id() in touch_nmi_watchdog and touch_softlockup_watchdog |
| |
On Tue, Aug 17, 2010 at 01:39:48PM +0300, Sergey Senozhatsky wrote: > Please kindly review. > > --- > > diff --git a/kernel/watchdog.c b/kernel/watchdog.c > index 613bc1f..22dd388 100644 > --- a/kernel/watchdog.c > +++ b/kernel/watchdog.c > @@ -116,13 +116,12 @@ static unsigned long get_sample_period(void) > static void __touch_watchdog(void) > { > int this_cpu = smp_processor_id(); > - > - __get_cpu_var(watchdog_touch_ts) = get_timestamp(this_cpu); > + per_cpu(watchdog_touch_ts, this_cpu) = get_timestamp(this_cpu); > }
The two caller of __touch_watchdog() is: 1)watchdog_timer_fn(): it's preempt disabled when called. 2)watchdog(): it's bound to one cpu. Then means using smp_processor_id() safely.
So I think this change is needless, but anyway it's harmless.
Below looks fine to me. But you still need comments from others.
Thanks, Yong
> > void touch_softlockup_watchdog(void) > { > - __get_cpu_var(watchdog_touch_ts) = 0; > + __raw_get_cpu_var(watchdog_touch_ts) = 0; > } > EXPORT_SYMBOL(touch_softlockup_watchdog); > > @@ -142,7 +141,7 @@ void touch_all_softlockup_watchdogs(void) > #ifdef CONFIG_HARDLOCKUP_DETECTOR > void touch_nmi_watchdog(void) > { > - __get_cpu_var(watchdog_nmi_touch) = true; > + __raw_get_cpu_var(watchdog_nmi_touch) = true; > touch_softlockup_watchdog(); > } > EXPORT_SYMBOL(touch_nmi_watchdog);
| |