mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Stephane Eranian <eranian@hpl.hp.com>
To: "Eric W. Biederman" <ebiederm@xmission.com>
Cc: Andrew Morton <akpm@osdl.org>, linux-kernel@vger.kernel.org
Subject: Re: NMI watchdog logic on X86-64
Date: Mon, 19 Dec 2005 07:00:15 -0800	[thread overview]
Message-ID: <20051219150015.GG2690@frankl.hpl.hp.com> (raw)
In-Reply-To: <m1mziz77l9.fsf@ebiederm.dsl.xmission.com>

Eric,

On Sat, Dec 17, 2005 at 02:10:42PM -0700, Eric W. Biederman wrote:
> >> I would like to make sure that the logic of the code is that ONLY one
> >> processor does the NMI watchdog timer?
> 
> That much I answer.  The logic is that each processor does the NMI watchdog.
> 
I checked again and there is something that looks broken to me. I agree with you
that the NMI watchdog must be per-CPU. In fact it is setup per local APIC in
smpboot.c. Yet what is confusing is that the owner variable lapic_nmi_owner
is shared with spinlock. So you either setup NMI on all CPUs or none. 

That also implies that the reserve_lapic_nmi() function must be called only
once. If called for each CPU, it will fail for the second caller because
it will see the lapic_nmi_owner already set to RESERVED. But if called only
once, then the the disable logic in reserve_lapic_nmi() is wrong:

int reserve_lapic_nmi(void)
{
        unsigned int old_owner;

        spin_lock(&lapic_nmi_owner_lock);
        old_owner = lapic_nmi_owner;
        lapic_nmi_owner |= LAPIC_NMI_RESERVED;
        spin_unlock(&lapic_nmi_owner_lock);
        if (old_owner & LAPIC_NMI_RESERVED)
                return -EBUSY;
        if (old_owner & LAPIC_NMI_WATCHDOG)
                disable_lapic_nmi_watchdog();
        return 0;
}

If reserve_lapic_nmi() is called only once, then it will call
disable_lapic_nmi_watchdog() on ONLY one CPU even though it was
setup on all CPUs in smpboot.c. The function disable_lapic_nmi_watchdog()
should be called on all CPUs (once nmi_active, nmi_watchdog are moved
out of it). 

It appears to me that the lapic_nmi_owner variable somehow needs
to become a per-cpu variable. Then the reserve_lapic_nmi() would
have to be called on CPUs as necessary.

-- 
-Stephane

      parent reply	other threads:[~2005-12-19 15:02 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2005-12-13 16:15 Stephane Eranian
     [not found] ` <20051217123649.dd2743f4.akpm@osdl.org>
     [not found]   ` <m1mziz77l9.fsf@ebiederm.dsl.xmission.com>
2005-12-19 15:00     ` Stephane Eranian [this message]

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=20051219150015.GG2690@frankl.hpl.hp.com \
    --to=eranian@hpl.hp.com \
    --cc=akpm@osdl.org \
    --cc=ebiederm@xmission.com \
    --cc=linux-kernel@vger.kernel.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®