]> www.infradead.org Git - users/dwmw2/linux.git/commitdiff
EDAC/Intel: Do not load EDAC driver when running as a guest
authorLuck, Tony <tony.luck@intel.com>
Tue, 15 Jun 2021 17:44:19 +0000 (10:44 -0700)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 14 Jul 2021 14:53:18 +0000 (16:53 +0200)
[ Upstream commit f0a029fff4a50eb01648810a77ba1873e829fdd4 ]

There's little to no point in loading an EDAC driver running in a guest:
1) The CPU model reported by CPUID may not represent actual h/w
2) The hypervisor likely does not pass in access to memory controller devices
3) Hypervisors generally do not pass corrected error details to guests

Add a check in each of the Intel EDAC drivers for X86_FEATURE_HYPERVISOR
and simply return -ENODEV in the init routine.

Acked-by: Borislav Petkov <bp@suse.de>
Signed-off-by: Tony Luck <tony.luck@intel.com>
Link: https://lore.kernel.org/r/20210615174419.GA1087688@agluck-desk2.amr.corp.intel.com
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/edac/i10nm_base.c
drivers/edac/pnd2_edac.c
drivers/edac/sb_edac.c
drivers/edac/skx_base.c

index dfcde7ed95006ba8bdb66027f8335882301af1b5..f72be5f94e6fab1b170e2777ac4e6ee281df2708 100644 (file)
@@ -249,6 +249,9 @@ static int __init i10nm_init(void)
        if (owner && strncmp(owner, EDAC_MOD_STR, sizeof(EDAC_MOD_STR)))
                return -EBUSY;
 
+       if (cpu_feature_enabled(X86_FEATURE_HYPERVISOR))
+               return -ENODEV;
+
        id = x86_match_cpu(i10nm_cpuids);
        if (!id)
                return -ENODEV;
index dac45e2071b3f67dc09b6d4d25db2f7968d87ab5..e054eb03890371c92912280d0a858ed839143ded 100644 (file)
@@ -1555,6 +1555,9 @@ static int __init pnd2_init(void)
        if (owner && strncmp(owner, EDAC_MOD_STR, sizeof(EDAC_MOD_STR)))
                return -EBUSY;
 
+       if (cpu_feature_enabled(X86_FEATURE_HYPERVISOR))
+               return -ENODEV;
+
        id = x86_match_cpu(pnd2_cpuids);
        if (!id)
                return -ENODEV;
index b557a53c75c46ee46bcd942ace27815e53120f5c..d39f5bfb8bd923d3d537c21cc2a9370e02124ed6 100644 (file)
@@ -3512,6 +3512,9 @@ static int __init sbridge_init(void)
        if (owner && strncmp(owner, EDAC_MOD_STR, sizeof(EDAC_MOD_STR)))
                return -EBUSY;
 
+       if (cpu_feature_enabled(X86_FEATURE_HYPERVISOR))
+               return -ENODEV;
+
        id = x86_match_cpu(sbridge_cpuids);
        if (!id)
                return -ENODEV;
index 77cd370bd62fe080e6b757cd3703285c7cad1a00..b1d717cb8df9f557ced46df51568732c1e3ee8c7 100644 (file)
@@ -605,6 +605,9 @@ static int __init skx_init(void)
        if (owner && strncmp(owner, EDAC_MOD_STR, sizeof(EDAC_MOD_STR)))
                return -EBUSY;
 
+       if (cpu_feature_enabled(X86_FEATURE_HYPERVISOR))
+               return -ENODEV;
+
        id = x86_match_cpu(skx_cpuids);
        if (!id)
                return -ENODEV;