tracing: Add the ::microcode field to the mce_record tracepoint
authorAvadhut Naik <avadhut.naik@amd.com>
Mon, 1 Apr 2024 17:14:55 +0000 (12:14 -0500)
committerIngo Molnar <mingo@kernel.org>
Wed, 3 Apr 2024 07:39:29 +0000 (09:39 +0200)
Currently, the microcode field (Microcode Revision) of 'struct mce' is not
exposed to userspace through the mce_record tracepoint.

Knowing the microcode version on which the MCE was received is critical
information for debugging. If the version is not recorded, later attempts
to acquire the version might result in discrepancies since it can be
changed at runtime.

Add microcode version to the tracepoint to prevent ambiguity over
the active version on the system when the MCE was received.

Signed-off-by: Avadhut Naik <avadhut.naik@amd.com>
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Reviewed-by: Sohil Mehta <sohil.mehta@intel.com>
Reviewed-by: Steven Rostedt (Google) <rostedt@goodmis.org>
Reviewed-by: Tony Luck <tony.luck@intel.com>
Link: https://lore.kernel.org/r/20240401171455.1737976-3-avadhut.naik@amd.com
include/trace/events/mce.h

index 294fccc329c16a0868dd87e6fb8b7c802f6b2b8e..f0f7b3cb204171e62d5364ad51df17319904acfb 100644 (file)
@@ -42,6 +42,7 @@ TRACE_EVENT(mce_record,
                __field(        u8,             cs              )
                __field(        u8,             bank            )
                __field(        u8,             cpuvendor       )
+               __field(        u32,            microcode       )
        ),
 
        TP_fast_assign(
@@ -63,9 +64,10 @@ TRACE_EVENT(mce_record,
                __entry->cs             = m->cs;
                __entry->bank           = m->bank;
                __entry->cpuvendor      = m->cpuvendor;
+               __entry->microcode      = m->microcode;
        ),
 
-       TP_printk("CPU: %d, MCGc/s: %llx/%llx, MC%d: %016Lx, IPID: %016Lx, ADDR: %016Lx, MISC: %016Lx, SYND: %016Lx, RIP: %02x:<%016Lx>, TSC: %llx, PPIN: %llx, vendor: %u, CPUID: %x, time: %llu, socket: %u, APIC: %x",
+       TP_printk("CPU: %d, MCGc/s: %llx/%llx, MC%d: %016Lx, IPID: %016Lx, ADDR: %016Lx, MISC: %016Lx, SYND: %016Lx, RIP: %02x:<%016Lx>, TSC: %llx, PPIN: %llx, vendor: %u, CPUID: %x, time: %llu, socket: %u, APIC: %x, microcode: %x",
                __entry->cpu,
                __entry->mcgcap, __entry->mcgstatus,
                __entry->bank, __entry->status,
@@ -80,7 +82,8 @@ TRACE_EVENT(mce_record,
                __entry->cpuid,
                __entry->walltime,
                __entry->socketid,
-               __entry->apicid)
+               __entry->apicid,
+               __entry->microcode)
 );
 
 #endif /* _TRACE_MCE_H */