1 | /* SPDX-License-Identifier: GPL-2.0 */ |
2 | #undef TRACE_SYSTEM |
3 | #define TRACE_SYSTEM exceptions |
4 | |
5 | #if !defined(_TRACE_PAGE_FAULT_H) || defined(TRACE_HEADER_MULTI_READ) |
6 | #define _TRACE_PAGE_FAULT_H |
7 | |
8 | #include <linux/tracepoint.h> |
9 | #include <asm/trace/common.h> |
10 | |
11 | extern int trace_pagefault_reg(void); |
12 | extern void trace_pagefault_unreg(void); |
13 | |
14 | DECLARE_EVENT_CLASS(x86_exceptions, |
15 | |
16 | TP_PROTO(unsigned long address, struct pt_regs *regs, |
17 | unsigned long error_code), |
18 | |
19 | TP_ARGS(address, regs, error_code), |
20 | |
21 | TP_STRUCT__entry( |
22 | __field( unsigned long, address ) |
23 | __field( unsigned long, ip ) |
24 | __field( unsigned long, error_code ) |
25 | ), |
26 | |
27 | TP_fast_assign( |
28 | __entry->address = address; |
29 | __entry->ip = regs->ip; |
30 | __entry->error_code = error_code; |
31 | ), |
32 | |
33 | TP_printk("address=%ps ip=%ps error_code=0x%lx" , |
34 | (void *)__entry->address, (void *)__entry->ip, |
35 | __entry->error_code) ); |
36 | |
37 | #define DEFINE_PAGE_FAULT_EVENT(name) \ |
38 | DEFINE_EVENT_FN(x86_exceptions, name, \ |
39 | TP_PROTO(unsigned long address, struct pt_regs *regs, \ |
40 | unsigned long error_code), \ |
41 | TP_ARGS(address, regs, error_code), \ |
42 | trace_pagefault_reg, trace_pagefault_unreg); |
43 | |
44 | DEFINE_PAGE_FAULT_EVENT(page_fault_user); |
45 | DEFINE_PAGE_FAULT_EVENT(page_fault_kernel); |
46 | |
47 | #undef TRACE_INCLUDE_PATH |
48 | #undef TRACE_INCLUDE_FILE |
49 | #define TRACE_INCLUDE_PATH . |
50 | #define TRACE_INCLUDE_FILE exceptions |
51 | #endif /* _TRACE_PAGE_FAULT_H */ |
52 | |
53 | /* This part must be outside protection */ |
54 | #include <trace/define_trace.h> |
55 | |