|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v2] x86/NMI: Allow processing unknown NMIs when watchdog is enabled
>>> On 27.08.14 at 17:11, <ross.lagerwall@xxxxxxxxxx> wrote:
> @@ -473,14 +496,26 @@ void nmi_watchdog_tick(const struct cpu_user_regs *regs)
> }
> else if ( nmi_perfctr_msr == MSR_P6_PERFCTR0 )
> {
> + rdmsrl(MSR_P6_PERFCTR0, msr_content);
> + if ( msr_content & (1ULL << P6_EVENT_WIDTH) )
> + watchdog_tick = 0;
> +
> /*
> * Only P6 based Pentium M need to re-unmask the apic vector but
> * it doesn't hurt other P6 variants.
> */
> apic_write(APIC_LVTPC, APIC_DM_NMI);
> }
> + else if ( nmi_perfctr_msr == MSR_K7_PERFCTR0 )
> + {
> + rdmsrl(MSR_K7_PERFCTR0, msr_content);
> + if ( msr_content & (1ULL << K7_EVENT_WIDTH) )
> + watchdog_tick = 0;
> + }
Looking at the top counter bits is rather weak a check, but I guess
there's nothing better (and considering a few more of the top
bits would only shrink the window of mis-detection, not eliminate
it)...
> --- a/xen/arch/x86/traps.c
> +++ b/xen/arch/x86/traps.c
> @@ -3306,6 +3306,7 @@ void do_nmi(const struct cpu_user_regs *regs)
> {
> unsigned int cpu = smp_processor_id();
> unsigned char reason;
> + bool_t ticked = 1;
>
> ++nmi_count(cpu);
>
> @@ -3313,7 +3314,7 @@ void do_nmi(const struct cpu_user_regs *regs)
> return;
>
> if ( nmi_watchdog )
> - nmi_watchdog_tick(regs);
> + ticked = nmi_watchdog_tick(regs);
>
> /* Only the BSP gets external NMIs from the system. */
> if ( cpu == 0 )
> @@ -3323,7 +3324,7 @@ void do_nmi(const struct cpu_user_regs *regs)
> pci_serr_error(regs);
> if ( reason & 0x40 )
> io_check_error(regs);
> - if ( !(reason & 0xc0) && !nmi_watchdog )
> + if ( !(reason & 0xc0) && !ticked && watchdog_force )
> unknown_nmi_error(regs, reason);
So when !nmi_watchdog we now will never get into
unknown_nmi_error()? Also I think the inspection of watchdog_force
would better be done above where the watchdog gets handled, so
it's all in one central place.
Jan
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |