mirror of https://github.com/OpenIPC/firmware.git
92 lines
3.1 KiB
Diff
92 lines
3.1 KiB
Diff
diff -drupN a/kernel/trace/ftrace.c b/kernel/trace/ftrace.c
|
|
--- a/kernel/trace/ftrace.c 2018-08-06 17:23:04.000000000 +0300
|
|
+++ b/kernel/trace/ftrace.c 2022-06-12 05:28:14.000000000 +0300
|
|
@@ -120,8 +120,9 @@ static void ftrace_ops_list_func(unsigne
|
|
struct ftrace_ops *op, struct pt_regs *regs);
|
|
#else
|
|
/* See comment below, where ftrace_ops_list_func is defined */
|
|
-static void ftrace_ops_no_ops(unsigned long ip, unsigned long parent_ip);
|
|
-#define ftrace_ops_list_func ((ftrace_func_t)ftrace_ops_no_ops)
|
|
+static void ftrace_ops_no_ops(unsigned long ip, unsigned long parent_ip,
|
|
+ struct ftrace_ops *op, struct pt_regs *regs);
|
|
+#define ftrace_ops_list_func ftrace_ops_no_ops
|
|
#endif
|
|
|
|
/*
|
|
@@ -4275,6 +4276,23 @@ int ftrace_set_filter_ip(struct ftrace_o
|
|
}
|
|
EXPORT_SYMBOL_GPL(ftrace_set_filter_ip);
|
|
|
|
+/**
|
|
+ * ftrace_ops_set_global_filter - setup ops to use global filters
|
|
+ * @ops - the ops which will use the global filters
|
|
+ *
|
|
+ * ftrace users who need global function trace filtering should call this.
|
|
+ * It can set the global filter only if ops were not initialized before.
|
|
+ */
|
|
+void ftrace_ops_set_global_filter(struct ftrace_ops *ops)
|
|
+{
|
|
+ if (ops->flags & FTRACE_OPS_FL_INITIALIZED)
|
|
+ return;
|
|
+
|
|
+ ftrace_ops_init(ops);
|
|
+ ops->func_hash = &global_ops.local_hash;
|
|
+}
|
|
+EXPORT_SYMBOL_GPL(ftrace_ops_set_global_filter);
|
|
+
|
|
static int
|
|
ftrace_set_regex(struct ftrace_ops *ops, unsigned char *buf, int len,
|
|
int reset, int enable)
|
|
@@ -4874,9 +4892,9 @@ static int ftrace_cmp_ips(const void *a,
|
|
return 0;
|
|
}
|
|
|
|
-static int ftrace_process_locs(struct module *mod,
|
|
- unsigned long *start,
|
|
- unsigned long *end)
|
|
+static int __norecordmcount ftrace_process_locs(struct module *mod,
|
|
+ unsigned long *start,
|
|
+ unsigned long *end)
|
|
{
|
|
struct ftrace_page *start_pg;
|
|
struct ftrace_page *pg;
|
|
@@ -5309,7 +5327,8 @@ static void ftrace_ops_list_func(unsigne
|
|
__ftrace_ops_list_func(ip, parent_ip, NULL, regs);
|
|
}
|
|
#else
|
|
-static void ftrace_ops_no_ops(unsigned long ip, unsigned long parent_ip)
|
|
+static void ftrace_ops_no_ops(unsigned long ip, unsigned long parent_ip,
|
|
+ struct ftrace_ops *op, struct pt_regs *regs)
|
|
{
|
|
__ftrace_ops_list_func(ip, parent_ip, NULL, NULL);
|
|
}
|
|
@@ -5735,14 +5754,17 @@ void ftrace_graph_graph_time_control(boo
|
|
fgraph_graph_time = enable;
|
|
}
|
|
|
|
+void ftrace_graph_return_stub(struct ftrace_graph_ret *trace)
|
|
+{
|
|
+}
|
|
+
|
|
int ftrace_graph_entry_stub(struct ftrace_graph_ent *trace)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
/* The callbacks that hook a function */
|
|
-trace_func_graph_ret_t ftrace_graph_return =
|
|
- (trace_func_graph_ret_t)ftrace_stub;
|
|
+trace_func_graph_ret_t ftrace_graph_return = ftrace_graph_return_stub;
|
|
trace_func_graph_ent_t ftrace_graph_entry = ftrace_graph_entry_stub;
|
|
static trace_func_graph_ent_t __ftrace_graph_entry = ftrace_graph_entry_stub;
|
|
|
|
@@ -5970,7 +5992,7 @@ void unregister_ftrace_graph(void)
|
|
goto out;
|
|
|
|
ftrace_graph_active--;
|
|
- ftrace_graph_return = (trace_func_graph_ret_t)ftrace_stub;
|
|
+ ftrace_graph_return = ftrace_graph_return_stub;
|
|
ftrace_graph_entry = ftrace_graph_entry_stub;
|
|
__ftrace_graph_entry = ftrace_graph_entry_stub;
|
|
ftrace_shutdown(&graph_ops, FTRACE_STOP_FUNC_RET);
|