mirror of
https://github.com/torvalds/linux.git
synced 2024-11-22 12:11:40 +00:00
EDAC: Check for GHES preference in the chipset-specific EDAC drivers
Call ghes_get_devices() to check whether ghes_edac should be used on the platform where it is preferred over the corresponding chipset-specific EDAC driver. Unlike the existing edac_get_owner() check, the ghes_get_devices() check works independent to the module_init ordering. [ bp: Massage. ] Suggested-by: Toshi Kani <toshi.kani@hpe.com> Signed-off-by: Jia He <justin.he@arm.com> Signed-off-by: Borislav Petkov <bp@suse.de> Link: https://lore.kernel.org/r/20221010023559.69655-6-justin.he@arm.com
This commit is contained in:
parent
802e7f1dfe
commit
315bada690
@ -4329,6 +4329,9 @@ static int __init amd64_edac_init(void)
|
||||
int err = -ENODEV;
|
||||
int i;
|
||||
|
||||
if (ghes_get_devices())
|
||||
return -EBUSY;
|
||||
|
||||
owner = edac_get_owner();
|
||||
if (owner && strncmp(owner, EDAC_MOD_STR, sizeof(EDAC_MOD_STR)))
|
||||
return -EBUSY;
|
||||
|
@ -599,6 +599,9 @@ static int __init armada_xp_edac_init(void)
|
||||
{
|
||||
int res;
|
||||
|
||||
if (ghes_get_devices())
|
||||
return -EBUSY;
|
||||
|
||||
/* only polling is supported */
|
||||
edac_op_state = EDAC_OPSTATE_POLL;
|
||||
|
||||
|
@ -11,6 +11,7 @@
|
||||
#ifndef __EDAC_MODULE_H__
|
||||
#define __EDAC_MODULE_H__
|
||||
|
||||
#include <acpi/ghes.h>
|
||||
#include "edac_mc.h"
|
||||
#include "edac_pci.h"
|
||||
#include "edac_device.h"
|
||||
|
@ -756,6 +756,9 @@ static int __init i10nm_init(void)
|
||||
|
||||
edac_dbg(2, "\n");
|
||||
|
||||
if (ghes_get_devices())
|
||||
return -EBUSY;
|
||||
|
||||
owner = edac_get_owner();
|
||||
if (owner && strncmp(owner, EDAC_MOD_STR, sizeof(EDAC_MOD_STR)))
|
||||
return -EBUSY;
|
||||
|
@ -1271,6 +1271,9 @@ static int __init igen6_init(void)
|
||||
|
||||
edac_dbg(2, "\n");
|
||||
|
||||
if (ghes_get_devices())
|
||||
return -EBUSY;
|
||||
|
||||
owner = edac_get_owner();
|
||||
if (owner && strncmp(owner, EDAC_MOD_STR, sizeof(EDAC_MOD_STR)))
|
||||
return -ENODEV;
|
||||
|
@ -38,6 +38,9 @@ static int __init fsl_ddr_mc_init(void)
|
||||
{
|
||||
int res;
|
||||
|
||||
if (ghes_get_devices())
|
||||
return -EBUSY;
|
||||
|
||||
/* make sure error reporting method is sane */
|
||||
switch (edac_op_state) {
|
||||
case EDAC_OPSTATE_POLL:
|
||||
|
@ -1528,6 +1528,9 @@ static int __init pnd2_init(void)
|
||||
|
||||
edac_dbg(2, "\n");
|
||||
|
||||
if (ghes_get_devices())
|
||||
return -EBUSY;
|
||||
|
||||
owner = edac_get_owner();
|
||||
if (owner && strncmp(owner, EDAC_MOD_STR, sizeof(EDAC_MOD_STR)))
|
||||
return -EBUSY;
|
||||
|
@ -3634,6 +3634,9 @@ static int __init sbridge_init(void)
|
||||
|
||||
edac_dbg(2, "\n");
|
||||
|
||||
if (ghes_get_devices())
|
||||
return -EBUSY;
|
||||
|
||||
owner = edac_get_owner();
|
||||
if (owner && strncmp(owner, EDAC_MOD_STR, sizeof(EDAC_MOD_STR)))
|
||||
return -EBUSY;
|
||||
|
@ -653,6 +653,9 @@ static int __init skx_init(void)
|
||||
|
||||
edac_dbg(2, "\n");
|
||||
|
||||
if (ghes_get_devices())
|
||||
return -EBUSY;
|
||||
|
||||
owner = edac_get_owner();
|
||||
if (owner && strncmp(owner, EDAC_MOD_STR, sizeof(EDAC_MOD_STR)))
|
||||
return -EBUSY;
|
||||
|
@ -2114,6 +2114,9 @@ static int __init thunderx_edac_init(void)
|
||||
{
|
||||
int rc = 0;
|
||||
|
||||
if (ghes_get_devices())
|
||||
return -EBUSY;
|
||||
|
||||
rc = pci_register_driver(&thunderx_lmc_driver);
|
||||
if (rc)
|
||||
return rc;
|
||||
|
@ -2004,6 +2004,9 @@ static int __init xgene_edac_init(void)
|
||||
{
|
||||
int rc;
|
||||
|
||||
if (ghes_get_devices())
|
||||
return -EBUSY;
|
||||
|
||||
/* Make sure error reporting method is sane */
|
||||
switch (edac_op_state) {
|
||||
case EDAC_OPSTATE_POLL:
|
||||
|
Loading…
Reference in New Issue
Block a user