Re: [RFC PATCH 6/8] EDAC, mce_amd: Convert to seq_buf

From: Steven Rostedt
Date: Thu Jul 27 2017 - 21:47:18 EST


On Tue, 25 Jul 2017 17:45:59 +0200
Borislav Petkov <bp@xxxxxxxxx> wrote:

> From: Borislav Petkov <bp@xxxxxxx>
>
> Convert the part which decodes the error description to the sequence
> buffer facility and thus save ourselves the many printk() invocations
> building the decoded string.
>
> No functionality change.
>
> Signed-off-by: Borislav Petkov <bp@xxxxxxx>
> ---
> drivers/edac/mce_amd.c | 203 ++++++++++++++++++++++++++-----------------------
> 1 file changed, 108 insertions(+), 95 deletions(-)
>
> diff --git a/drivers/edac/mce_amd.c b/drivers/edac/mce_amd.c
> index a11a671c7a38..1f5e9bb161f3 100644
> --- a/drivers/edac/mce_amd.c
> +++ b/drivers/edac/mce_amd.c
> @@ -1,3 +1,4 @@
> +#include <linux/seq_buf.h>
> #include <linux/module.h>
> #include <linux/slab.h>
>
> @@ -306,6 +307,11 @@ static struct smca_mce_desc smca_mce_descs[] = {
> [SMCA_SMU] = { smca_smu_mce_desc, ARRAY_SIZE(smca_smu_mce_desc) },
> };
>
> +/* 128 because, well, nice and round - two cachelines. */
> +#define BUF_LEN 128
> +static char __err_buf[BUF_LEN];
> +static struct seq_buf sb;

What happens if two CPUs have mce's at the same time? Wouldn't one
corrupt the other buffer. 128 isn't too big to put on the stack is it?

-- Steve

> +
> static bool f12h_mc0_mce(u16 ec, u8 xec)
> {