Re: [PATCH v4 04/10] platform/x86/intel/ifs: Read IFS firmware image

From: Luck, Tony
Date: Tue Apr 26 2022 - 14:48:00 EST


On Tue, Apr 26, 2022 at 06:36:46PM +0200, Greg KH wrote:
> On Tue, Apr 26, 2022 at 09:12:37AM -0700, Luck, Tony wrote:
> > If it really is too much now, I can rip it out from this submission
> > and add it back when the second test is ready for public view.
>
> Please do, thanks.

Hmmm ... maybe there were more bits than I thought.

1 file changed, 19 insertions(+), 36 deletions(-)

core.c is now down to just 80 lines ... so that was a significant
fraction of the file.

Net change below (I'll thread it back into the patch series before reposting).

Any other comments on the series?

-Tony



diff --git a/drivers/platform/x86/intel/ifs/core.c b/drivers/platform/x86/intel/ifs/core.c
index 317ed3225307..489b77645b5e 100644
--- a/drivers/platform/x86/intel/ifs/core.c
+++ b/drivers/platform/x86/intel/ifs/core.c
@@ -9,10 +9,6 @@

#include "ifs.h"

-enum test_types {
- IFS_SAF,
-};
-
#define X86_MATCH(model) \
X86_MATCH_VENDOR_FAM_MODEL_FEATURE(INTEL, 6, \
INTEL_FAM6_##model, X86_FEATURE_CORE_CAPABILITIES, NULL)
@@ -23,27 +19,21 @@ static const struct x86_cpu_id ifs_cpu_ids[] __initconst = {
};
MODULE_DEVICE_TABLE(x86cpu, ifs_cpu_ids);

-static struct ifs_device ifs_devices[] = {
- [IFS_SAF] = {
- .data = {
- .integrity_cap_bit = MSR_INTEGRITY_CAPS_PERIODIC_BIST_BIT,
- },
- .misc = {
- .name = "intel_ifs_0",
- .nodename = "intel_ifs/0",
- .minor = MISC_DYNAMIC_MINOR,
- },
+static struct ifs_device ifs_device = {
+ .data = {
+ .integrity_cap_bit = MSR_INTEGRITY_CAPS_PERIODIC_BIST_BIT,
+ },
+ .misc = {
+ .name = "intel_ifs_0",
+ .nodename = "intel_ifs/0",
+ .minor = MISC_DYNAMIC_MINOR,
},
};

-#define IFS_NUMTESTS ARRAY_SIZE(ifs_devices)
-
static int __init ifs_init(void)
{
const struct x86_cpu_id *m;
- int ndevices = 0;
u64 msrval;
- int i;

m = x86_match_cpu(ifs_cpu_ids);
if (!m)
@@ -61,32 +51,25 @@ static int __init ifs_init(void)
if (ifs_setup_wq())
return -ENOMEM;

- for (i = 0; i < IFS_NUMTESTS; i++) {
- if (!(msrval & BIT(ifs_devices[i].data.integrity_cap_bit)))
- continue;
-
- ifs_devices[i].misc.groups = ifs_get_groups();
- if (!misc_register(&ifs_devices[i].misc)) {
- ndevices++;
- down(&ifs_sem);
- ifs_load_firmware(ifs_devices[i].misc.this_device);
- up(&ifs_sem);
- }
- }
+ ifs_device.misc.groups = ifs_get_groups();

- if (!ndevices)
+ if ((msrval & BIT(ifs_device.data.integrity_cap_bit)) &&
+ !misc_register(&ifs_device.misc)) {
+ down(&ifs_sem);
+ ifs_load_firmware(ifs_device.misc.this_device);
+ up(&ifs_sem);
+ } else {
ifs_destroy_wq();
+ return -ENODEV;
+ }

- return ndevices ? 0 : -ENODEV;
+ return 0;
}

static void __exit ifs_exit(void)
{
- int i;

- for (i = 0; i < IFS_NUMTESTS; i++)
- if (ifs_devices[i].misc.this_device)
- misc_deregister(&ifs_devices[i].misc);
+ misc_deregister(&ifs_device.misc);
ifs_destroy_wq();
}

--
2.35.1