deleted file mode 100644
@@ -1,12 +0,0 @@
-#ifndef _ASM_TRACE_COMMON_H
-#define _ASM_TRACE_COMMON_H
-
-#ifdef CONFIG_TRACING
-DECLARE_STATIC_KEY_FALSE(trace_pagefault_key);
-#define trace_pagefault_enabled() \
- static_branch_unlikely(&trace_pagefault_key)
-#else
-static inline bool trace_pagefault_enabled(void) { return false; }
-#endif
-
-#endif
@@ -6,10 +6,6 @@
#define _TRACE_PAGE_FAULT_H
#include <linux/tracepoint.h>
-#include <asm/trace/common.h>
-
-extern int trace_pagefault_reg(void);
-extern void trace_pagefault_unreg(void);
DECLARE_EVENT_CLASS(x86_exceptions,
@@ -21,17 +17,20 @@ DECLARE_EVENT_CLASS(x86_exceptions,
TP_STRUCT__entry(
__field( unsigned long, address )
__field( unsigned long, ip )
+ __field( bool , user_mode)
__field( unsigned long, error_code )
),
TP_fast_assign(
__entry->address = address;
__entry->ip = regs->ip;
+ __entry->user_mode = user_mode(regs);
__entry->error_code = error_code;
),
- TP_printk("address=%ps ip=%ps error_code=0x%lx",
+ TP_printk("address=%ps ip=%ps %s error_code=0x%lx",
(void *)__entry->address, (void *)__entry->ip,
+ __entry->user_mode ? "user" : "kernel",
__entry->error_code) );
#define DEFINE_PAGE_FAULT_EVENT(name) \
@@ -39,10 +38,10 @@ 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_pagefault_reg, trace_pagefault_unreg);
+ NULL, NULL)
-DEFINE_PAGE_FAULT_EVENT(page_fault_user);
-DEFINE_PAGE_FAULT_EVENT(page_fault_kernel);
+DEFINE_PAGE_FAULT_EVENT(page_fault_enter);
+DEFINE_PAGE_FAULT_EVENT(page_fault_exit);
#undef TRACE_INCLUDE_PATH
#undef TRACE_INCLUDE_FILE
@@ -6,7 +6,6 @@
#define _TRACE_IRQ_VECTORS_H
#include <linux/tracepoint.h>
-#include <asm/trace/common.h>
#ifdef CONFIG_X86_LOCAL_APIC
@@ -102,7 +102,6 @@ obj-$(CONFIG_FUNCTION_TRACER) += ftrace_$(BITS).o
obj-$(CONFIG_FUNCTION_GRAPH_TRACER) += ftrace.o
obj-$(CONFIG_FTRACE_SYSCALLS) += ftrace.o
obj-$(CONFIG_X86_TSC) += trace_clock.o
-obj-$(CONFIG_TRACING) += trace.o
obj-$(CONFIG_RETHOOK) += rethook.o
obj-$(CONFIG_VMCORE_INFO) += vmcore_info_$(BITS).o
obj-$(CONFIG_KEXEC_CORE) += machine_kexec_$(BITS).o
@@ -139,7 +138,6 @@ obj-$(CONFIG_OF) += devicetree.o
obj-$(CONFIG_UPROBES) += uprobes.o
obj-$(CONFIG_PERF_EVENTS) += perf_regs.o
-obj-$(CONFIG_TRACING) += tracepoint.o
obj-$(CONFIG_SCHED_MC_PRIO) += itmt.o
obj-$(CONFIG_X86_UMIP) += umip.o
deleted file mode 100644
@@ -1,21 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0
-/*
- * Copyright (C) 2013 Seiji Aguchi <seiji.aguchi@hds.com>
- */
-#include <linux/jump_label.h>
-#include <linux/atomic.h>
-
-#include <asm/trace/exceptions.h>
-
-DEFINE_STATIC_KEY_FALSE(trace_pagefault_key);
-
-int trace_pagefault_reg(void)
-{
- static_branch_inc(&trace_pagefault_key);
- return 0;
-}
-
-void trace_pagefault_unreg(void)
-{
- static_branch_dec(&trace_pagefault_key);
-}
@@ -1451,24 +1451,10 @@ void do_user_addr_fault(struct pt_regs *regs,
}
NOKPROBE_SYMBOL(do_user_addr_fault);
-static __always_inline void
-trace_page_fault_entries(struct pt_regs *regs, unsigned long error_code,
- unsigned long address)
-{
- if (!trace_pagefault_enabled())
- return;
-
- if (user_mode(regs))
- trace_page_fault_user(address, regs, error_code);
- else
- trace_page_fault_kernel(address, regs, error_code);
-}
-
static __always_inline void
handle_page_fault(struct pt_regs *regs, unsigned long error_code,
unsigned long address)
{
- trace_page_fault_entries(regs, error_code, address);
if (unlikely(kmmio_fault(regs, address)))
return;
@@ -1535,7 +1521,9 @@ DEFINE_IDTENTRY_RAW_ERRORCODE(exc_page_fault)
state = irqentry_enter(regs);
instrumentation_begin();
+ trace_page_fault_enter(address, regs, error_code);
handle_page_fault(regs, error_code, address);
+ trace_page_fault_exit(address, regs, error_code);
instrumentation_end();
irqentry_exit(regs, state);
Merge page_fault_{user,kernel}, rename it page_fault_enter, and add page_fault_exit. This pair is useful for measuring page fault handling latencies. Add a new field to the merged tracepoints to indicate whether the page fault happened in userspace. We no longer need the static key associated, since it was used just to avoid checking user_mode when the tracepoints were disabled. Signed-off-by: Junxuan Liao <ljx@cs.wisc.edu> Link: https://lore.kernel.org/9e2ac1e3-d07d-4f17-970e-6b7a5248a5bb@cs.wisc.edu --- v1 -> v2: Merge the user and kerenl tracepoints. Remove the static keys. arch/x86/include/asm/trace/common.h | 12 ------------ arch/x86/include/asm/trace/exceptions.h | 15 +++++++-------- arch/x86/include/asm/trace/irq_vectors.h | 1 - arch/x86/kernel/Makefile | 2 -- arch/x86/kernel/tracepoint.c | 21 --------------------- arch/x86/mm/fault.c | 16 ++-------------- 6 files changed, 9 insertions(+), 58 deletions(-) delete mode 100644 arch/x86/include/asm/trace/common.h delete mode 100644 arch/x86/kernel/tracepoint.c