From: Andrew Morton <akpm@linux-foundation.org>
To: eranian@gmail.com
Cc: eranian@googlemail.com, linux-kernel@vger.kernel.org,
mingo@elte.hu, andi@firstfloor.org, tglx@linutronix.de,
Shaohua Li <shaohua.li@intel.com>
Subject: Re: NMI watchdog setup_lapic_nmi_watchdog() problem
Date: Tue, 7 Oct 2008 13:21:58 -0700 [thread overview]
Message-ID: <20081007132158.009669d2.akpm@linux-foundation.org> (raw)
In-Reply-To: <7c86c4470810070845w1346107cx211148c52fd03b68@mail.gmail.com>
On Tue, 7 Oct 2008 17:45:32 +0200
"stephane eranian" <eranian@googlemail.com> wrote:
> Hello,
>
> I was doing some more testing with perfmon when I ran into
> a problem with the NMI watchdog code in 2.6.27-rc8.
>
> Since 2.6.20, it is possible to enable/disable the NMI watchdog
> on-the-fly via /proc/sys/kernel/nmi_watchdog. This is a nice option
> which avoids having to reboot the kernel.
>
> Enabling/disabling the NMI watchdog uses two internal functions
> enable_lapic_nmi_watchdog() and disable_lapic_nmi_watchdog().
>
> Enable_lapic_nmi_watchdog() uses a IPI handler to setup the
> APIC on each CPU. However, it turns out that this handler, namely,
> setup_apic_nmi_watchdog() relies on some explicit ordering constraint
> due to suspend/resume constraints as explained in the comment
> below:
>
> void setup_apic_nmi_watchdog(void *unused)
> {
> if (__get_cpu_var(wd_enabled))
> return;
>
> /* cheap hack to support suspend/resume */
> /* if cpu0 is not active neither should the other cpus */
> if (smp_processor_id() != 0 && atomic_read(&nmi_active) <= 0)
> return;
>
> switch (nmi_watchdog) {
> [snip]
> }
>
> Supposing watchdog was disabled via /proc, nmi_active = 0. Then if you
> re-enable, and if CPU0 is not the first to execute the IPI handler, then none
> of the other CPUS will re-enable their NMI watchdog timer. On a quad-core
> system, I have seen, for instance, 2 out of 4 with NMI watchdogs re-enabled.
>
> I am not an expert at suspend/resume. I am assuming there was a race condition
> there and that's why this code was added early on. The problem is that it now
> conflicts with the /proc option.
>
> It is not clear to me how this works during boot. Obviously the order
> is respected
> and all CPUs have their NMI watchdog enabled.
>
> Until I understand the suspend/resume issue, it is hard to provide a
> fix for this.
>
> Any comments?
The "cheap hack" was added in September 2006.
2.6.20 was released in Feb 2007.
So presumably this problem has always been there, since
/proc/sys/kernel/nmi_watchdog was first added, only nobody has hit it
before.
Have you only recently started to use /proc/sys/kernel/nmi_watchdog, or
did it work OK on any earlier kernel?
next prev parent reply other threads:[~2008-10-07 20:22 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-10-07 15:45 NMI watchdog setup_lapic_nmi_watchdog() problem stephane eranian
2008-10-07 20:21 ` Andrew Morton [this message]
2008-10-07 21:10 ` stephane eranian
2008-10-07 23:45 ` Andi Kleen
2008-10-07 23:57 ` stephane eranian
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=20081007132158.009669d2.akpm@linux-foundation.org \
--to=akpm@linux-foundation.org \
--cc=andi@firstfloor.org \
--cc=eranian@gmail.com \
--cc=eranian@googlemail.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@elte.hu \
--cc=shaohua.li@intel.com \
--cc=tglx@linutronix.de \
/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.