Re: [PATCH 1/7] apei, mce: Call MCE-specific code only for X86 architecture.

From: Tomasz Nowicki
Date: Mon May 05 2014 - 10:34:31 EST


On 05.05.2014 13:44, Borislav Petkov wrote:
On Wed, Apr 09, 2014 at 05:14:29PM +0200, Tomasz Nowicki wrote:
This commit is dealing with MCE code in:
- hest.c
Move acpi_disable_cmcff flag to hest_parse_cmc() and makes
that depend on CONFIG_X86_MCE so that we do not have to maintain
acpi_disable_cmcff for architectures which do not support MCE.
Also, wrap architectural MCE header inside #ifdef CONFIG_X86_MCE.

- ghes.c
Wrap architectural MCE header inside #ifdef CONFIG_X86_MCE similar to rest
of the MCE code in this file.

Signed-off-by: Tomasz Nowicki <tomasz.nowicki@xxxxxxxxxx>
---
drivers/acpi/apei/ghes.c | 2 ++
drivers/acpi/apei/hest.c | 8 ++++++--
2 files changed, 8 insertions(+), 2 deletions(-)

diff --git a/drivers/acpi/apei/ghes.c b/drivers/acpi/apei/ghes.c
index dab7cb7..f7edffc 100644
--- a/drivers/acpi/apei/ghes.c
+++ b/drivers/acpi/apei/ghes.c
@@ -49,7 +49,9 @@
#include <linux/aer.h>

#include <acpi/ghes.h>
+#ifdef CONFIG_X86_MCE
#include <asm/mce.h>
+#endif
#include <asm/tlbflush.h>
#include <asm/nmi.h>

diff --git a/drivers/acpi/apei/hest.c b/drivers/acpi/apei/hest.c
index f5e37f3..98db702 100644
--- a/drivers/acpi/apei/hest.c
+++ b/drivers/acpi/apei/hest.c
@@ -36,7 +36,9 @@
#include <linux/io.h>
#include <linux/platform_device.h>
#include <acpi/apei.h>
+#ifdef CONFIG_X86_MCE
#include <asm/mce.h>
+#endif

Actually, I would prefer if you wrapped all the arch-specific calls into
arch-specific functions, say, convert

apei_mce_report_mem_error -> apei_arch_report_mem_error

and have default empty functions for arches which don't use that
functionality.

This way you can save yourself the ugly ifdeffery around the place.

True, this can be improved as you suggested.


#include "apei-internal.h"

@@ -133,6 +135,9 @@ static int __init hest_parse_cmc(struct acpi_hest_header *hest_hdr, void *data)
struct acpi_hest_ia_corrected *cmc;
struct acpi_hest_ia_error_bank *mc_bank;

+ if (acpi_disable_cmcff)
+ return 1;

This could be

if (arch_disable_cmcff())
return 1;

with the default stub being

static inline bool arch_disable_cmcff(void)
{
return false;
}

and so on, like it is done in many other places in the kernel.

acpi_disable_cmcff as global value can switch off/on MC entries analysing via kernel args. This glob value resides in x86 ACPI code and has meaning only for MCE related mechanism, that is why I have moved it under hest_parse_cmc.

Thanks.

Tomasz
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/