Skip to content

Commit ebf6a76

Browse files
andyhhpgregkh
authored andcommitted
x86/amd_nb: Use rdmsr_safe() in amd_get_mmconfig_range()
commit 14cb5d8 upstream. 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] Signed-off-by: Greg Kroah-Hartman <[email protected]>
1 parent 105a319 commit ebf6a76

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
@@ -405,21 +405,18 @@ bool __init early_is_amd_nb(u32 device)
405405

406406
struct resource *amd_get_mmconfig_range(struct resource *res)
407407
{
408-
u32 address;
409408
u64 base, msr;
410409
unsigned int segn_busn_bits;
411410

412411
if (boot_cpu_data.x86_vendor != X86_VENDOR_AMD &&
413412
boot_cpu_data.x86_vendor != X86_VENDOR_HYGON)
414413
return NULL;
415414

416-
/* assume all cpus from fam10h have mmconfig */
417-
if (boot_cpu_data.x86 < 0x10)
415+
/* Assume CPUs from Fam10h have mmconfig, although not all VMs do */
416+
if (boot_cpu_data.x86 < 0x10 ||
417+
rdmsrl_safe(MSR_FAM10H_MMIO_CONF_BASE, &msr))
418418
return NULL;
419419

420-
address = MSR_FAM10H_MMIO_CONF_BASE;
421-
rdmsrl(address, msr);
422-
423420
/* mmconfig is not enabled */
424421
if (!(msr & FAM10H_MMIO_CONF_ENABLE))
425422
return NULL;

0 commit comments

Comments
 (0)