powerpc/watchdog: Moderate touch_nmi_watchdog overhead
Some code can go into a tight loop calling touch_nmi_watchdog (e.g., stop_machine CPU hotplug code). This can cause contention on watchdog locks particularly if all CPUs with watchdog enabled are spinning in the loops. Avoid this storm of activity by running the watchdog timer callback from this path if we have exceeded the timer period since it was last run. Signed-off-by: Nicholas Piggin <npiggin@gmail.com> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
This commit is contained in:
parent
d8e2a40535
commit
26c5c6e129
|
@ -263,9 +263,11 @@ static void wd_timer_fn(unsigned long data)
|
||||||
|
|
||||||
void arch_touch_nmi_watchdog(void)
|
void arch_touch_nmi_watchdog(void)
|
||||||
{
|
{
|
||||||
|
unsigned long ticks = tb_ticks_per_usec * wd_timer_period_ms * 1000;
|
||||||
int cpu = smp_processor_id();
|
int cpu = smp_processor_id();
|
||||||
|
|
||||||
watchdog_timer_interrupt(cpu);
|
if (get_tb() - per_cpu(wd_timer_tb, cpu) >= ticks)
|
||||||
|
watchdog_timer_interrupt(cpu);
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(arch_touch_nmi_watchdog);
|
EXPORT_SYMBOL(arch_touch_nmi_watchdog);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue