Commit 2dbfb3f3 authored by Roger Pau Monné's avatar Roger Pau Monné Committed by Hans de Goede

platform/x86/intel: pmc: Don't unconditionally attach Intel PMC when virtualized

The current logic in the Intel PMC driver will forcefully attach it
when detecting any CPU on the intel_pmc_core_platform_ids array,
even if the matching ACPI device is not present.

There's no checking in pmc_core_probe() to assert that the PMC device
is present, and hence on virtualized environments the PMC device
probes successfully, even if the underlying registers are not present.
Before commit 21ae4357 ("platform/x86: intel_pmc_core: Substitute PCI
with CPUID enumeration") the driver would check for the presence of a
specific PCI device, and that prevented the driver from attaching when
running virtualized.

Fix by only forcefully attaching the PMC device when not running
virtualized.  Note that virtualized platforms can still get the device
to load if the appropriate ACPI device is present on the tables
provided to the VM.

Make an exception for the Xen initial domain, which does have full
hardware access, and hence can attach to the PMC if present.

Fixes: 21ae4357 ("platform/x86: intel_pmc_core: Substitute PCI with CPUID enumeration")
Signed-off-by: default avatarRoger Pau Monné <roger.pau@citrix.com>
Acked-by: default avatarDavid E. Box <david.e.box@linux.intel.com>
Reviewed-by: default avatarAndy Shevchenko <andriy.shevchenko@linux.intel.com>
Link: https://lore.kernel.org/r/20221110163145.80374-1-roger.pau@citrix.comReviewed-by: default avatarHans de Goede <hdegoede@redhat.com>
Signed-off-by: default avatarHans de Goede <hdegoede@redhat.com>
parent 53e16a6e
...@@ -18,6 +18,8 @@ ...@@ -18,6 +18,8 @@
#include <asm/cpu_device_id.h> #include <asm/cpu_device_id.h>
#include <asm/intel-family.h> #include <asm/intel-family.h>
#include <xen/xen.h>
static void intel_pmc_core_release(struct device *dev) static void intel_pmc_core_release(struct device *dev)
{ {
kfree(dev); kfree(dev);
...@@ -53,6 +55,13 @@ static int __init pmc_core_platform_init(void) ...@@ -53,6 +55,13 @@ static int __init pmc_core_platform_init(void)
if (acpi_dev_present("INT33A1", NULL, -1)) if (acpi_dev_present("INT33A1", NULL, -1))
return -ENODEV; return -ENODEV;
/*
* Skip forcefully attaching the device for VMs. Make an exception for
* Xen dom0, which does have full hardware access.
*/
if (cpu_feature_enabled(X86_FEATURE_HYPERVISOR) && !xen_initial_domain())
return -ENODEV;
if (!x86_match_cpu(intel_pmc_core_platform_ids)) if (!x86_match_cpu(intel_pmc_core_platform_ids))
return -ENODEV; return -ENODEV;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment