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