-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
x86, trace: Add page fault tracepoints
This patch introduces page fault tracepoints to x86 architecture by switching IDT. Two events, for user and kernel spaces, are introduced at the beginning of page fault handler for tracing. - User space event There is a request of page fault event for user space as below. https://lkml.kernel.org/r/1368079520-11015-2-git-send-email-fdeslaur+()+gmail+!+com https://lkml.kernel.org/r/1368079520-11015-1-git-send-email-fdeslaur+()+gmail+!+com - Kernel space event: When we measure an overhead in kernel space for investigating performance issues, we can check if it comes from the page fault events. Signed-off-by: Seiji Aguchi <seiji.aguchi@hds.com> Link: http://lkml.kernel.org/r/52716E67.6090705@hds.com Signed-off-by: H. Peter Anvin <hpa@linux.intel.com>
- Loading branch information
Seiji Aguchi
authored and
H. Peter Anvin
committed
Nov 8, 2013
1 parent
ac7956e
commit d34603b
Showing
3 changed files
with
67 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,52 @@ | ||
#undef TRACE_SYSTEM | ||
#define TRACE_SYSTEM exceptions | ||
|
||
#if !defined(_TRACE_PAGE_FAULT_H) || defined(TRACE_HEADER_MULTI_READ) | ||
#define _TRACE_PAGE_FAULT_H | ||
|
||
#include <linux/tracepoint.h> | ||
|
||
extern void trace_irq_vector_regfunc(void); | ||
extern void trace_irq_vector_unregfunc(void); | ||
|
||
DECLARE_EVENT_CLASS(x86_exceptions, | ||
|
||
TP_PROTO(unsigned long address, struct pt_regs *regs, | ||
unsigned long error_code), | ||
|
||
TP_ARGS(address, regs, error_code), | ||
|
||
TP_STRUCT__entry( | ||
__field( unsigned long, address ) | ||
__field( unsigned long, ip ) | ||
__field( unsigned long, error_code ) | ||
), | ||
|
||
TP_fast_assign( | ||
__entry->address = address; | ||
__entry->ip = regs->ip; | ||
__entry->error_code = error_code; | ||
), | ||
|
||
TP_printk("address=%pf ip=%pf error_code=0x%lx", | ||
(void *)__entry->address, (void *)__entry->ip, | ||
__entry->error_code) ); | ||
|
||
#define DEFINE_PAGE_FAULT_EVENT(name) \ | ||
DEFINE_EVENT_FN(x86_exceptions, name, \ | ||
TP_PROTO(unsigned long address, struct pt_regs *regs, \ | ||
unsigned long error_code), \ | ||
TP_ARGS(address, regs, error_code), \ | ||
trace_irq_vector_regfunc, \ | ||
trace_irq_vector_unregfunc); | ||
|
||
DEFINE_PAGE_FAULT_EVENT(user_page_fault); | ||
DEFINE_PAGE_FAULT_EVENT(kernel_page_fault); | ||
|
||
#undef TRACE_INCLUDE_PATH | ||
#define TRACE_INCLUDE_PATH . | ||
#define TRACE_INCLUDE_FILE exceptions | ||
#endif /* _TRACE_PAGE_FAULT_H */ | ||
|
||
/* This part must be outside protection */ | ||
#include <trace/define_trace.h> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters