Skip to content

Commit 14cb5d8

Browse files
andyhhpIngo Molnar
authored and
Ingo Molnar
committed
x86/amd_nb: Use rdmsr_safe() in amd_get_mmconfig_range()
Xen doesn't offer MSR_FAM10H_MMIO_CONF_BASE to all guests. This results in the following warning: unchecked MSR access error: RDMSR from 0xc0010058 at rIP: 0xffffffff8101d19f (xen_do_read_msr+0x7f/0xa0) Call Trace: xen_read_msr+0x1e/0x30 amd_get_mmconfig_range+0x2b/0x80 quirk_amd_mmconfig_area+0x28/0x100 pnp_fixup_device+0x39/0x50 __pnp_add_device+0xf/0x150 pnp_add_device+0x3d/0x100 pnpacpi_add_device_handler+0x1f9/0x280 acpi_ns_get_device_callback+0x104/0x1c0 acpi_ns_walk_namespace+0x1d0/0x260 acpi_get_devices+0x8a/0xb0 pnpacpi_init+0x50/0x80 do_one_initcall+0x46/0x2e0 kernel_init_freeable+0x1da/0x2f0 kernel_init+0x16/0x1b0 ret_from_fork+0x30/0x50 ret_from_fork_asm+0x1b/0x30 based on quirks for a "PNP0c01" device. Treating MMCFG as disabled is the right course of action, so no change is needed there. This was most likely exposed by fixing the Xen MSR accessors to not be silently-safe. Fixes: 3fac373 ("xen/pv: support selecting safe/unsafe msr accesses") Signed-off-by: Andrew Cooper <[email protected]> Signed-off-by: Ingo Molnar <[email protected]> Link: https://lore.kernel.org/r/[email protected]
1 parent c00b413 commit 14cb5d8

File tree

1 file changed

+3
-6
lines changed

1 file changed

+3
-6
lines changed

arch/x86/kernel/amd_nb.c

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -143,21 +143,18 @@ bool __init early_is_amd_nb(u32 device)
143143

144144
struct resource *amd_get_mmconfig_range(struct resource *res)
145145
{
146-
u32 address;
147146
u64 base, msr;
148147
unsigned int segn_busn_bits;
149148

150149
if (boot_cpu_data.x86_vendor != X86_VENDOR_AMD &&
151150
boot_cpu_data.x86_vendor != X86_VENDOR_HYGON)
152151
return NULL;
153152

154-
/* assume all cpus from fam10h have mmconfig */
155-
if (boot_cpu_data.x86 < 0x10)
153+
/* Assume CPUs from Fam10h have mmconfig, although not all VMs do */
154+
if (boot_cpu_data.x86 < 0x10 ||
155+
rdmsrl_safe(MSR_FAM10H_MMIO_CONF_BASE, &msr))
156156
return NULL;
157157

158-
address = MSR_FAM10H_MMIO_CONF_BASE;
159-
rdmsrl(address, msr);
160-
161158
/* mmconfig is not enabled */
162159
if (!(msr & FAM10H_MMIO_CONF_ENABLE))
163160
return NULL;

0 commit comments

Comments
 (0)