Skip to content

Commit

Permalink
EDAC: Add owner check to the x86 platform drivers
Browse files Browse the repository at this point in the history
Change x86 EDAC platform drivers to verify the module owner at the
beginning of their module init functions. This allows them to fail their
init immediately when ghes_edac is enabled. Similar change can be made
to other edac drivers if necessary.

Also, remove ".c" from module names of pnp2_edac, sb_edac, and skx_edac.

Signed-off-by: Toshi Kani <toshi.kani@hpe.com>
Suggested-by: Borislav Petkov <bp@alien8.de>
Cc: Mauro Carvalho Chehab <mchehab@kernel.org>
Cc: Tony Luck <tony.luck@intel.com>
Cc: linux-edac <linux-edac@vger.kernel.org>
Link: http://lkml.kernel.org/r/20170823225447.15608-6-toshi.kani@hpe.com
Signed-off-by: Borislav Petkov <bp@suse.de>
  • Loading branch information
toshikani authored and suryasaimadhu committed Sep 25, 2017
1 parent 3877c7d commit 301375e
Show file tree
Hide file tree
Showing 4 changed files with 28 additions and 4 deletions.
5 changes: 5 additions & 0 deletions drivers/edac/amd64_edac.c
Original file line number Diff line number Diff line change
Expand Up @@ -3434,9 +3434,14 @@ MODULE_DEVICE_TABLE(x86cpu, amd64_cpuids);

static int __init amd64_edac_init(void)
{
const char *owner;
int err = -ENODEV;
int i;

owner = edac_get_owner();
if (owner && strncmp(owner, EDAC_MOD_STR, sizeof(EDAC_MOD_STR)))
return -EBUSY;

if (!x86_match_cpu(amd64_cpuids))
return -ENODEV;

Expand Down
9 changes: 8 additions & 1 deletion drivers/edac/pnd2_edac.c
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,8 @@
#include "edac_module.h"
#include "pnd2_edac.h"

#define EDAC_MOD_STR "pnd2_edac"

#define APL_NUM_CHANNELS 4
#define DNV_NUM_CHANNELS 2
#define DNV_MAX_DIMMS 2 /* Max DIMMs per channel */
Expand Down Expand Up @@ -1355,7 +1357,7 @@ static int pnd2_register_mci(struct mem_ctl_info **ppmci)
pvt = mci->pvt_info;
memset(pvt, 0, sizeof(*pvt));

mci->mod_name = "pnd2_edac.c";
mci->mod_name = EDAC_MOD_STR;
mci->dev_name = ops->name;
mci->ctl_name = "Pondicherry2";

Expand Down Expand Up @@ -1547,10 +1549,15 @@ MODULE_DEVICE_TABLE(x86cpu, pnd2_cpuids);
static int __init pnd2_init(void)
{
const struct x86_cpu_id *id;
const char *owner;
int rc;

edac_dbg(2, "\n");

owner = edac_get_owner();
if (owner && strncmp(owner, EDAC_MOD_STR, sizeof(EDAC_MOD_STR)))
return -EBUSY;

id = x86_match_cpu(pnd2_cpuids);
if (!id)
return -ENODEV;
Expand Down
9 changes: 7 additions & 2 deletions drivers/edac/sb_edac.c
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ static LIST_HEAD(sbridge_edac_list);
* Alter this version for the module when modifications are made
*/
#define SBRIDGE_REVISION " Ver: 1.1.2 "
#define EDAC_MOD_STR "sbridge_edac"
#define EDAC_MOD_STR "sb_edac"

/*
* Debug macros
Expand Down Expand Up @@ -3155,7 +3155,7 @@ static int sbridge_register_mci(struct sbridge_dev *sbridge_dev, enum type type)
MEM_FLAG_DDR4 : MEM_FLAG_DDR3;
mci->edac_ctl_cap = EDAC_FLAG_NONE;
mci->edac_cap = EDAC_FLAG_NONE;
mci->mod_name = "sb_edac.c";
mci->mod_name = EDAC_MOD_STR;
mci->dev_name = pci_name(pdev);
mci->ctl_page_to_phys = NULL;

Expand Down Expand Up @@ -3407,10 +3407,15 @@ static void sbridge_remove(void)
static int __init sbridge_init(void)
{
const struct x86_cpu_id *id;
const char *owner;
int rc;

edac_dbg(2, "\n");

owner = edac_get_owner();
if (owner && strncmp(owner, EDAC_MOD_STR, sizeof(EDAC_MOD_STR)))
return -EBUSY;

id = x86_match_cpu(sbridge_cpuids);
if (!id)
return -ENODEV;
Expand Down
9 changes: 8 additions & 1 deletion drivers/edac/skx_edac.c
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,8 @@

#include "edac_module.h"

#define EDAC_MOD_STR "skx_edac"

/*
* Debug macros
*/
Expand Down Expand Up @@ -473,7 +475,7 @@ static int skx_register_mci(struct skx_imc *imc)
mci->mtype_cap = MEM_FLAG_DDR4;
mci->edac_ctl_cap = EDAC_FLAG_NONE;
mci->edac_cap = EDAC_FLAG_NONE;
mci->mod_name = "skx_edac.c";
mci->mod_name = EDAC_MOD_STR;
mci->dev_name = pci_name(imc->chan[0].cdev);
mci->ctl_page_to_phys = NULL;

Expand Down Expand Up @@ -1044,12 +1046,17 @@ static int __init skx_init(void)
{
const struct x86_cpu_id *id;
const struct munit *m;
const char *owner;
int rc = 0, i;
u8 mc = 0, src_id, node_id;
struct skx_dev *d;

edac_dbg(2, "\n");

owner = edac_get_owner();
if (owner && strncmp(owner, EDAC_MOD_STR, sizeof(EDAC_MOD_STR)))
return -EBUSY;

id = x86_match_cpu(skx_cpuids);
if (!id)
return -ENODEV;
Expand Down

0 comments on commit 301375e

Please sign in to comment.