2019-08-26 06:18:15

by Xiaochun Lee

[permalink] [raw]
Subject: [PATCH] x86/mce: show the status of cmci_disabled to user

From: Xiaochun Lee <[email protected]>

When enabled Firmware First mode in UEFI, we need to
set the cmci_disabled and ignore_ce in mca cfg
that users can check correct status from
"/sys/devices/system/machinecheck/machinecheckXXX/cmci_disabled"

Signed-off-by: Xiaochun Lee <[email protected]>
---
arch/x86/kernel/cpu/mce/core.c | 2 ++
1 file changed, 2 insertions(+)

diff --git a/arch/x86/kernel/cpu/mce/core.c b/arch/x86/kernel/cpu/mce/core.c
index 743370e..932c701 100644
--- a/arch/x86/kernel/cpu/mce/core.c
+++ b/arch/x86/kernel/cpu/mce/core.c
@@ -1909,6 +1909,8 @@ static void __mce_disable_bank(void *arg)
int bank = *((int *)arg);
__clear_bit(bank, this_cpu_ptr(mce_poll_banks));
cmci_disable_bank(bank);
+ mca_cfg.cmci_disabled = true;
+ mca_cfg.ignore_ce = true;
}

void mce_disable_bank(int bank)
--
1.8.3.1


2019-08-26 10:35:08

by Borislav Petkov

[permalink] [raw]
Subject: Re: [PATCH] x86/mce: show the status of cmci_disabled to user

On Mon, Aug 26, 2019 at 02:16:04PM +0800, Xiaochun Lee wrote:
> From: Xiaochun Lee <[email protected]>
>
> When enabled Firmware First mode in UEFI, we need to
> set the cmci_disabled and ignore_ce in mca cfg
> that users can check correct status from
> "/sys/devices/system/machinecheck/machinecheckXXX/cmci_disabled"
>
> Signed-off-by: Xiaochun Lee <[email protected]>
> ---
> arch/x86/kernel/cpu/mce/core.c | 2 ++
> 1 file changed, 2 insertions(+)
>
> diff --git a/arch/x86/kernel/cpu/mce/core.c b/arch/x86/kernel/cpu/mce/core.c
> index 743370e..932c701 100644
> --- a/arch/x86/kernel/cpu/mce/core.c
> +++ b/arch/x86/kernel/cpu/mce/core.c
> @@ -1909,6 +1909,8 @@ static void __mce_disable_bank(void *arg)
> int bank = *((int *)arg);
> __clear_bit(bank, this_cpu_ptr(mce_poll_banks));
> cmci_disable_bank(bank);
> + mca_cfg.cmci_disabled = true;
> + mca_cfg.ignore_ce = true;

That's the global switch which gets written here for every bank. But
you want to disable it per bank, not globally because the list of banks
arch_apei_enable_cmcff() receives might not be all banks in the system
which are in FF mode.

Then, writing
/sys/devices/system/machinecheck/machinecheckXXX/cmci_disabled from a
different CPU and for a different bank reenables cmci again so you need
to think of a better way how to address the per-bank thing and then to
make it non-modifiable in FF mode so that it cannot be reenabled from
sysfs again.

Thx.

--
Regards/Gruss,
Boris.

Good mailing practices for 400: avoid top-posting and trim the reply.