diff options
author | Borislav Petkov <bp@suse.de> | 2015-05-21 13:59:31 -0400 |
---|---|---|
committer | Borislav Petkov <bp@suse.de> | 2015-05-28 09:31:53 -0400 |
commit | b01aec9b2c7d32f17a37553df63efa9f7c0fdaa0 (patch) | |
tree | c824c935c92b9dbbbfd2dc7405aec2e4063eacc9 /drivers/edac | |
parent | 30c7469ba6f5eccf33ac33ec7cb19414f50cf3bf (diff) |
EDAC: Cleanup atomic_scrub mess
So first of all, this atomic_scrub() function's naming is bad. It looks
like an atomic_t helper. Change it to edac_atomic_scrub().
The bigger problem is that this function is arch-specific and every new
arch which doesn't necessarily need that functionality still needs to
define it, otherwise EDAC doesn't compile.
So instead of doing that and including arch-specific headers, have each
arch define an EDAC_ATOMIC_SCRUB symbol which can be used in edac_mc.c
for ifdeffery. Much cleaner.
And we already are doing this with another symbol - EDAC_SUPPORT. This
is also much cleaner than having CONFIG_EDAC enumerate all the arches
which need/have EDAC support and drivers.
This way I can kill the useless edac.h header in tile too.
Acked-by: Ralf Baechle <ralf@linux-mips.org>
Acked-by: Michael Ellerman <mpe@ellerman.id.au>
Acked-by: Chris Metcalf <cmetcalf@ezchip.com>
Acked-by: Ingo Molnar <mingo@kernel.org>
Acked-by: Russell King <rmk+kernel@arm.linux.org.uk>
Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Cc: Doug Thompson <dougthompson@xmission.com>
Cc: linux-arm-kernel@lists.infradead.org
Cc: linux-edac@vger.kernel.org
Cc: linux-kernel@vger.kernel.org
Cc: linux-mips@linux-mips.org
Cc: linuxppc-dev@lists.ozlabs.org
Cc: "Maciej W. Rozycki" <macro@codesourcery.com>
Cc: Markos Chandras <markos.chandras@imgtec.com>
Cc: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
Cc: Paul Mackerras <paulus@samba.org>
Cc: "Steven J. Hill" <Steven.Hill@imgtec.com>
Cc: x86@kernel.org
Signed-off-by: Borislav Petkov <bp@suse.de>
Diffstat (limited to 'drivers/edac')
-rw-r--r-- | drivers/edac/Kconfig | 7 | ||||
-rw-r--r-- | drivers/edac/edac_mc.c | 9 |
2 files changed, 11 insertions, 5 deletions
diff --git a/drivers/edac/Kconfig b/drivers/edac/Kconfig index 2d2530cdf99d..a90e06ac1631 100644 --- a/drivers/edac/Kconfig +++ b/drivers/edac/Kconfig | |||
@@ -2,15 +2,16 @@ | |||
2 | # EDAC Kconfig | 2 | # EDAC Kconfig |
3 | # Copyright (c) 2008 Doug Thompson www.softwarebitmaker.com | 3 | # Copyright (c) 2008 Doug Thompson www.softwarebitmaker.com |
4 | # Licensed and distributed under the GPL | 4 | # Licensed and distributed under the GPL |
5 | # | 5 | |
6 | config EDAC_ATOMIC_SCRUB | ||
7 | bool | ||
6 | 8 | ||
7 | config EDAC_SUPPORT | 9 | config EDAC_SUPPORT |
8 | bool | 10 | bool |
9 | 11 | ||
10 | menuconfig EDAC | 12 | menuconfig EDAC |
11 | bool "EDAC (Error Detection And Correction) reporting" | 13 | bool "EDAC (Error Detection And Correction) reporting" |
12 | depends on HAS_IOMEM | 14 | depends on HAS_IOMEM && EDAC_SUPPORT |
13 | depends on X86 || PPC || TILE || ARM || EDAC_SUPPORT | ||
14 | help | 15 | help |
15 | EDAC is designed to report errors in the core system. | 16 | EDAC is designed to report errors in the core system. |
16 | These are low-level errors that are reported in the CPU or | 17 | These are low-level errors that are reported in the CPU or |
diff --git a/drivers/edac/edac_mc.c b/drivers/edac/edac_mc.c index af3be1914dbb..943ed8cf71b9 100644 --- a/drivers/edac/edac_mc.c +++ b/drivers/edac/edac_mc.c | |||
@@ -30,11 +30,16 @@ | |||
30 | #include <linux/bitops.h> | 30 | #include <linux/bitops.h> |
31 | #include <asm/uaccess.h> | 31 | #include <asm/uaccess.h> |
32 | #include <asm/page.h> | 32 | #include <asm/page.h> |
33 | #include <asm/edac.h> | ||
34 | #include "edac_core.h" | 33 | #include "edac_core.h" |
35 | #include "edac_module.h" | 34 | #include "edac_module.h" |
36 | #include <ras/ras_event.h> | 35 | #include <ras/ras_event.h> |
37 | 36 | ||
37 | #ifdef CONFIG_EDAC_ATOMIC_SCRUB | ||
38 | #include <asm/edac.h> | ||
39 | #else | ||
40 | #define edac_atomic_scrub(va, size) do { } while (0) | ||
41 | #endif | ||
42 | |||
38 | /* lock to memory controller's control array */ | 43 | /* lock to memory controller's control array */ |
39 | static DEFINE_MUTEX(mem_ctls_mutex); | 44 | static DEFINE_MUTEX(mem_ctls_mutex); |
40 | static LIST_HEAD(mc_devices); | 45 | static LIST_HEAD(mc_devices); |
@@ -874,7 +879,7 @@ static void edac_mc_scrub_block(unsigned long page, unsigned long offset, | |||
874 | virt_addr = kmap_atomic(pg); | 879 | virt_addr = kmap_atomic(pg); |
875 | 880 | ||
876 | /* Perform architecture specific atomic scrub operation */ | 881 | /* Perform architecture specific atomic scrub operation */ |
877 | atomic_scrub(virt_addr + offset, size); | 882 | edac_atomic_scrub(virt_addr + offset, size); |
878 | 883 | ||
879 | /* Unmap and complete */ | 884 | /* Unmap and complete */ |
880 | kunmap_atomic(virt_addr); | 885 | kunmap_atomic(virt_addr); |