From: Masami Hiramatsu (Google) <mhiramat@kernel.org>
To: Catalin Marinas <catalin.marinas@arm.com>,
Will Deacon <will@kernel.org>, Mark Brown <broonie@kernel.org>,
Masami Hiramatsu (Google) <mhiramat@kernel.org>
Cc: Steven Rostedt <rostedt@goodmis.org>,
Peter Zijlstra <peterz@infradead.org>,
Ingo Molnar <mingo@kernel.org>,
x86@kernel.org, Jinchao Wang <wangjinchao600@gmail.com>,
Mathieu Desnoyers <mathieu.desnoyers@efficios.com>,
Thomas Gleixner <tglx@linutronix.de>,
Borislav Petkov <bp@alien8.de>,
Dave Hansen <dave.hansen@linux.intel.com>,
"H . Peter Anvin" <hpa@zytor.com>,
Alexander Shishkin <alexander.shishkin@linux.intel.com>,
Ian Rogers <irogers@google.com>,
linux-kernel@vger.kernel.org, linux-trace-kernel@vger.kernel.org,
linux-doc@vger.kernel.org, linux-perf-users@vger.kernel.org,
linux-arm-kernel@lists.infradead.org, Aishwarya.TCV@arm.com
Subject: Re: [PATCH v5 6/8] selftests: tracing: Add a basic testcase for wprobe
Date: Thu, 30 Oct 2025 09:09:52 +0900 [thread overview]
Message-ID: <20251030090952.befea7f0cecd5518c7fda02c@kernel.org> (raw)
In-Reply-To: <20251029172004.a0aca144735f20a6a59d2aa6@kernel.org>
On Wed, 29 Oct 2025 17:20:04 +0900
Masami Hiramatsu (Google) <mhiramat@kernel.org> wrote:
> On Wed, 29 Oct 2025 11:43:17 +0900
> Masami Hiramatsu (Google) <mhiramat@kernel.org> wrote:
>
> > > Hmm, it seems that jiffies related things are updated frequently
> > > and it may cause interrupt storm or infinit recursive call.
> >
> > I added another trace_printk() in el1_watchpt(). It seems el1_watchpt()
> > takes too long and there is no time to do any other things.
> > (Note the interval shown below is only within the el1_watchpt function,
> > and in reality various processes (save/restore registers etc) for
> > exception handling will be inserted before and after.)
>
> Forget about this. I found the root cause. The x86 watchpoint exception
> happens after the instruction is executed, the arm64 happens before.
>
> Thus what we need is to emulate or do single step the hooked instruction
> and restart from the next instruction from the watchpoint exception on
> arm64. I thought hw_breakpoint does that, but doesn't. Should we do this
> in do_watchpoint() or in user_handler?
There is a single step execution code but only for default overflow_handlers.
This is a bit strange becuase other users can not set it up outside of
the arch dependent code. Even if it can, it is simply redundant.
So I made changes below which allow users to set its own custom handler is
compatible with perf default overflow handlers.
I confirmed this works on both arm and arm64.
diff --git a/arch/arm64/kernel/hw_breakpoint.c b/arch/arm64/kernel/hw_breakpoint.c
index ab76b36dce82..e12ec95b471e 100644
--- a/arch/arm64/kernel/hw_breakpoint.c
+++ b/arch/arm64/kernel/hw_breakpoint.c
@@ -632,6 +632,7 @@ void do_breakpoint(unsigned long esr, struct pt_regs *regs)
addr = instruction_pointer(regs);
debug_info = ¤t->thread.debug;
+ trace_printk("breakpoint exception at address: 0x%lx\n", addr);
for (i = 0; i < core_num_brps; ++i) {
rcu_read_lock();
@@ -661,6 +662,7 @@ void do_breakpoint(unsigned long esr, struct pt_regs *regs)
rcu_read_unlock();
}
+ trace_printk("breakpoint handling complete, step=%d\n", step);
if (!step)
return;
diff --git a/include/linux/perf_event.h b/include/linux/perf_event.h
index fd1d91017b99..40dd897e26b0 100644
--- a/include/linux/perf_event.h
+++ b/include/linux/perf_event.h
@@ -902,6 +902,7 @@ struct perf_event {
u64 (*clock)(void);
perf_overflow_handler_t overflow_handler;
void *overflow_handler_context;
+ bool default_overflow_compatible;
struct bpf_prog *prog;
u64 bpf_cookie;
@@ -1505,13 +1506,7 @@ extern int perf_event_output(struct perf_event *event,
static inline bool
is_default_overflow_handler(struct perf_event *event)
{
- perf_overflow_handler_t overflow_handler = event->overflow_handler;
-
- if (likely(overflow_handler == perf_event_output_forward))
- return true;
- if (unlikely(overflow_handler == perf_event_output_backward))
- return true;
- return false;
+ return event->default_overflow_compatible;
}
extern void
diff --git a/kernel/events/core.c b/kernel/events/core.c
index 177e57c1a362..6bbbde82cb21 100644
--- a/kernel/events/core.c
+++ b/kernel/events/core.c
@@ -12946,9 +12946,11 @@ perf_event_alloc(struct perf_event_attr *attr, int cpu,
} else if (is_write_backward(event)){
event->overflow_handler = perf_event_output_backward;
event->overflow_handler_context = NULL;
+ event->default_overflow_compatible = true;
} else {
event->overflow_handler = perf_event_output_forward;
event->overflow_handler_context = NULL;
+ event->default_overflow_compatible = true;
}
perf_event__state_init(event);
diff --git a/kernel/trace/trace_wprobe.c b/kernel/trace/trace_wprobe.c
index 98605b207f43..f2c2f26fd668 100644
--- a/kernel/trace/trace_wprobe.c
+++ b/kernel/trace/trace_wprobe.c
@@ -163,6 +163,8 @@ static void wprobe_perf_handler(struct perf_event *bp,
static int __register_trace_wprobe(struct trace_wprobe *tw)
{
struct perf_event_attr attr;
+ struct perf_event *bp;
+ int cpu;
if (tw->bp_event)
return -EINVAL;
@@ -179,6 +181,11 @@ static int __register_trace_wprobe(struct trace_wprobe *tw)
tw->bp_event = NULL;
return ret;
}
+ /* Mark wprobe_perf_handler is compatible with default one. */
+ for_each_online_cpu(cpu) {
+ bp = per_cpu(*tw->bp_event, cpu);
+ bp->default_overflow_compatible = true;
+ }
return 0;
}
--
Masami Hiramatsu (Google) <mhiramat@kernel.org>
next prev parent reply other threads:[~2025-10-30 0:09 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-09-23 1:16 [PATCH v5 0/8] tracing: wprobe: Add wprobe for watchpoint Masami Hiramatsu (Google)
2025-09-23 1:16 ` [PATCH v5 1/8] tracing: wprobe: Add watchpoint probe event based on hardware breakpoint Masami Hiramatsu (Google)
2025-10-01 0:30 ` Masami Hiramatsu
2025-09-23 1:17 ` [PATCH v5 2/8] x86/hw_breakpoint: Unify breakpoint install/uninstall Masami Hiramatsu (Google)
2025-09-23 1:17 ` [PATCH v5 3/8] x86/hw_breakpoint: Add arch_reinstall_hw_breakpoint Masami Hiramatsu (Google)
2025-09-23 1:17 ` [PATCH v5 4/8] HWBP: Add modify_wide_hw_breakpoint_local() API Masami Hiramatsu (Google)
2025-09-23 1:17 ` [PATCH v5 5/8] tracing: wprobe: Add wprobe event trigger Masami Hiramatsu (Google)
2025-09-23 1:17 ` [PATCH v5 6/8] selftests: tracing: Add a basic testcase for wprobe Masami Hiramatsu (Google)
2025-10-24 21:31 ` Mark Brown
2025-10-27 2:29 ` Masami Hiramatsu
2025-10-27 13:43 ` Masami Hiramatsu
2025-10-27 23:42 ` Masami Hiramatsu
2025-10-28 1:55 ` Masami Hiramatsu
2025-10-28 15:42 ` Masami Hiramatsu
2025-10-29 2:43 ` Masami Hiramatsu
2025-10-29 8:20 ` Masami Hiramatsu
2025-10-30 0:09 ` Masami Hiramatsu [this message]
2025-11-12 12:15 ` Mark Brown
2025-11-12 13:30 ` Masami Hiramatsu
2025-09-23 1:17 ` [PATCH v5 7/8] selftests: tracing: Add syntax " Masami Hiramatsu (Google)
2025-09-23 1:18 ` [PATCH v5 8/8] selftests: ftrace: Add wprobe trigger testcase Masami Hiramatsu (Google)
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20251030090952.befea7f0cecd5518c7fda02c@kernel.org \
--to=mhiramat@kernel.org \
--cc=Aishwarya.TCV@arm.com \
--cc=alexander.shishkin@linux.intel.com \
--cc=bp@alien8.de \
--cc=broonie@kernel.org \
--cc=catalin.marinas@arm.com \
--cc=dave.hansen@linux.intel.com \
--cc=hpa@zytor.com \
--cc=irogers@google.com \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-doc@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-perf-users@vger.kernel.org \
--cc=linux-trace-kernel@vger.kernel.org \
--cc=mathieu.desnoyers@efficios.com \
--cc=mingo@kernel.org \
--cc=peterz@infradead.org \
--cc=rostedt@goodmis.org \
--cc=tglx@linutronix.de \
--cc=wangjinchao600@gmail.com \
--cc=will@kernel.org \
--cc=x86@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).