Messages in this thread | | | Date | Wed, 22 Oct 2008 17:50:08 -0400 | From | Aristeu Rozanski <> | Subject | Re: [RFC][PATCH] nmi watchdog: handle NMI_IO_APIC on nmi_watchdog |
| |
> > > stop_apic_nmi_watchdog() doesnt currently properly disable the > > > generation of NMIs when they come from an IO-APIC, so this will need > > > more fixes i believe. One approach would be to save the IO-APIC id and > > > pin when the watchdog is set up, and use it later on to poke that > > > IO-APIC register to disable NMI generation there. > > the patch I sent has this change: > > > > @@ -270,6 +270,8 @@ void stop_apic_nmi_watchdog(void *unused > > return; > > if (nmi_watchdog == NMI_LOCAL_APIC) > > lapic_watchdog_stop(); > > + else > > + __acpi_nmi_disable(NULL); > > __get_cpu_var(wd_enabled) = 0; > > atomic_dec(&nmi_active); > > } > > > > and: > > static void __acpi_nmi_disable(void *__unused) > > { > > apic_write(APIC_LVT0, APIC_DM_NMI | APIC_LVT_MASKED); > > } > > > > do you think this isn't enough? > > but this stops all NMIs, not just the IO-APIC generated ones, doesnt it? external NMIs would come by LINT1, no? after reading a lot and talking with Vivek, what I understood was that 8259 is also connected to LINT0, so timer interrupts would be reported both in IOAPIC and on LINT0. LVT0 is being configured on setup_nmi() to generate an NMI. Also, the same timer interrupt would generate an regular interrupt coming from IOAPIC. Clearing the APIC_DM_NMI on LVT0 would disable the NMI delivery, but not the regular interrupt. or am I missing something here?
-- Aristeu
| |