git: 469727f0637b - main - hwpmc: probe the RAPL unit MSR instead of faulting on it

From: Alexander Leidinger <netchild_at_FreeBSD.org>
Date: Sun, 23 Aug 2026 08:11:34 UTC
The branch main has been updated by netchild:

URL: https://cgit.FreeBSD.org/src/commit/?id=469727f0637beec05e0478c1391e3df1e684e53c

commit 469727f0637beec05e0478c1391e3df1e684e53c
Author:     Alexander Leidinger <netchild@FreeBSD.org>
AuthorDate: 2026-08-21 22:29:05 +0000
Commit:     Alexander Leidinger <netchild@FreeBSD.org>
CommitDate: 2026-08-23 08:09:20 +0000

    hwpmc: probe the RAPL unit MSR instead of faulting on it
    
    The RAPL probe read MSR_RAPL_POWER_UNIT with a bare rdmsr().  RAPL is not
    enumerated by CPUID on either vendor and the register is absent on older
    Intel and AMD parts and under a hypervisor that does not emulate it, so
    the read raises #GP and loading hwpmc panics the machine.
    
    Read it with rdmsr_safe() and return ENXIO when it is not there, as this
    function already does for the energy MSRs.  Both callers already drop the
    class when the probe fails.
    
    Fixes:          a99d04f39dab ("hwpmc: add RAPL energy-counter class (AMD + Intel)")
    Assisted-by:    Claude Code (Opus 5)
---
 sys/dev/hwpmc/hwpmc_rapl.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/sys/dev/hwpmc/hwpmc_rapl.c b/sys/dev/hwpmc/hwpmc_rapl.c
index b4a105a86dbb..4ca76bc12403 100644
--- a/sys/dev/hwpmc/hwpmc_rapl.c
+++ b/sys/dev/hwpmc/hwpmc_rapl.c
@@ -532,7 +532,8 @@ pmc_rapl_initialize(struct pmc_mdep *md, int maxcpu, int classindex)
 	}
 
 	/* Decode the energy unit. */
-	unit_val = rdmsr(unit_msr);
+	if (rdmsr_safe(unit_msr, &unit_val) != 0)
+		return (ENXIO);
 	esu = (unit_val >> 8) & 0x1f;
 	dram_unit = rapl_intel_fixed_dram_unit() ? 16 : esu;