Re: [PATCH] EDAC, {skx|i10nm}_edac: Fix randconfig build error

Arnd Bergmann
2019-03-15T21:04:03Z

On Fri, Mar 15, 2019 at 7:11 PM Luck, Tony <tony.luck@intel.com> wrote:
>
> On Fri, Mar 15, 2019 at 07:02:06PM +0100, Borislav Petkov wrote:
> > On Fri, Mar 15, 2019 at 10:49:56AM -0700, Luck, Tony wrote:
> > > Yes - Qiuxu did that already ... patch reposted below.
> >
> > ... to which Arnd said that it were fragile because it might break if it
> > includes a THIS_MODULE reference. So I'd say we won't do that then. And
> > keep it strictly a library.
> >
> > Right?
>
> What is your definition of "library"?
>
> fsl_ddr_edac.c seems to have the same potential for breakage
> if someone makes a change to that, then it will hit the same
> problem.

I think they are a bit safer because CONFIG_EDAC_LAYERSCAPE and
CONFIG_EDAC_MPC85XX are mutually exclusive (one is only
on powerpc, the other is only on ARM). It would break though if
one were to make them build with CONFIG_COMPILE_TEST,
or if another driver gets added that for ARM.

I just thought about a possible Kconfig solution some more, and
had this idea:

diff --git a/drivers/edac/Kconfig b/drivers/edac/Kconfig
index 47eb4d13ed5f..70080926329f 100644
--- a/drivers/edac/Kconfig
+++ b/drivers/edac/Kconfig
@@ -235,6 +235,7 @@ config EDAC_SKX
depends on ACPI_NFIT || !ACPI_NFIT # if ACPI_NFIT=m, EDAC_SKX can't be y
select DMI
select ACPI_ADXL
+ select EDAC_SKX_COMMON
help
Support for error detection and correction the Intel
Skylake server Integrated Memory Controllers. If your
@@ -247,12 +248,20 @@ config EDAC_I10NM
depends on ACPI_NFIT || !ACPI_NFIT # if ACPI_NFIT=m,
EDAC_I10NM can't be y
select DMI
select ACPI_ADXL
+ select EDAC_SKX_COMMON
help
Support for error detection and correction the Intel
10nm server Integrated Memory Controllers. If your
system has non-volatile DIMMs you should also manually
select CONFIG_ACPI_NFIT.

+config EDAC_SKX_COMMON
+ tristate
+ help
+ This is an internal helper symbol to ensure that all variants
+ of the EDAC_SKX driver are either built-in or modular, as mixing
+ the two causes link time problems.
+
config EDAC_PND2
tristate "Intel Pondicherry2"
depends on PCI && X86_64 && X86_MCE_INTEL
diff --git a/drivers/edac/Makefile b/drivers/edac/Makefile
index 89ad4a84a0f6..01134051f5bf 100644
--- a/drivers/edac/Makefile
+++ b/drivers/edac/Makefile
@@ -58,10 +58,14 @@ layerscape_edac_mod-y :=
fsl_ddr_edac.o layerscape_edac.o
obj-$(CONFIG_EDAC_LAYERSCAPE) += layerscape_edac_mod.o

skx_edac-y := skx_common.o skx_base.o
-obj-$(CONFIG_EDAC_SKX) += skx_edac.o
+ifdef CONFIG_EDAC_SKX
+obj-$(CONFIG_EDAC_SKX_COMMON) += skx_edac.o
+endif

i10nm_edac-y := skx_common.o i10nm_base.o
+ifdef CONFIG_EDAC_I10NM
obj-$(CONFIG_EDAC_SKX_COMMON) += i10nm_edac.o
+endif

obj-$(CONFIG_EDAC_MV64X60) += mv64x60_edac.o
obj-$(CONFIG_EDAC_CELL) += cell_edac.o

Basically I cheat Kconfig, so if one driver is built-in and
the other is a loadable module, we compile both as built-in.

Arnd