189 lines
4.7 KiB
C
189 lines
4.7 KiB
C
#if !defined(_ASM_E2K_TRACE_TLB_FLUSH_H) || defined(TRACE_HEADER_MULTI_READ)
|
|
#define _ASM_E2K_TRACE_TLB_FLUSH_H
|
|
|
|
#include <linux/types.h>
|
|
#include <linux/tracepoint.h>
|
|
|
|
#undef TRACE_SYSTEM
|
|
#define TRACE_SYSTEM tlb
|
|
|
|
TRACE_EVENT(
|
|
mmu_pid_flush_tlb_all,
|
|
|
|
TP_PROTO(int cpu_id),
|
|
|
|
TP_ARGS(cpu_id),
|
|
|
|
TP_STRUCT__entry(
|
|
__field(int, cpu_id)
|
|
),
|
|
|
|
TP_fast_assign(
|
|
__entry->cpu_id = cpu_id;
|
|
),
|
|
|
|
TP_printk("cpu #%d flush TLB all", __entry->cpu_id)
|
|
);
|
|
|
|
TRACE_EVENT(
|
|
mmu_pid_flush_tlb_mm,
|
|
|
|
TP_PROTO(int cpu_id, mm_context_t *context, bool is_active,
|
|
unsigned long old_pid, unsigned long new_pid
|
|
),
|
|
|
|
TP_ARGS(cpu_id, context, is_active, old_pid, new_pid),
|
|
|
|
TP_STRUCT__entry(
|
|
__field(int, cpu_id)
|
|
__field(mm_context_t *, context)
|
|
__field(bool, is_active)
|
|
__field(unsigned long, old_pid)
|
|
__field(unsigned long, new_pid)
|
|
),
|
|
|
|
TP_fast_assign(
|
|
__entry->cpu_id = cpu_id;
|
|
__entry->context = context;
|
|
__entry->is_active = is_active;
|
|
__entry->old_pid = old_pid;
|
|
__entry->new_pid = new_pid;
|
|
),
|
|
|
|
TP_printk("cpu #%d mm flushed pid 0x%lx %s 0x%lx",
|
|
__entry->cpu_id,
|
|
__entry->old_pid, (__entry->is_active) ? "updated to" : "zeroed",
|
|
__entry->new_pid
|
|
)
|
|
);
|
|
|
|
TRACE_EVENT(
|
|
mmu_pid_flush_tlb_address,
|
|
|
|
TP_PROTO(int cpu_id, mm_context_t *context, e2k_addr_t addr,
|
|
unsigned long old_pid, unsigned long new_pid
|
|
),
|
|
|
|
TP_ARGS(cpu_id, context, addr, old_pid, new_pid),
|
|
|
|
TP_STRUCT__entry(
|
|
__field(int, cpu_id)
|
|
__field(mm_context_t *, context)
|
|
__field(e2k_addr_t, addr)
|
|
__field(unsigned long, old_pid)
|
|
__field(unsigned long, new_pid)
|
|
),
|
|
|
|
TP_fast_assign(
|
|
__entry->cpu_id = cpu_id;
|
|
__entry->context = context;
|
|
__entry->addr = addr;
|
|
__entry->old_pid = old_pid;
|
|
__entry->new_pid = new_pid;
|
|
),
|
|
|
|
TP_printk("cpu #%d flushed addr %px and %s 0x%lx",
|
|
__entry->cpu_id, (void *)__entry->addr,
|
|
(__entry->old_pid == 0) ? "created new pid" : "pid former",
|
|
__entry->new_pid
|
|
)
|
|
);
|
|
|
|
TRACE_EVENT(
|
|
mmu_pid_flush_tlb_range,
|
|
|
|
TP_PROTO(int cpu_id, mm_context_t *context,
|
|
e2k_addr_t start, e2k_addr_t end,
|
|
unsigned long old_pid, unsigned long new_pid
|
|
),
|
|
|
|
TP_ARGS(cpu_id, context, start, end, old_pid, new_pid),
|
|
|
|
TP_STRUCT__entry(
|
|
__field(int, cpu_id)
|
|
__field(mm_context_t *, context)
|
|
__field(e2k_addr_t, start)
|
|
__field(e2k_addr_t, end)
|
|
__field(unsigned long, old_pid)
|
|
__field(unsigned long, new_pid)
|
|
),
|
|
|
|
TP_fast_assign(
|
|
__entry->cpu_id = cpu_id;
|
|
__entry->context = context;
|
|
__entry->start = start;
|
|
__entry->end = end;
|
|
__entry->old_pid = old_pid;
|
|
__entry->new_pid = new_pid;
|
|
),
|
|
|
|
TP_printk("cpu #%d flushed %s from %px to %px and %s 0x%lx",
|
|
__entry->cpu_id,
|
|
(__entry->old_pid != __entry->new_pid) ?
|
|
"all mm instead of range " : "only range",
|
|
(void *)__entry->start, (void *)__entry->end,
|
|
(__entry->old_pid != __entry->new_pid) ?
|
|
"created new pid" : "pid former",
|
|
__entry->new_pid
|
|
)
|
|
);
|
|
|
|
TRACE_EVENT(
|
|
va_tlb_state,
|
|
|
|
TP_PROTO(e2k_addr_t address),
|
|
|
|
TP_ARGS(address),
|
|
|
|
TP_STRUCT__entry(
|
|
__field( e2k_addr_t, address )
|
|
__field_struct( tlb_line_state_t, line )
|
|
__field_struct( tlb_line_state_t, huge_line )
|
|
__field( u64, dtlb_entry )
|
|
__field( unsigned long, mmu_pptb )
|
|
__field( unsigned long, mmu_pid )
|
|
),
|
|
|
|
TP_fast_assign(
|
|
__entry->address = address;
|
|
get_va_tlb_state(&__entry->line, address, false);
|
|
get_va_tlb_state(&__entry->huge_line, address, true);
|
|
__entry->dtlb_entry = get_MMU_DTLB_ENTRY(address);
|
|
__entry->mmu_pptb = NATIVE_READ_MMU_U_PPTB_REG();
|
|
__entry->mmu_pid = NATIVE_READ_MMU_PID_REG();
|
|
),
|
|
|
|
TP_printk(" 0x%016lx : dtlb 0x%016llx U_PPTB 0x%lx PID 0x%lx\n"
|
|
" TLB set #0 tag 0x%016lx entry 0x%016lx\n"
|
|
" TLB set #1 tag 0x%016lx entry 0x%016lx\n"
|
|
" TLB set #2 tag 0x%016lx entry 0x%016lx\n"
|
|
" TLB set #3 tag 0x%016lx entry 0x%016lx\n"
|
|
" huge TLB set #2 tag 0x%016lx entry 0x%016lx\n"
|
|
" huge TLB set #3 tag 0x%016lx entry 0x%016lx",
|
|
__entry->address, __entry->dtlb_entry,
|
|
__entry->mmu_pptb, __entry->mmu_pid,
|
|
__entry->line.sets[0].tlb_tag,
|
|
pte_val(__entry->line.sets[0].tlb_entry),
|
|
__entry->line.sets[1].tlb_tag,
|
|
pte_val(__entry->line.sets[1].tlb_entry),
|
|
__entry->line.sets[2].tlb_tag,
|
|
pte_val(__entry->line.sets[2].tlb_entry),
|
|
__entry->line.sets[3].tlb_tag,
|
|
pte_val(__entry->line.sets[3].tlb_entry),
|
|
__entry->huge_line.sets[2].tlb_tag,
|
|
pte_val(__entry->huge_line.sets[2].tlb_entry),
|
|
__entry->huge_line.sets[3].tlb_tag,
|
|
pte_val(__entry->huge_line.sets[3].tlb_entry)
|
|
)
|
|
);
|
|
|
|
#endif /* _ASM_E2K_TRACE_TLB_FLUSH_H */
|
|
|
|
#undef TRACE_INCLUDE_PATH
|
|
#define TRACE_INCLUDE_PATH ../arch/e2k/include/asm
|
|
#undef TRACE_INCLUDE_FILE
|
|
#define TRACE_INCLUDE_FILE trace-tlb-flush
|
|
|
|
/* This part must be outside protection */
|
|
#include <trace/define_trace.h>
|