diff mbox

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

Message ID 1397056476-9183-2-git-send-email-tomasz.nowicki@linaro.org (mailing list archive)
State Not Applicable, archived
Headers show

Commit Message

Tomasz Nowicki April 9, 2014, 3:14 p.m. UTC
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@linaro.org>
---
 drivers/acpi/apei/ghes.c |    2 ++
 drivers/acpi/apei/hest.c |    8 ++++++--
 2 files changed, 8 insertions(+), 2 deletions(-)

Comments

Borislav Petkov May 5, 2014, 11:44 a.m. UTC | #1
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@linaro.org>
> ---
>  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.

>  
>  #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.

Thanks.
Tomasz Nowicki May 5, 2014, 2:34 p.m. UTC | #2
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@linaro.org>
>> ---
>>   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-acpi" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Borislav Petkov May 5, 2014, 2:53 p.m. UTC | #3
On Mon, May 05, 2014 at 04:34:41PM +0200, Tomasz Nowicki wrote:
> acpi_disable_cmcff as global value can switch off/on MC entries
> analysing via kernel args.

No, it switches off firmware first mode for correctable errors because
of buggy BIOSes - 9ad95879cd1b2 (what else...)

> This glob value resides in x86 ACPI code and has meaning only for MCE
> related mechanism,

Of course it doesn't!

> that is why I have moved it under hest_parse_cmc.

See APEI section in the ACPI spec "18.4 Firmware First Error Handling."

Regardless of what your version of APEI does, you actually shouldn't
need to touch acpi_disable_cmcff at all as it not arch-specific.
Tomasz Nowicki May 5, 2014, 3:32 p.m. UTC | #4
On 05.05.2014 16:53, Borislav Petkov wrote:
> On Mon, May 05, 2014 at 04:34:41PM +0200, Tomasz Nowicki wrote:
>> acpi_disable_cmcff as global value can switch off/on MC entries
>> analysing via kernel args.
>
> No, it switches off firmware first mode for correctable errors because
> of buggy BIOSes - 9ad95879cd1b2 (what else...)
>
>> This glob value resides in x86 ACPI code and has meaning only for MCE
>> related mechanism,
>
> Of course it doesn't!
>
>> that is why I have moved it under hest_parse_cmc.
>
> See APEI section in the ACPI spec "18.4 Firmware First Error Handling."
>
> Regardless of what your version of APEI does, you actually shouldn't
> need to touch acpi_disable_cmcff at all as it not arch-specific.
>

You are right! I will fix that big misunderstanding from my side in next 
patch version.

Thanks,
Tomasz
--
To unsubscribe from this list: send the line "unsubscribe linux-acpi" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Borislav Petkov May 5, 2014, 3:33 p.m. UTC | #5
On Mon, May 05, 2014 at 05:32:07PM +0200, Tomasz Nowicki wrote:
> You are right! I will fix that big misunderstanding from my side in
> next patch version.

Ok, but pls wait with resubmitting until I take a look at the rest of
your patches.

Thanks.
Tomasz Nowicki May 5, 2014, 3:36 p.m. UTC | #6
On 05.05.2014 17:33, Borislav Petkov wrote:
> On Mon, May 05, 2014 at 05:32:07PM +0200, Tomasz Nowicki wrote:
>> You are right! I will fix that big misunderstanding from my side in
>> next patch version.
>
> Ok, but pls wait with resubmitting until I take a look at the rest of
> your patches.

Sure, I will.
--
To unsubscribe from this list: send the line "unsubscribe linux-acpi" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

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
 
 #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;
+
 	if (hest_hdr->type != ACPI_HEST_TYPE_IA32_CORRECTED_CHECK)
 		return 0;
 
@@ -263,8 +268,7 @@  void __init acpi_hest_init(void)
 		goto err;
 	}
 
-	if (!acpi_disable_cmcff)
-		apei_hest_parse(hest_parse_cmc, NULL);
+	apei_hest_parse(hest_parse_cmc, NULL);
 
 	if (!ghes_disable) {
 		rc = apei_hest_parse(hest_parse_ghes_count, &ghes_count);