Skip to content

Commit

Permalink
sparc64: On non-Niagara, need to touch NMI watchdog in NOHZ mode.
Browse files Browse the repository at this point in the history
When we're idling in NOHZ mode, timer interrupts are not running.

Evidence of processing timer interrupts is what the NMI watchdog
uses to determine if the CPU is stuck.

On Niagara, we'll yield the cpu.  This will make the cpu, at
worst, hang out in the hypervisor until an interrupt arrives.
This will prevent the NMI watchdog timer from firing.

However on non-Niagara we just loop executing instructions
which will cause the NMI watchdog to keep firing.  It won't
see timer interrupts happening so it will think the cpu is
stuck.

Fix this by touching the NMI watchdog in the cpu idle loop
on non-Niagara machines.

Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
David S. Miller committed Feb 3, 2009
1 parent e5553a6 commit 802c64b
Showing 1 changed file with 4 additions and 1 deletion.
5 changes: 4 additions & 1 deletion arch/sparc/kernel/process_64.c
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@
#include <linux/cpu.h>
#include <linux/elfcore.h>
#include <linux/sysrq.h>
#include <linux/nmi.h>

#include <asm/uaccess.h>
#include <asm/system.h>
Expand All @@ -52,8 +53,10 @@

static void sparc64_yield(int cpu)
{
if (tlb_type != hypervisor)
if (tlb_type != hypervisor) {
touch_nmi_watchdog();
return;
}

clear_thread_flag(TIF_POLLING_NRFLAG);
smp_mb__after_clear_bit();
Expand Down

0 comments on commit 802c64b

Please sign in to comment.