mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-11 21:38:32 +08:00
platform/x86/intel/ifs: Add stub driver for In-Field Scan
Cloud Service Providers that operate fleets of servers have reported [1] occasions where they can detect that a CPU has gone bad due to effects like electromigration, or isolated manufacturing defects. However, that detection method is A/B testing seemingly random application failures looking for a pattern. In-Field Scan (IFS) is a driver for a platform capability to load a crafted 'scan image' to run targeted low level diagnostics outside of the CPU's architectural error detection capabilities. Stub version of driver just does initial part of check for the IFS feature. MSR_IA32_CORE_CAPS must enumerate the presence of the MSR_INTEGRITY_CAPS MSR. [1]: https://www.youtube.com/watch?v=QMF3rqhjYuM Reviewed-by: Dan Williams <dan.j.williams@intel.com> Signed-off-by: Tony Luck <tony.luck@intel.com> Acked-by: Hans de Goede <hdegoede@redhat.com> Reviewed-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> Reviewed-by: Thomas Gleixner <tglx@linutronix.de> Link: https://lore.kernel.org/r/20220506225410.1652287-5-tony.luck@intel.com Signed-off-by: Hans de Goede <hdegoede@redhat.com>
This commit is contained in:
parent
2760f5a415
commit
67896ef13c
@ -9859,6 +9859,13 @@ B: https://bugzilla.kernel.org
|
||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/lenb/linux.git
|
||||
F: drivers/idle/intel_idle.c
|
||||
|
||||
INTEL IN FIELD SCAN (IFS) DEVICE
|
||||
M: Jithu Joseph <jithu.joseph@intel.com>
|
||||
R: Ashok Raj <ashok.raj@intel.com>
|
||||
R: Tony Luck <tony.luck@intel.com>
|
||||
S: Maintained
|
||||
F: drivers/platform/x86/intel/ifs
|
||||
|
||||
INTEL INTEGRATED SENSOR HUB DRIVER
|
||||
M: Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
|
||||
M: Jiri Kosina <jikos@kernel.org>
|
||||
|
@ -4,6 +4,7 @@
|
||||
#
|
||||
|
||||
source "drivers/platform/x86/intel/atomisp2/Kconfig"
|
||||
source "drivers/platform/x86/intel/ifs/Kconfig"
|
||||
source "drivers/platform/x86/intel/int1092/Kconfig"
|
||||
source "drivers/platform/x86/intel/int3472/Kconfig"
|
||||
source "drivers/platform/x86/intel/pmc/Kconfig"
|
||||
|
@ -5,6 +5,7 @@
|
||||
#
|
||||
|
||||
obj-$(CONFIG_INTEL_ATOMISP2_PDX86) += atomisp2/
|
||||
obj-$(CONFIG_INTEL_IFS) += ifs/
|
||||
obj-$(CONFIG_INTEL_SAR_INT1092) += int1092/
|
||||
obj-$(CONFIG_INTEL_SKL_INT3472) += int3472/
|
||||
obj-$(CONFIG_INTEL_PMC_CORE) += pmc/
|
||||
|
13
drivers/platform/x86/intel/ifs/Kconfig
Normal file
13
drivers/platform/x86/intel/ifs/Kconfig
Normal file
@ -0,0 +1,13 @@
|
||||
config INTEL_IFS
|
||||
tristate "Intel In Field Scan"
|
||||
depends on X86 && 64BIT && SMP
|
||||
select INTEL_IFS_DEVICE
|
||||
help
|
||||
Enable support for the In Field Scan capability in select
|
||||
CPUs. The capability allows for running low level tests via
|
||||
a scan image distributed by Intel via Github to validate CPU
|
||||
operation beyond baseline RAS capabilities. To compile this
|
||||
support as a module, choose M here. The module will be called
|
||||
intel_ifs.
|
||||
|
||||
If unsure, say N.
|
3
drivers/platform/x86/intel/ifs/Makefile
Normal file
3
drivers/platform/x86/intel/ifs/Makefile
Normal file
@ -0,0 +1,3 @@
|
||||
obj-$(CONFIG_INTEL_IFS) += intel_ifs.o
|
||||
|
||||
intel_ifs-objs := core.o
|
48
drivers/platform/x86/intel/ifs/core.c
Normal file
48
drivers/platform/x86/intel/ifs/core.c
Normal file
@ -0,0 +1,48 @@
|
||||
// SPDX-License-Identifier: GPL-2.0-only
|
||||
/* Copyright(c) 2022 Intel Corporation. */
|
||||
|
||||
#include <linux/module.h>
|
||||
#include <linux/kdev_t.h>
|
||||
|
||||
#include <asm/cpu_device_id.h>
|
||||
|
||||
#define X86_MATCH(model) \
|
||||
X86_MATCH_VENDOR_FAM_MODEL_FEATURE(INTEL, 6, \
|
||||
INTEL_FAM6_##model, X86_FEATURE_CORE_CAPABILITIES, NULL)
|
||||
|
||||
static const struct x86_cpu_id ifs_cpu_ids[] __initconst = {
|
||||
X86_MATCH(SAPPHIRERAPIDS_X),
|
||||
{}
|
||||
};
|
||||
MODULE_DEVICE_TABLE(x86cpu, ifs_cpu_ids);
|
||||
|
||||
static int __init ifs_init(void)
|
||||
{
|
||||
const struct x86_cpu_id *m;
|
||||
u64 msrval;
|
||||
|
||||
m = x86_match_cpu(ifs_cpu_ids);
|
||||
if (!m)
|
||||
return -ENODEV;
|
||||
|
||||
if (rdmsrl_safe(MSR_IA32_CORE_CAPS, &msrval))
|
||||
return -ENODEV;
|
||||
|
||||
if (!(msrval & MSR_IA32_CORE_CAPS_INTEGRITY_CAPS))
|
||||
return -ENODEV;
|
||||
|
||||
if (rdmsrl_safe(MSR_INTEGRITY_CAPS, &msrval))
|
||||
return -ENODEV;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void __exit ifs_exit(void)
|
||||
{
|
||||
}
|
||||
|
||||
module_init(ifs_init);
|
||||
module_exit(ifs_exit);
|
||||
|
||||
MODULE_LICENSE("GPL");
|
||||
MODULE_DESCRIPTION("Intel In Field Scan (IFS) device");
|
Loading…
Reference in New Issue
Block a user