Linux EDAC development
 help / color / mirror / Atom feed
* [RFC,7/8] EDAC, mce_amd: Add a simple tracepoint dumping a decoded string
@ 2017-07-28  1:47 Steven Rostedt
  0 siblings, 0 replies; 3+ messages in thread
From: Steven Rostedt @ 2017-07-28  1:47 UTC (permalink / raw)
  To: Borislav Petkov; +Cc: linux-edac, Tony Luck, Yazen Ghannam, X86 ML, LKML

On Tue, 25 Jul 2017 17:46:00 +0200
Borislav Petkov <bp@alien8.de> wrote:

> From: Borislav Petkov <bp@suse.de>
> 
> It is a single string which gets dynamically generated when the error
> gets decoded. Dump it to userspace through that tracepoint so that
> consumers can get the already decoded string and the kernel has the
> decoding functionality too, even if there are no userspace consumers.
> 
> Signed-off-by: Borislav Petkov <bp@suse.de>
> Cc: Steven Rostedt <rostedt@goodmis.org>

Acked-by: Steven Rostedt (VMware) <rostedt@goodmis.org>

-- Steve

> ---
>  drivers/edac/mce_amd.c  |  7 ++++++-
>  drivers/ras/ras.c       |  1 +
>  include/ras/ras_event.h | 16 ++++++++++++++++
>  3 files changed, 23 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/edac/mce_amd.c b/drivers/edac/mce_amd.c
> index 1f5e9bb161f3..ce7e20ca6773 100644
> --- a/drivers/edac/mce_amd.c
> +++ b/drivers/edac/mce_amd.c
> @@ -1,6 +1,8 @@
>  #include <linux/seq_buf.h>
>  #include <linux/module.h>
>  #include <linux/slab.h>
> +#include <linux/ras.h>
> +#include <ras/ras_event.h>
>  
>  #include <asm/cpu.h>
>  
> @@ -1053,7 +1055,10 @@ amd_decode_mce(struct notifier_block *nb, unsigned long val, void *data)
>   err_code:
>  	amd_decode_err_code(m->status & 0xffff);
>  
> -	pr_emerg("%.*s\n", (int)sb.len, sb.buffer);
> +	if (ras_userspace_consumers())
> +		trace_mce_decode(sb.buffer);
> +	else
> +		pr_emerg("%.*s\n", (int)sb.len, sb.buffer);
>  
>  	seq_buf_clear_buf(&sb);
>  
> diff --git a/drivers/ras/ras.c b/drivers/ras/ras.c
> index 5429d3795732..a09e39b3f711 100644
> --- a/drivers/ras/ras.c
> +++ b/drivers/ras/ras.c
> @@ -42,6 +42,7 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(extlog_mem_event);
>  EXPORT_TRACEPOINT_SYMBOL_GPL(mc_event);
>  EXPORT_TRACEPOINT_SYMBOL_GPL(non_standard_event);
>  EXPORT_TRACEPOINT_SYMBOL_GPL(arm_event);
> +EXPORT_TRACEPOINT_SYMBOL_GPL(mce_decode);
>  
>  static int __init parse_ras_param(char *str)
>  {
> diff --git a/include/ras/ras_event.h b/include/ras/ras_event.h
> index 429f46fb61e4..113df73f7ba0 100644
> --- a/include/ras/ras_event.h
> +++ b/include/ras/ras_event.h
> @@ -407,6 +407,22 @@ TRACE_EVENT(memory_failure_event,
>  	)
>  );
>  #endif /* CONFIG_MEMORY_FAILURE */
> +
> +TRACE_EVENT(mce_decode,
> +	TP_PROTO(const char *param_str),
> +
> +	TP_ARGS(param_str),
> +
> +	TP_STRUCT__entry(
> +		__string(str, param_str)
> +	),
> +
> +	TP_fast_assign(
> +		__assign_str(str, param_str);
> +	),
> +
> +	TP_printk("%s", __get_str(str))
> +);
>  #endif /* _TRACE_HW_EVENT_MC_H */
>  
>  /* This part must be outside protection */
---
To unsubscribe from this list: send the line "unsubscribe linux-edac" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply	[flat|nested] 3+ messages in thread
* [RFC,7/8] EDAC, mce_amd: Add a simple tracepoint dumping a decoded string
@ 2017-07-28  7:12 Borislav Petkov
  0 siblings, 0 replies; 3+ messages in thread
From: Borislav Petkov @ 2017-07-28  7:12 UTC (permalink / raw)
  To: Steven Rostedt; +Cc: linux-edac, Tony Luck, Yazen Ghannam, X86 ML, LKML

