On 07/04/2013 09:04 PM, Thomas Gleixner wrote: >>> > > static int clocksource_watchdog_kthread(void *data) >>> > > { >>> > > struct clocksource *cs, *tmp; >>> > > @@ -412,11 +415,14 @@ static int clocksource_watchdog_kthread(void >>> > > *data) >>> > > >>> > > mutex_lock(&clocksource_mutex); >>> > > spin_lock_irqsave(&watchdog_lock, flags); >>> > > - list_for_each_entry_safe(cs, tmp, &watchdog_list, wd_list) >>> > > + list_for_each_entry_safe(cs, tmp, &watchdog_list, wd_list) { >>> > > if (cs->flags & CLOCK_SOURCE_UNSTABLE) { >>> > > list_del_init(&cs->wd_list); >>> > > list_add(&cs->wd_list, &unstable); >>> > > } >>> > > + if (cs->flags & CLOCK_SOURCE_VALID_FOR_HRES) >>> > > + clocksource_select(); >> > >> > Unlikely, but if we have 3 watched clocksources which have the HRES >> > bit set, you'd call 3 times clocksource_select(). > Also the reselect must be called outside the watchdog_lock region.
Sorry for stupid, the watchdog_lock used protect watchdog related resource. but clocksource_select doesn't touch them. So, I know it isn't necessary to put reselect under this lock. Just don't know why the reselect *must* be called outside of it? -- Thanks Alex -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/