Message ID | 20241003151638.1608537-7-mathieu.desnoyers@efficios.com (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
Series | tracing: Allow system call tracepoints to handle page faults | expand |
On Thu, 3 Oct 2024 11:16:36 -0400 Mathieu Desnoyers <mathieu.desnoyers@efficios.com> wrote: > diff --git a/include/trace/trace_events.h b/include/trace/trace_events.h > index 0228d9ed94a3..e0d4850b0d77 100644 > --- a/include/trace/trace_events.h > +++ b/include/trace/trace_events.h > @@ -446,6 +446,7 @@ __DECLARE_EVENT_CLASS(call, PARAMS(proto), PARAMS(args), PARAMS(tstruct), \ > static notrace void \ > trace_event_raw_event_##call(void *__data, proto) \ > { \ > + might_fault(); \ I don't think we want "might_fault()" here, as this is called for every tracepoint that is created by the TRACE_EVENT() macro. That means, there's going to be plenty of locations this gets called at that do not allow faults. -- Steve > guard(preempt_notrace)(); \ > do_trace_event_raw_event_##call(__data, args); \ > }
On 2024-10-04 00:36, Steven Rostedt wrote: > On Thu, 3 Oct 2024 11:16:36 -0400 > Mathieu Desnoyers <mathieu.desnoyers@efficios.com> wrote: > >> diff --git a/include/trace/trace_events.h b/include/trace/trace_events.h >> index 0228d9ed94a3..e0d4850b0d77 100644 >> --- a/include/trace/trace_events.h >> +++ b/include/trace/trace_events.h >> @@ -446,6 +446,7 @@ __DECLARE_EVENT_CLASS(call, PARAMS(proto), PARAMS(args), PARAMS(tstruct), \ >> static notrace void \ >> trace_event_raw_event_##call(void *__data, proto) \ >> { \ >> + might_fault(); \ > > I don't think we want "might_fault()" here, as this is called for every > tracepoint that is created by the TRACE_EVENT() macro. That means, there's > going to be plenty of locations this gets called at that do not allow faults. Here is the full context where this line applies: #undef DECLARE_EVENT_SYSCALL_CLASS #define DECLARE_EVENT_SYSCALL_CLASS(call, proto, args, tstruct, assign, print) \ __DECLARE_EVENT_CLASS(call, PARAMS(proto), PARAMS(args), PARAMS(tstruct), \ PARAMS(assign), PARAMS(print)) \ static notrace void \ trace_event_raw_event_##call(void *__data, proto) \ { \ might_fault(); \ guard(preempt_notrace)(); \ do_trace_event_raw_event_##call(__data, args); \ } Not an issue, since it's only for syscall tracepoints. Thanks, Mathieu > > -- Steve > > >> guard(preempt_notrace)(); \ >> do_trace_event_raw_event_##call(__data, args); \ >> }
diff --git a/include/trace/trace_events.h b/include/trace/trace_events.h index 0228d9ed94a3..e0d4850b0d77 100644 --- a/include/trace/trace_events.h +++ b/include/trace/trace_events.h @@ -446,6 +446,7 @@ __DECLARE_EVENT_CLASS(call, PARAMS(proto), PARAMS(args), PARAMS(tstruct), \ static notrace void \ trace_event_raw_event_##call(void *__data, proto) \ { \ + might_fault(); \ guard(preempt_notrace)(); \ do_trace_event_raw_event_##call(__data, args); \ } diff --git a/kernel/trace/trace_syscalls.c b/kernel/trace/trace_syscalls.c index edcfa47446c7..89d7e4c57b5b 100644 --- a/kernel/trace/trace_syscalls.c +++ b/kernel/trace/trace_syscalls.c @@ -303,6 +303,7 @@ static void ftrace_syscall_enter(void *data, struct pt_regs *regs, long id) * Syscall probe called with preemption enabled, but the ring * buffer and per-cpu data require preemption to be disabled. */ + might_fault(); guard(preempt_notrace)(); syscall_nr = trace_get_syscall_nr(current, regs); @@ -348,6 +349,7 @@ static void ftrace_syscall_exit(void *data, struct pt_regs *regs, long ret) * Syscall probe called with preemption enabled, but the ring * buffer and per-cpu data require preemption to be disabled. */ + might_fault(); guard(preempt_notrace)(); syscall_nr = trace_get_syscall_nr(current, regs);