On Thu, Jul 27, 2017 at 09:47:59PM -0400, Steven Rostedt wrote:
> On Tue, 25 Jul 2017 17:46:00 +0200
> Borislav Petkov <bp@alien8.de> wrote:
> 
> > From: Borislav Petkov <bp@suse.de>
> > 
> > It is a single string which gets dynamically generated when the error
> > gets decoded. Dump it to userspace through that tracepoint so that
> > consumers can get the already decoded string and the kernel has the
> > decoding functionality too, even if there are no userspace consumers.
> > 
> > Signed-off-by: Borislav Petkov <bp@suse.de>
> > Cc: Steven Rostedt <rostedt@goodmis.org>
> 
> Acked-by: Steven Rostedt (VMware) <rostedt@goodmis.org>

Right, see

 https://lkml.kernel.org/r/20170727130909.GB28548@nazgul.tnic

I had the idea while talking to Ingo yesterday.

I should simply extend trace_mce_record() with one more arg. Much cleaner.

Thx.

^ permalink raw reply	[flat|nested] 3+ messages in thread
* [RFC,7/8] EDAC, mce_amd: Add a simple tracepoint dumping a decoded string
@ 2017-07-25 15:46 Borislav Petkov
  0 siblings, 0 replies; 3+ messages in thread
From: Borislav Petkov @ 2017-07-25 15:46 UTC (permalink / raw)
  To: linux-edac; +Cc: Steven Rostedt, Tony Luck, Yazen Ghannam, X86 ML, LKML

From: Borislav Petkov <bp@suse.de>

It is a single string which gets dynamically generated when the error
gets decoded. Dump it to userspace through that tracepoint so that
consumers can get the already decoded string and the kernel has the
decoding functionality too, even if there are no userspace consumers.

Signed-off-by: Borislav Petkov <bp@suse.de>
Cc: Steven Rostedt <rostedt@goodmis.org>
---
 drivers/edac/mce_amd.c  |  7 ++++++-
 drivers/ras/ras.c       |  1 +
 include/ras/ras_event.h | 16 ++++++++++++++++
 3 files changed, 23 insertions(+), 1 deletion(-)

diff --git a/drivers/edac/mce_amd.c b/drivers/edac/mce_amd.c
index 1f5e9bb161f3..ce7e20ca6773 100644
--- a/drivers/edac/mce_amd.c
+++ b/drivers/edac/mce_amd.c
@@ -1,6 +1,8 @@
 #include <linux/seq_buf.h>
 #include <linux/module.h>
 #include <linux/slab.h>
+#include <linux/ras.h>
+#include <ras/ras_event.h>
 
 #include <asm/cpu.h>
 
@@ -1053,7 +1055,10 @@ amd_decode_mce(struct notifier_block *nb, unsigned long val, void *data)
  err_code:
 	amd_decode_err_code(m->status & 0xffff);
 
-	pr_emerg("%.*s\n", (int)sb.len, sb.buffer);
+	if (ras_userspace_consumers())
+		trace_mce_decode(sb.buffer);
+	else
+		pr_emerg("%.*s\n", (int)sb.len, sb.buffer);
 
 	seq_buf_clear_buf(&sb);
 
diff --git a/drivers/ras/ras.c b/drivers/ras/ras.c
index 5429d3795732..a09e39b3f711 100644
--- a/drivers/ras/ras.c
+++ b/drivers/ras/ras.c
@@ -42,6 +42,7 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(extlog_mem_event);
 EXPORT_TRACEPOINT_SYMBOL_GPL(mc_event);
 EXPORT_TRACEPOINT_SYMBOL_GPL(non_standard_event);
 EXPORT_TRACEPOINT_SYMBOL_GPL(arm_event);
+EXPORT_TRACEPOINT_SYMBOL_GPL(mce_decode);
 
 static int __init parse_ras_param(char *str)
 {
diff --git a/include/ras/ras_event.h b/include/ras/ras_event.h
index 429f46fb61e4..113df73f7ba0 100644
--- a/include/ras/ras_event.h
+++ b/include/ras/ras_event.h
@@ -407,6 +407,22 @@ TRACE_EVENT(memory_failure_event,
 	)
 );
 #endif /* CONFIG_MEMORY_FAILURE */
+
+TRACE_EVENT(mce_decode,
+	TP_PROTO(const char *param_str),
+
+	TP_ARGS(param_str),
+
+	TP_STRUCT__entry(
+		__string(str, param_str)
+	),
+
+	TP_fast_assign(
+		__assign_str(str, param_str);
+	),
+
+	TP_printk("%s", __get_str(str))
+);
 #endif /* _TRACE_HW_EVENT_MC_H */
 
 /* This part must be outside protection */

^ permalink raw reply related	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2017-07-28  7:12 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2017-07-28  1:47 [RFC,7/8] EDAC, mce_amd: Add a simple tracepoint dumping a decoded string Steven Rostedt
  -- strict thread matches above, loose matches on Subject: below --
2017-07-28  7:12 Borislav Petkov
2017-07-25 15:46 Borislav Petkov

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox