mirror of https://github.com/torvalds/linux.git
ftrace fixes for v6.19:
- Fix regression of pid filtering of function graph tracer When the function graph tracer allowed multiple instances of graph tracing using subops, the filtering by pid broke. The ftrace_ops->private that was used for pid filtering wasn't updated on creation. The wrong function entry callback was used when pid filtering was enabled when the function graph tracer started, which meant that the pid filtering wasn't happening. - Remove no longer needed ftrace_trace_task() With PID filtering working via ftrace_pids_enabled() and fgraph_pid_func(), the coarse-grained ftrace_trace_task() check in graph_entry() is obsolete. It was only a fallback for uninitialized op->private (now fixed), and its removal ensures consistent PID filtering with standard function tracing. -----BEGIN PGP SIGNATURE----- iIoEABYKADIWIQRRSw7ePDh/lE+zeZMp5XQQmuv6qgUCaS90FhQccm9zdGVkdEBn b29kbWlzLm9yZwAKCRAp5XQQmuv6qrqMAQDbU53VhvZ6rE0pNvu0Tlk+LDCu3gxg F2wisWr65389OgD/VFLTVRjCZh1iY7FFWjAPGRCMbetljmMgK5vpH6XSigA= =VKaD -----END PGP SIGNATURE----- Merge tag 'ftrace-v6.19' of git://git.kernel.org/pub/scm/linux/kernel/git/trace/linux-trace Pull ftrace updates from Steven Rostedt: - Fix regression of pid filtering of function graph tracer When the function graph tracer allowed multiple instances of graph tracing using subops, the filtering by pid broke. The ftrace_ops->private that was used for pid filtering wasn't updated on creation. The wrong function entry callback was used when pid filtering was enabled when the function graph tracer started, which meant that the pid filtering wasn't happening. - Remove no longer needed ftrace_trace_task() With PID filtering working via ftrace_pids_enabled() and fgraph_pid_func(), the coarse-grained ftrace_trace_task() check in graph_entry() is obsolete. It was only a fallback for uninitialized op->private (now fixed), and its removal ensures consistent PID filtering with standard function tracing. * tag 'ftrace-v6.19' of git://git.kernel.org/pub/scm/linux/kernel/git/trace/linux-trace: fgraph: Remove coarse PID filtering from graph_entry() fgraph: Check ftrace_pids_enabled on registration for early filtering fgraph: Initialize ftrace_ops->private for function graph ops
This commit is contained in:
commit
0771cee974
|
|
@ -1016,6 +1016,7 @@ void fgraph_init_ops(struct ftrace_ops *dst_ops,
|
|||
mutex_init(&dst_ops->local_hash.regex_lock);
|
||||
INIT_LIST_HEAD(&dst_ops->subop_list);
|
||||
dst_ops->flags |= FTRACE_OPS_FL_INITIALIZED;
|
||||
dst_ops->private = src_ops->private;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
|
@ -1368,6 +1369,13 @@ int register_ftrace_graph(struct fgraph_ops *gops)
|
|||
|
||||
ftrace_graph_active++;
|
||||
|
||||
/* Always save the function, and reset at unregistering */
|
||||
gops->saved_func = gops->entryfunc;
|
||||
#ifdef CONFIG_DYNAMIC_FTRACE
|
||||
if (ftrace_pids_enabled(&gops->ops))
|
||||
gops->entryfunc = fgraph_pid_func;
|
||||
#endif
|
||||
|
||||
if (ftrace_graph_active == 2)
|
||||
ftrace_graph_disable_direct(true);
|
||||
|
||||
|
|
@ -1387,8 +1395,6 @@ int register_ftrace_graph(struct fgraph_ops *gops)
|
|||
} else {
|
||||
init_task_vars(gops->idx);
|
||||
}
|
||||
/* Always save the function, and reset at unregistering */
|
||||
gops->saved_func = gops->entryfunc;
|
||||
|
||||
gops->ops.flags |= FTRACE_OPS_FL_GRAPH;
|
||||
|
||||
|
|
|
|||
|
|
@ -1162,11 +1162,6 @@ struct ftrace_func_command {
|
|||
char *params, int enable);
|
||||
};
|
||||
extern bool ftrace_filter_param __initdata;
|
||||
static inline int ftrace_trace_task(struct trace_array *tr)
|
||||
{
|
||||
return this_cpu_read(tr->array_buffer.data->ftrace_ignore_pid) !=
|
||||
FTRACE_PID_IGNORE;
|
||||
}
|
||||
extern int ftrace_is_dead(void);
|
||||
int ftrace_create_function_files(struct trace_array *tr,
|
||||
struct dentry *parent);
|
||||
|
|
@ -1184,10 +1179,6 @@ void ftrace_clear_pids(struct trace_array *tr);
|
|||
int init_function_trace(void);
|
||||
void ftrace_pid_follow_fork(struct trace_array *tr, bool enable);
|
||||
#else
|
||||
static inline int ftrace_trace_task(struct trace_array *tr)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
static inline int ftrace_is_dead(void) { return 0; }
|
||||
static inline int
|
||||
ftrace_create_function_files(struct trace_array *tr,
|
||||
|
|
|
|||
|
|
@ -251,9 +251,6 @@ static int graph_entry(struct ftrace_graph_ent *trace,
|
|||
return 1;
|
||||
}
|
||||
|
||||
if (!ftrace_trace_task(tr))
|
||||
return 0;
|
||||
|
||||
if (ftrace_graph_ignore_func(gops, trace))
|
||||
return 0;
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue