exceptions.h 1.4 KB

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