On Fri, Mar 15, 2019 at 7:11 PM Luck, Tony <tony.l...@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