blob: fcec61c52f4c24edcf7cda0f5fb15e129de44e37 [file]
/* SPDX-License-Identifier: GPL-2.0 */
#if !defined(_TRACE_DMC_MONITOR_H) || defined(TRACE_HEADER_MULTI_READ)
#define _TRACE_DMC_MONITOR_H
#include <linux/tracepoint.h>
#undef TRACE_SYSTEM
#define TRACE_SYSTEM dmc_monitor
#include <asm/memory.h>
#include <linux/page-flags.h>
struct page;
char *to_ports(int id);
char *to_sub_ports_name(int mid, int sid, char rw);
unsigned long read_violation_mem(unsigned long addr, char rw);
TRACE_EVENT(dmc_violation,
TP_PROTO(char *title, unsigned long addr, unsigned long status, char *port, char *sub,
char rw, unsigned long pagetrace, unsigned long flags, unsigned long long time),
TP_ARGS(title, addr, status, port, sub, rw, pagetrace, flags, time),
TP_STRUCT__entry(
__string(title, title)
__field(unsigned long, addr)
__field(unsigned long, status)
__string(port, port)
__string(sub, sub)
__field(char, rw)
__field(unsigned long, page_trace)
__field(unsigned long, flags)
__field(unsigned long long, time)
),
TP_fast_assign(
__assign_str(title, title);
__entry->addr = addr;
__entry->status = status;
__assign_str(port, port);
__assign_str(sub, sub);
__entry->rw = rw;
__entry->page_trace = pagetrace;
__entry->flags = flags;
__entry->time = time;
),
TP_printk("addr=%09lx val=%016lx s=%08lx port=%s sub=%s f:%08lx bd:%d sb:%d lru:%d a:%ps t:%lld rw:%c%s",
__entry->addr,
read_violation_mem(__entry->addr, __entry->rw),
__entry->status,
__get_str(port),
__get_str(sub),
__entry->flags,
__entry->flags & PAGE_FLAGS_CHECK_AT_FREE ? 1 : 0,
test_bit(PG_slab, &__entry->flags),
test_bit(PG_lru, &__entry->flags),
(void *)__entry->page_trace,
__entry->time,
__entry->rw,
__get_str(title))
);
#endif /* _TRACE_DMC_MONITOR_H */
#undef TRACE_INCLUDE_PATH
#define TRACE_INCLUDE_PATH ../../drivers/memory_debug/ddr_tool/
#undef TRACE_INCLUDE_FILE
#define TRACE_INCLUDE_FILE dmc_trace
/* This part must be outside protection */
#include <trace/define_trace.h>