From: Andrew Cooper <andrew.cooper3@citrix.com>
To: xen-devel@lists.xenproject.org
Cc: "Andrew Cooper" <andrew.cooper3@citrix.com>,
"Jan Beulich" <jbeulich@suse.com>,
"Roger Pau Monné" <roger@xenproject.org>,
"Teddy Astie" <teddy.astie@vates.tech>
Subject: [PATCH 4/5] x86/nmi: Check MSR_MISC_ENABLE for all Intel platforms
Date: Wed, 5 Aug 2026 13:45:24 +0100 [thread overview]
Message-ID: <20260805124525.105457-5-andrew.cooper3@citrix.com> (raw)
In-Reply-To: <20260805124525.105457-1-andrew.cooper3@citrix.com>
Right now it's only checked in setup_p4_watchdog(), and not in
setup_p6_watchdog().
Perform the check in the common Intel path in
setup_apic_nmi_watchdog(), and pass misc_enable as a parameter into
setup_p4_watchdog() to aoid reading it twice.
Fixes: 0dfba864fbff ("NMI watchdog support in Xen.")
Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
---
CC: Jan Beulich <jbeulich@suse.com>
CC: Roger Pau Monné <roger@xenproject.org>
CC: Teddy Astie <teddy.astie@vates.tech>
I presume this bug went unnoticed because watchdog is off-by-default.
---
xen/arch/x86/nmi.c | 21 +++++++++++++--------
1 file changed, 13 insertions(+), 8 deletions(-)
diff --git a/xen/arch/x86/nmi.c b/xen/arch/x86/nmi.c
index d9d07870a333..a8b0d79c7cf2 100644
--- a/xen/arch/x86/nmi.c
+++ b/xen/arch/x86/nmi.c
@@ -295,14 +295,8 @@ static void setup_p6_watchdog(unsigned counter)
wrmsrns(MSR_P6_EVNTSEL(0), evntsel);
}
-static void setup_p4_watchdog(void)
+static void setup_p4_watchdog(uint64_t misc_enable)
{
- uint64_t misc_enable;
-
- rdmsrl(MSR_IA32_MISC_ENABLE, misc_enable);
- if ( !(misc_enable & MSR_IA32_MISC_ENABLE_PERF_AVAIL) )
- return;
-
nmi_perfctr_msr = MSR_P4_IQ_PERFCTR0;
nmi_p4_cccr_val = P4_NMI_IQ_CCCR0;
if ( boot_cpu_data.x86_num_siblings == 2 )
@@ -337,6 +331,8 @@ static void setup_p4_watchdog(void)
void setup_apic_nmi_watchdog(void)
{
+ uint64_t misc;
+
if ( nmi_watchdog == NMI_NONE )
return;
@@ -347,6 +343,14 @@ void setup_apic_nmi_watchdog(void)
break;
case X86_VENDOR_INTEL:
+ misc = rdmsr(MSR_IA32_MISC_ENABLE);
+
+ if ( !(misc & MSR_IA32_MISC_ENABLE_PERF_AVAIL) )
+ {
+ printk(XENLOG_WARNING "Intel Perfmon unavailable\n");
+ goto disable;
+ }
+
switch ( boot_cpu_data.family )
{
case 6:
@@ -355,7 +359,7 @@ void setup_apic_nmi_watchdog(void)
: CORE_EVENT_CPU_CLOCKS_NOT_HALTED);
break;
case 15:
- setup_p4_watchdog();
+ setup_p4_watchdog(misc);
break;
}
break;
@@ -363,6 +367,7 @@ void setup_apic_nmi_watchdog(void)
if ( nmi_perfctr_msr == 0 )
{
+ disable:
printk(XENLOG_WARNING "Failed to configure NMI watchdog\n");
nmi_watchdog = NMI_NONE;
return;
--
2.34.1
next prev parent reply other threads:[~2026-08-05 12:45 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-08-05 12:45 [PATCH 0/5] x86/nmi: Watchdog fixes/improvement Part 1 Andrew Cooper
2026-08-05 12:45 ` [PATCH 1/5] x86/nmi: Drop {reserve,release}_lapic_nmi() Andrew Cooper
2026-08-05 13:48 ` Jan Beulich
2026-08-05 12:45 ` [PATCH 2/5] x86/nmi: Drop K7_NMI_EVENT Andrew Cooper
2026-08-05 13:49 ` Jan Beulich
2026-08-17 16:24 ` [PATCH 2.5/5] x86/nmi: Remove logic for pre-64bit Pentium 4 CPUs Andrew Cooper
2026-08-18 6:32 ` Jan Beulich
2026-08-05 12:45 ` [PATCH 3/5] x86/nmi: Misc style fixes Andrew Cooper
2026-08-05 13:52 ` Jan Beulich
2026-08-17 16:19 ` Andrew Cooper
2026-08-05 12:45 ` Andrew Cooper [this message]
2026-08-05 14:02 ` [PATCH 4/5] x86/nmi: Check MSR_MISC_ENABLE for all Intel platforms Jan Beulich
2026-08-05 12:45 ` [PATCH 5/5] x86/nmi: Don't configure EvtSel repeatedly Andrew Cooper
2026-08-05 14:20 ` Jan Beulich
2026-08-05 15:37 ` Andrew Cooper
2026-08-06 6:57 ` Jan Beulich
2026-08-06 9:40 ` Andrew Cooper
2026-08-17 17:23 ` [PATCH 6/5] x86/nmi: Support watchdogs on Intel Fam18/19 CPUs Andrew Cooper
2026-08-18 7:31 ` Jan Beulich
2026-08-05 13:42 ` [PATCH 0/5] x86/nmi: Watchdog fixes/improvement Part 1 Jan Beulich
2026-08-05 17:56 ` Andrew Cooper
2026-08-06 6:44 ` Jan Beulich
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=20260805124525.105457-5-andrew.cooper3@citrix.com \
--to=andrew.cooper3@citrix.com \
--cc=jbeulich@suse.com \
--cc=roger@xenproject.org \
--cc=teddy.astie@vates.tech \
--cc=xen-devel@lists.xenproject.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 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.