lkml.org 
[lkml]   [2008]   [Sep]   [22]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [PATCH] NMI watchdog: setup before enabling NMI watchdog

    * Aristeu Rozanski <aris@redhat.com> wrote:

    > There's a small window when NMI watchdog is being set up that if any NMIs
    > are triggered, the NMI code will make make use of not initalized wd_ops
    > elements:
    > 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) {
    > case NMI_LOCAL_APIC:
    > /* enable it before to avoid race with handler */
    > --> __get_cpu_var(wd_enabled) = 1;
    > --> if (lapic_watchdog_init(nmi_hz) < 0) {
    > (...)
    > asmlinkage notrace __kprobes void default_do_nmi(struct pt_regs *regs)
    > {
    > (...)
    > if (nmi_watchdog_tick(regs, reason))
    > return;
    > (...)
    > notrace __kprobes int
    > nmi_watchdog_tick(struct pt_regs *regs, unsigned reason)
    > {
    > (...)
    > if (!__get_cpu_var(wd_enabled))
    > return rc;
    > switch (nmi_watchdog) {
    > case NMI_LOCAL_APIC:
    > rc |= lapic_wd_event(nmi_hz);
    > (...)
    > int lapic_wd_event(unsigned nmi_hz)
    > {
    > struct nmi_watchdog_ctlblk *wd = &__get_cpu_var(nmi_watchdog_ctlblk);
    > u64 ctr;
    >
    > --> rdmsrl(wd->perfctr_msr, ctr);
    >
    > and wd->*_msr will be initialized on each processor type specific setup, after
    > enabling NMIs for PMIs. Since the counter was just set, the chances of an
    > performance counter generated NMI is minimal, but any other unknown NMI would
    > trigger the problem. This patch fixes the problem by setting everything up
    > before enabling performance counter generated NMIs and will set wd_enabled
    > using a callback function.
    >
    > Signed-off-by: Aristeu Rozanski <aris@redhat.com>
    > Acked-by: Don Zickus <dzickus@redhat.com>
    > Acked-by: Prarit Bhargava <prarit@redhat.com>
    > Acked-by: Vivek Goyal <vgoyal@redhat.com>

    applied to tip/x86/nmi-watchdog, thanks Aristeu!

    Ingo


    \
     
     \ /
      Last update: 2008-09-22 19:49    [W:0.026 / U:0.036 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site