* [PATCH] platform/x86: don't unconditionally attach Intel PMC when virtualized
@ 2022-11-09 15:16 Roger Pau Monne
2022-11-09 15:24 ` Juergen Gross
2022-11-09 16:15 ` David E. Box
0 siblings, 2 replies; 3+ messages in thread
From: Roger Pau Monne @ 2022-11-09 15:16 UTC (permalink / raw)
To: linux-kernel
Cc: Roger Pau Monne, Rajneesh Bhardwaj, David E Box, Hans de Goede,
Mark Gross, Andy Shevchenko, Srinivas Pandruvada,
platform-driver-x86
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.
Previous to 21ae43570940 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: 21ae43570940 ('platform/x86: intel_pmc_core: Substitute PCI with CPUID enumeration')
Signed-off-by: Roger Pau Monné <roger.pau@citrix.com>
Cc: Rajneesh Bhardwaj <irenic.rajneesh@gmail.com>
Cc: David E Box <david.e.box@intel.com>
Cc: Hans de Goede <hdegoede@redhat.com>
Cc: Mark Gross <markgross@kernel.org>
Cc: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Cc: Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
Cc: platform-driver-x86@vger.kernel.org
---
drivers/platform/x86/intel/pmc/pltdrv.c | 10 ++++++++++
1 file changed, 10 insertions(+)
diff --git a/drivers/platform/x86/intel/pmc/pltdrv.c b/drivers/platform/x86/intel/pmc/pltdrv.c
index 15ca8afdd973..e284fd34ffdf 100644
--- a/drivers/platform/x86/intel/pmc/pltdrv.c
+++ b/drivers/platform/x86/intel/pmc/pltdrv.c
@@ -18,6 +18,8 @@
#include <asm/cpu_device_id.h>
#include <asm/intel-family.h>
+#include <xen/xen.h>
+
static void intel_pmc_core_release(struct device *dev)
{
kfree(dev);
@@ -53,6 +55,14 @@ static int __init pmc_core_platform_init(void)
if (acpi_dev_present("INT33A1", NULL, -1))
return -ENODEV;
+ /*
+ * Skip forcefully attaching the device for VMs. Make an exception for
+ * Xen dom0, which does have full hardware access.
+ */
+ if (boot_cpu_has(X86_FEATURE_HYPERVISOR) &&
+ !xen_initial_domain())
+ return -ENODEV;
+
if (!x86_match_cpu(intel_pmc_core_platform_ids))
return -ENODEV;
--
2.37.3
^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: [PATCH] platform/x86: don't unconditionally attach Intel PMC when virtualized
2022-11-09 15:16 [PATCH] platform/x86: don't unconditionally attach Intel PMC when virtualized Roger Pau Monne
@ 2022-11-09 15:24 ` Juergen Gross
2022-11-09 16:15 ` David E. Box
1 sibling, 0 replies; 3+ messages in thread
From: Juergen Gross @ 2022-11-09 15:24 UTC (permalink / raw)
To: Roger Pau Monne, linux-kernel
Cc: Rajneesh Bhardwaj, David E Box, Hans de Goede, Mark Gross,
Andy Shevchenko, Srinivas Pandruvada, platform-driver-x86
[-- Attachment #1.1.1: Type: text/plain, Size: 2485 bytes --]
On 09.11.22 16:16, Roger Pau Monne wrote:
> 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.
> Previous to 21ae43570940 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: 21ae43570940 ('platform/x86: intel_pmc_core: Substitute PCI with CPUID enumeration')
> Signed-off-by: Roger Pau Monné <roger.pau@citrix.com>
> Cc: Rajneesh Bhardwaj <irenic.rajneesh@gmail.com>
> Cc: David E Box <david.e.box@intel.com>
> Cc: Hans de Goede <hdegoede@redhat.com>
> Cc: Mark Gross <markgross@kernel.org>
> Cc: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
> Cc: Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
> Cc: platform-driver-x86@vger.kernel.org
> ---
> drivers/platform/x86/intel/pmc/pltdrv.c | 10 ++++++++++
> 1 file changed, 10 insertions(+)
>
> diff --git a/drivers/platform/x86/intel/pmc/pltdrv.c b/drivers/platform/x86/intel/pmc/pltdrv.c
> index 15ca8afdd973..e284fd34ffdf 100644
> --- a/drivers/platform/x86/intel/pmc/pltdrv.c
> +++ b/drivers/platform/x86/intel/pmc/pltdrv.c
> @@ -18,6 +18,8 @@
> #include <asm/cpu_device_id.h>
> #include <asm/intel-family.h>
>
> +#include <xen/xen.h>
> +
> static void intel_pmc_core_release(struct device *dev)
> {
> kfree(dev);
> @@ -53,6 +55,14 @@ static int __init pmc_core_platform_init(void)
> if (acpi_dev_present("INT33A1", NULL, -1))
> return -ENODEV;
>
> + /*
> + * Skip forcefully attaching the device for VMs. Make an exception for
> + * Xen dom0, which does have full hardware access.
> + */
> + if (boot_cpu_has(X86_FEATURE_HYPERVISOR) &&
Please use cpu_feature_enabled() instead of boot_cpu_has().
Juergen
[-- Attachment #1.1.2: OpenPGP public key --]
[-- Type: application/pgp-keys, Size: 3149 bytes --]
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 495 bytes --]
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH] platform/x86: don't unconditionally attach Intel PMC when virtualized
2022-11-09 15:16 [PATCH] platform/x86: don't unconditionally attach Intel PMC when virtualized Roger Pau Monne
2022-11-09 15:24 ` Juergen Gross
@ 2022-11-09 16:15 ` David E. Box
1 sibling, 0 replies; 3+ messages in thread
From: David E. Box @ 2022-11-09 16:15 UTC (permalink / raw)
To: Roger Pau Monne, linux-kernel
Cc: Rajneesh Bhardwaj, David E Box, Hans de Goede, Mark Gross,
Andy Shevchenko, Srinivas Pandruvada, platform-driver-x86
On Wed, 2022-11-09 at 16:16 +0100, Roger Pau Monne wrote:
> 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.
> Previous to 21ae43570940 the driver would check for the presence of a
> specific PCI device, and that prevented the driver from attaching when
> running virtualized.
Yeah, that PCI device was short lived. It was available on Skylake/Kabylake but
then removed on future generations. When this happened we changed the driver to
use ACPI binding instead. But there were several generations of ChromeOS/coreboo
t platforms (listed in intel_pmc_core_platform_ids) that did not have the ACPI
device present in their firmware. This file exists specifically to support those
platforms and uses the forced binding because (given that there's actual
silicon) we know the PMC will be there.
>
> 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: 21ae43570940 ('platform/x86: intel_pmc_core: Substitute PCI with CPUID
> enumeration')
> Signed-off-by: Roger Pau Monné <roger.pau@citrix.com>
> Cc: Rajneesh Bhardwaj <irenic.rajneesh@gmail.com>
> Cc: David E Box <david.e.box@intel.com>
> Cc: Hans de Goede <hdegoede@redhat.com>
> Cc: Mark Gross <markgross@kernel.org>
> Cc: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
> Cc: Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
> Cc: platform-driver-x86@vger.kernel.org
> ---
> drivers/platform/x86/intel/pmc/pltdrv.c | 10 ++++++++++
> 1 file changed, 10 insertions(+)
>
> diff --git a/drivers/platform/x86/intel/pmc/pltdrv.c
> b/drivers/platform/x86/intel/pmc/pltdrv.c
> index 15ca8afdd973..e284fd34ffdf 100644
> --- a/drivers/platform/x86/intel/pmc/pltdrv.c
> +++ b/drivers/platform/x86/intel/pmc/pltdrv.c
> @@ -18,6 +18,8 @@
> #include <asm/cpu_device_id.h>
> #include <asm/intel-family.h>
>
> +#include <xen/xen.h>
> +
> static void intel_pmc_core_release(struct device *dev)
> {
> kfree(dev);
> @@ -53,6 +55,14 @@ static int __init pmc_core_platform_init(void)
> if (acpi_dev_present("INT33A1", NULL, -1))
> return -ENODEV;
>
> + /*
> + * Skip forcefully attaching the device for VMs. Make an exception for
> + * Xen dom0, which does have full hardware access.
> + */
> + if (boot_cpu_has(X86_FEATURE_HYPERVISOR) &&
> + !xen_initial_domain())
> + return -ENODEV;
> +
> if (!x86_match_cpu(intel_pmc_core_platform_ids))
> return -ENODEV;
>
Acked-by: David E. Box <david.e.box@linux.intel.com>
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2022-11-09 16:15 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2022-11-09 15:16 [PATCH] platform/x86: don't unconditionally attach Intel PMC when virtualized Roger Pau Monne
2022-11-09 15:24 ` Juergen Gross
2022-11-09 16:15 ` David E. Box
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox