All of lore.kernel.org
 help / color / mirror / Atom feed
From: Don Zickus <dzickus@redhat.com>
To: linux-kernel@vger.kernel.org
Cc: Don Zickus <dzickus@redhat.com>,
	mingo@elte.hu, peterz@infradead.org, gorcunov@gmail.com,
	aris@redhat.com
Subject: [PATCH 3/4] nmi_watchdog: fallback to software events when no hardware pmu detected
Date: Fri, 12 Feb 2010 17:19:20 -0500	[thread overview]
Message-ID: <1266013161-31197-3-git-send-email-dzickus@redhat.com> (raw)
In-Reply-To: <1266013161-31197-1-git-send-email-dzickus@redhat.com>

Not all arches have a PMU or have perf_event support for their PMU.  The
nmi_watchdog will fail in those cases.  Fallback to using software events to
generate nmi_watchdog traffic with local apic interrupts.

Tested on a Pentium4 and it worked as expected, excepting for detecting cpu
lockups.

The problem with using software events as a cpu lock up detector is the
nmi_watchdog uses the logic that if local apic interrupts stop incrementing
then the cpu is probably locked up.  But with software events we use the
local apic to trigger the nmi_watchdog callback to see if local apic
interrupts are still firing, which obviously they are otherwise we wouldn't
have been triggered.

The algorithm to detect cpu lock ups is the same as the old nmi_watchdog.
Perhaps we need to find a better way to detect lock ups?

Signed-off-by: Don Zickus <dzickus@redhat.com>
---
 kernel/nmi_watchdog.c |    8 ++++++--
 1 files changed, 6 insertions(+), 2 deletions(-)

diff --git a/kernel/nmi_watchdog.c b/kernel/nmi_watchdog.c
index 73c1954..4f23505 100644
--- a/kernel/nmi_watchdog.c
+++ b/kernel/nmi_watchdog.c
@@ -166,8 +166,12 @@ cpu_callback(struct notifier_block *nfb, unsigned long action, void *hcpu)
 		wd_attr.sample_period = hw_nmi_get_sample_period();
 		event = perf_event_create_kernel_counter(&wd_attr, hotcpu, -1, wd_overflow);
 		if (IS_ERR(event)) {
-			printk(KERN_ERR "nmi watchdog failed to create perf event on %i: %p\n", hotcpu, event);
-			return NOTIFY_BAD;
+			wd_attr.type = PERF_TYPE_SOFTWARE;
+			event = perf_event_create_kernel_counter(&wd_attr, hotcpu, -1, wd_overflow);
+			if (IS_ERR(event)) {
+				printk(KERN_ERR "nmi watchdog failed to create perf event on %i: %p\n", hotcpu, event);
+				return NOTIFY_BAD;
+			}
 		}
 		per_cpu(nmi_watchdog_ev, hotcpu) = event;
 		perf_event_enable(per_cpu(nmi_watchdog_ev, hotcpu));
-- 
1.6.6.83.gc9a2


  parent reply	other threads:[~2010-02-12 22:20 UTC|newest]

Thread overview: 18+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-02-12 22:19 [PATCH 1/4] nmi_watchdog: use a boolean config flag for compiling Don Zickus
2010-02-12 22:19 ` [PATCH 2/4] nmi_watchdog: compile and portability fixes Don Zickus
2010-02-14  9:13   ` [tip:perf/nmi] nmi_watchdog: Compile " tip-bot for Don Zickus
2010-02-12 22:19 ` Don Zickus [this message]
2010-02-14  9:13   ` [tip:perf/nmi] nmi_watchdog: Fallback to software events when no hardware pmu detected tip-bot for Don Zickus
2010-02-15  0:33   ` [PATCH 3/4] nmi_watchdog: fallback " Paul Mackerras
2010-02-15 15:38     ` Don Zickus
2010-02-12 22:19 ` [PATCH 4/4] [RFC][powerpc] nmi_watchdog: support for powerpc Don Zickus
2010-02-14  9:12 ` [tip:perf/nmi] nmi_watchdog: Use a boolean config flag for compiling tip-bot for Don Zickus
2010-02-14 16:59 ` [PATCH 1/4] nmi_watchdog: use " Ingo Molnar
2010-02-14 18:12   ` Ingo Molnar
2010-02-15 23:02     ` Don Zickus
2010-02-15 17:51   ` Don Zickus
2010-02-15 18:13     ` Cyrill Gorcunov
2010-02-15 18:21       ` Cyrill Gorcunov
2010-02-15 18:45         ` Don Zickus
2010-02-16 14:30     ` Ingo Molnar
2010-02-18 19:27       ` Ingo Molnar

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1266013161-31197-3-git-send-email-dzickus@redhat.com \
    --to=dzickus@redhat.com \
    --cc=aris@redhat.com \
    --cc=gorcunov@gmail.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@elte.hu \
    --cc=peterz@infradead.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.