^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1) /* SPDX-License-Identifier: GPL-2.0 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2) #undef TRACE_SYSTEM
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3) #define TRACE_SYSTEM ras
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4) #define TRACE_INCLUDE_FILE ras_event
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6) #if !defined(_TRACE_HW_EVENT_MC_H) || defined(TRACE_HEADER_MULTI_READ)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7) #define _TRACE_HW_EVENT_MC_H
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 8)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 9) #include <linux/tracepoint.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10) #include <linux/edac.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11) #include <linux/ktime.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12) #include <linux/pci.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13) #include <linux/aer.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14) #include <linux/cper.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15) #include <linux/mm.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18) * MCE Extended Error Log trace event
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20) * These events are generated when hardware detects a corrected or
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21) * uncorrected event.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24) /* memory trace event */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26) #if defined(CONFIG_ACPI_EXTLOG) || defined(CONFIG_ACPI_EXTLOG_MODULE)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27) TRACE_EVENT(extlog_mem_event,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28) TP_PROTO(struct cper_sec_mem_err *mem,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29) u32 err_seq,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 30) const guid_t *fru_id,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 31) const char *fru_text,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 32) u8 sev),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 33)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 34) TP_ARGS(mem, err_seq, fru_id, fru_text, sev),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 35)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 36) TP_STRUCT__entry(
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 37) __field(u32, err_seq)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 38) __field(u8, etype)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 39) __field(u8, sev)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 40) __field(u64, pa)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 41) __field(u8, pa_mask_lsb)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 42) __field_struct(guid_t, fru_id)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 43) __string(fru_text, fru_text)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 44) __field_struct(struct cper_mem_err_compact, data)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 45) ),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 46)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 47) TP_fast_assign(
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 48) __entry->err_seq = err_seq;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 49) if (mem->validation_bits & CPER_MEM_VALID_ERROR_TYPE)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 50) __entry->etype = mem->error_type;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 51) else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 52) __entry->etype = ~0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 53) __entry->sev = sev;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 54) if (mem->validation_bits & CPER_MEM_VALID_PA)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 55) __entry->pa = mem->physical_addr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 56) else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 57) __entry->pa = ~0ull;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 58)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 59) if (mem->validation_bits & CPER_MEM_VALID_PA_MASK)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 60) __entry->pa_mask_lsb = (u8)__ffs64(mem->physical_addr_mask);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 61) else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 62) __entry->pa_mask_lsb = ~0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 63) __entry->fru_id = *fru_id;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 64) __assign_str(fru_text, fru_text);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 65) cper_mem_err_pack(mem, &__entry->data);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 66) ),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 67)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 68) TP_printk("{%d} %s error: %s physical addr: %016llx (mask lsb: %x) %sFRU: %pUl %.20s",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 69) __entry->err_seq,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 70) cper_severity_str(__entry->sev),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 71) cper_mem_err_type_str(__entry->etype),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 72) __entry->pa,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 73) __entry->pa_mask_lsb,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 74) cper_mem_err_unpack(p, &__entry->data),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 75) &__entry->fru_id,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 76) __get_str(fru_text))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 77) );
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 78) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 79)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 80) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 81) * Hardware Events Report
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 82) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 83) * Those events are generated when hardware detected a corrected or
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 84) * uncorrected event, and are meant to replace the current API to report
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 85) * errors defined on both EDAC and MCE subsystems.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 86) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 87) * FIXME: Add events for handling memory errors originated from the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 88) * MCE subsystem.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 89) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 90)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 91) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 92) * Hardware-independent Memory Controller specific events
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 93) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 94)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 95) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 96) * Default error mechanisms for Memory Controller errors (CE and UE)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 97) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 98) TRACE_EVENT(mc_event,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 99)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 100) TP_PROTO(const unsigned int err_type,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 101) const char *error_msg,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 102) const char *label,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 103) const int error_count,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 104) const u8 mc_index,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 105) const s8 top_layer,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 106) const s8 mid_layer,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 107) const s8 low_layer,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 108) unsigned long address,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 109) const u8 grain_bits,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 110) unsigned long syndrome,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 111) const char *driver_detail),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 112)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 113) TP_ARGS(err_type, error_msg, label, error_count, mc_index,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 114) top_layer, mid_layer, low_layer, address, grain_bits,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 115) syndrome, driver_detail),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 116)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 117) TP_STRUCT__entry(
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 118) __field( unsigned int, error_type )
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 119) __string( msg, error_msg )
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 120) __string( label, label )
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 121) __field( u16, error_count )
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 122) __field( u8, mc_index )
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 123) __field( s8, top_layer )
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 124) __field( s8, middle_layer )
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 125) __field( s8, lower_layer )
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 126) __field( long, address )
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 127) __field( u8, grain_bits )
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 128) __field( long, syndrome )
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 129) __string( driver_detail, driver_detail )
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 130) ),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 131)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 132) TP_fast_assign(
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 133) __entry->error_type = err_type;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 134) __assign_str(msg, error_msg);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 135) __assign_str(label, label);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 136) __entry->error_count = error_count;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 137) __entry->mc_index = mc_index;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 138) __entry->top_layer = top_layer;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 139) __entry->middle_layer = mid_layer;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 140) __entry->lower_layer = low_layer;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 141) __entry->address = address;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 142) __entry->grain_bits = grain_bits;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 143) __entry->syndrome = syndrome;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 144) __assign_str(driver_detail, driver_detail);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 145) ),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 146)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 147) TP_printk("%d %s error%s:%s%s on %s (mc:%d location:%d:%d:%d address:0x%08lx grain:%d syndrome:0x%08lx%s%s)",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 148) __entry->error_count,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 149) mc_event_error_type(__entry->error_type),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 150) __entry->error_count > 1 ? "s" : "",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 151) __get_str(msg)[0] ? " " : "",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 152) __get_str(msg),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 153) __get_str(label),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 154) __entry->mc_index,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 155) __entry->top_layer,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 156) __entry->middle_layer,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 157) __entry->lower_layer,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 158) __entry->address,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 159) 1 << __entry->grain_bits,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 160) __entry->syndrome,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 161) __get_str(driver_detail)[0] ? " " : "",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 162) __get_str(driver_detail))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 163) );
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 164)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 165) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 166) * ARM Processor Events Report
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 167) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 168) * This event is generated when hardware detects an ARM processor error
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 169) * has occurred. UEFI 2.6 spec section N.2.4.4.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 170) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 171) TRACE_EVENT(arm_event,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 172)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 173) TP_PROTO(const struct cper_sec_proc_arm *proc),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 174)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 175) TP_ARGS(proc),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 176)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 177) TP_STRUCT__entry(
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 178) __field(u64, mpidr)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 179) __field(u64, midr)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 180) __field(u32, running_state)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 181) __field(u32, psci_state)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 182) __field(u8, affinity)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 183) ),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 184)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 185) TP_fast_assign(
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 186) if (proc->validation_bits & CPER_ARM_VALID_AFFINITY_LEVEL)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 187) __entry->affinity = proc->affinity_level;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 188) else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 189) __entry->affinity = ~0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 190) if (proc->validation_bits & CPER_ARM_VALID_MPIDR)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 191) __entry->mpidr = proc->mpidr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 192) else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 193) __entry->mpidr = 0ULL;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 194) __entry->midr = proc->midr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 195) if (proc->validation_bits & CPER_ARM_VALID_RUNNING_STATE) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 196) __entry->running_state = proc->running_state;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 197) __entry->psci_state = proc->psci_state;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 198) } else {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 199) __entry->running_state = ~0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 200) __entry->psci_state = ~0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 201) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 202) ),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 203)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 204) TP_printk("affinity level: %d; MPIDR: %016llx; MIDR: %016llx; "
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 205) "running state: %d; PSCI state: %d",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 206) __entry->affinity, __entry->mpidr, __entry->midr,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 207) __entry->running_state, __entry->psci_state)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 208) );
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 209)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 210) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 211) * Non-Standard Section Report
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 212) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 213) * This event is generated when hardware detected a hardware
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 214) * error event, which may be of non-standard section as defined
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 215) * in UEFI spec appendix "Common Platform Error Record", or may
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 216) * be of sections for which TRACE_EVENT is not defined.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 217) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 218) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 219) TRACE_EVENT(non_standard_event,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 220)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 221) TP_PROTO(const guid_t *sec_type,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 222) const guid_t *fru_id,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 223) const char *fru_text,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 224) const u8 sev,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 225) const u8 *err,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 226) const u32 len),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 227)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 228) TP_ARGS(sec_type, fru_id, fru_text, sev, err, len),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 229)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 230) TP_STRUCT__entry(
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 231) __array(char, sec_type, UUID_SIZE)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 232) __array(char, fru_id, UUID_SIZE)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 233) __string(fru_text, fru_text)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 234) __field(u8, sev)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 235) __field(u32, len)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 236) __dynamic_array(u8, buf, len)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 237) ),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 238)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 239) TP_fast_assign(
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 240) memcpy(__entry->sec_type, sec_type, UUID_SIZE);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 241) memcpy(__entry->fru_id, fru_id, UUID_SIZE);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 242) __assign_str(fru_text, fru_text);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 243) __entry->sev = sev;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 244) __entry->len = len;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 245) memcpy(__get_dynamic_array(buf), err, len);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 246) ),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 247)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 248) TP_printk("severity: %d; sec type:%pU; FRU: %pU %s; data len:%d; raw data:%s",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 249) __entry->sev, __entry->sec_type,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 250) __entry->fru_id, __get_str(fru_text),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 251) __entry->len,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 252) __print_hex(__get_dynamic_array(buf), __entry->len))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 253) );
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 254)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 255) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 256) * PCIe AER Trace event
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 257) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 258) * These events are generated when hardware detects a corrected or
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 259) * uncorrected event on a PCIe device. The event report has
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 260) * the following structure:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 261) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 262) * char * dev_name - The name of the slot where the device resides
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 263) * ([domain:]bus:device.function).
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 264) * u32 status - Either the correctable or uncorrectable register
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 265) * indicating what error or errors have been seen
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 266) * u8 severity - error severity 0:NONFATAL 1:FATAL 2:CORRECTED
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 267) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 268)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 269) #define aer_correctable_errors \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 270) {PCI_ERR_COR_RCVR, "Receiver Error"}, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 271) {PCI_ERR_COR_BAD_TLP, "Bad TLP"}, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 272) {PCI_ERR_COR_BAD_DLLP, "Bad DLLP"}, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 273) {PCI_ERR_COR_REP_ROLL, "RELAY_NUM Rollover"}, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 274) {PCI_ERR_COR_REP_TIMER, "Replay Timer Timeout"}, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 275) {PCI_ERR_COR_ADV_NFAT, "Advisory Non-Fatal Error"}, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 276) {PCI_ERR_COR_INTERNAL, "Corrected Internal Error"}, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 277) {PCI_ERR_COR_LOG_OVER, "Header Log Overflow"}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 278)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 279) #define aer_uncorrectable_errors \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 280) {PCI_ERR_UNC_UND, "Undefined"}, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 281) {PCI_ERR_UNC_DLP, "Data Link Protocol Error"}, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 282) {PCI_ERR_UNC_SURPDN, "Surprise Down Error"}, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 283) {PCI_ERR_UNC_POISON_TLP,"Poisoned TLP"}, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 284) {PCI_ERR_UNC_FCP, "Flow Control Protocol Error"}, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 285) {PCI_ERR_UNC_COMP_TIME, "Completion Timeout"}, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 286) {PCI_ERR_UNC_COMP_ABORT,"Completer Abort"}, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 287) {PCI_ERR_UNC_UNX_COMP, "Unexpected Completion"}, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 288) {PCI_ERR_UNC_RX_OVER, "Receiver Overflow"}, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 289) {PCI_ERR_UNC_MALF_TLP, "Malformed TLP"}, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 290) {PCI_ERR_UNC_ECRC, "ECRC Error"}, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 291) {PCI_ERR_UNC_UNSUP, "Unsupported Request Error"}, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 292) {PCI_ERR_UNC_ACSV, "ACS Violation"}, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 293) {PCI_ERR_UNC_INTN, "Uncorrectable Internal Error"},\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 294) {PCI_ERR_UNC_MCBTLP, "MC Blocked TLP"}, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 295) {PCI_ERR_UNC_ATOMEG, "AtomicOp Egress Blocked"}, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 296) {PCI_ERR_UNC_TLPPRE, "TLP Prefix Blocked Error"}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 297)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 298) TRACE_EVENT(aer_event,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 299) TP_PROTO(const char *dev_name,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 300) const u32 status,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 301) const u8 severity,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 302) const u8 tlp_header_valid,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 303) struct aer_header_log_regs *tlp),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 304)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 305) TP_ARGS(dev_name, status, severity, tlp_header_valid, tlp),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 306)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 307) TP_STRUCT__entry(
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 308) __string( dev_name, dev_name )
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 309) __field( u32, status )
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 310) __field( u8, severity )
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 311) __field( u8, tlp_header_valid)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 312) __array( u32, tlp_header, 4 )
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 313) ),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 314)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 315) TP_fast_assign(
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 316) __assign_str(dev_name, dev_name);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 317) __entry->status = status;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 318) __entry->severity = severity;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 319) __entry->tlp_header_valid = tlp_header_valid;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 320) if (tlp_header_valid) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 321) __entry->tlp_header[0] = tlp->dw0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 322) __entry->tlp_header[1] = tlp->dw1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 323) __entry->tlp_header[2] = tlp->dw2;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 324) __entry->tlp_header[3] = tlp->dw3;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 325) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 326) ),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 327)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 328) TP_printk("%s PCIe Bus Error: severity=%s, %s, TLP Header=%s\n",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 329) __get_str(dev_name),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 330) __entry->severity == AER_CORRECTABLE ? "Corrected" :
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 331) __entry->severity == AER_FATAL ?
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 332) "Fatal" : "Uncorrected, non-fatal",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 333) __entry->severity == AER_CORRECTABLE ?
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 334) __print_flags(__entry->status, "|", aer_correctable_errors) :
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 335) __print_flags(__entry->status, "|", aer_uncorrectable_errors),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 336) __entry->tlp_header_valid ?
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 337) __print_array(__entry->tlp_header, 4, 4) :
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 338) "Not available")
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 339) );
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 340)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 341) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 342) * memory-failure recovery action result event
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 343) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 344) * unsigned long pfn - Page Frame Number of the corrupted page
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 345) * int type - Page types of the corrupted page
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 346) * int result - Result of recovery action
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 347) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 348)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 349) #ifdef CONFIG_MEMORY_FAILURE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 350) #define MF_ACTION_RESULT \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 351) EM ( MF_IGNORED, "Ignored" ) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 352) EM ( MF_FAILED, "Failed" ) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 353) EM ( MF_DELAYED, "Delayed" ) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 354) EMe ( MF_RECOVERED, "Recovered" )
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 355)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 356) #define MF_PAGE_TYPE \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 357) EM ( MF_MSG_KERNEL, "reserved kernel page" ) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 358) EM ( MF_MSG_KERNEL_HIGH_ORDER, "high-order kernel page" ) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 359) EM ( MF_MSG_SLAB, "kernel slab page" ) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 360) EM ( MF_MSG_DIFFERENT_COMPOUND, "different compound page after locking" ) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 361) EM ( MF_MSG_POISONED_HUGE, "huge page already hardware poisoned" ) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 362) EM ( MF_MSG_HUGE, "huge page" ) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 363) EM ( MF_MSG_FREE_HUGE, "free huge page" ) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 364) EM ( MF_MSG_NON_PMD_HUGE, "non-pmd-sized huge page" ) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 365) EM ( MF_MSG_UNMAP_FAILED, "unmapping failed page" ) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 366) EM ( MF_MSG_DIRTY_SWAPCACHE, "dirty swapcache page" ) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 367) EM ( MF_MSG_CLEAN_SWAPCACHE, "clean swapcache page" ) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 368) EM ( MF_MSG_DIRTY_MLOCKED_LRU, "dirty mlocked LRU page" ) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 369) EM ( MF_MSG_CLEAN_MLOCKED_LRU, "clean mlocked LRU page" ) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 370) EM ( MF_MSG_DIRTY_UNEVICTABLE_LRU, "dirty unevictable LRU page" ) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 371) EM ( MF_MSG_CLEAN_UNEVICTABLE_LRU, "clean unevictable LRU page" ) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 372) EM ( MF_MSG_DIRTY_LRU, "dirty LRU page" ) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 373) EM ( MF_MSG_CLEAN_LRU, "clean LRU page" ) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 374) EM ( MF_MSG_TRUNCATED_LRU, "already truncated LRU page" ) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 375) EM ( MF_MSG_BUDDY, "free buddy page" ) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 376) EM ( MF_MSG_BUDDY_2ND, "free buddy page (2nd try)" ) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 377) EM ( MF_MSG_DAX, "dax page" ) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 378) EM ( MF_MSG_UNSPLIT_THP, "unsplit thp" ) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 379) EMe ( MF_MSG_UNKNOWN, "unknown page" )
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 380)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 381) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 382) * First define the enums in MM_ACTION_RESULT to be exported to userspace
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 383) * via TRACE_DEFINE_ENUM().
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 384) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 385) #undef EM
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 386) #undef EMe
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 387) #define EM(a, b) TRACE_DEFINE_ENUM(a);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 388) #define EMe(a, b) TRACE_DEFINE_ENUM(a);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 389)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 390) MF_ACTION_RESULT
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 391) MF_PAGE_TYPE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 392)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 393) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 394) * Now redefine the EM() and EMe() macros to map the enums to the strings
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 395) * that will be printed in the output.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 396) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 397) #undef EM
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 398) #undef EMe
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 399) #define EM(a, b) { a, b },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 400) #define EMe(a, b) { a, b }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 401)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 402) TRACE_EVENT(memory_failure_event,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 403) TP_PROTO(unsigned long pfn,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 404) int type,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 405) int result),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 406)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 407) TP_ARGS(pfn, type, result),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 408)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 409) TP_STRUCT__entry(
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 410) __field(unsigned long, pfn)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 411) __field(int, type)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 412) __field(int, result)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 413) ),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 414)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 415) TP_fast_assign(
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 416) __entry->pfn = pfn;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 417) __entry->type = type;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 418) __entry->result = result;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 419) ),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 420)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 421) TP_printk("pfn %#lx: recovery action for %s: %s",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 422) __entry->pfn,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 423) __print_symbolic(__entry->type, MF_PAGE_TYPE),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 424) __print_symbolic(__entry->result, MF_ACTION_RESULT)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 425) )
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 426) );
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 427) #endif /* CONFIG_MEMORY_FAILURE */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 428) #endif /* _TRACE_HW_EVENT_MC_H */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 429)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 430) /* This part must be outside protection */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 431) #include <trace/define_trace.h>