Some trivial cleanup for tracing.
v2:
* drop patch 1
* merge patch 4 & 5
* introduce a new patch change the return value of tracing_init_dentry()
Wei Yang (4):
tracing: simplify the logic by defining next to be "lasst + 1"
tracing: save one trace_event->type by using __TRACE_LAST_TYPE
tracing: toplevel d_entry already initialized
tracing: make tracing_init_dentry() returns an integer instead of a
d_entry pointer
kernel/trace/trace.c | 36 ++++++++++++++--------------
kernel/trace/trace.h | 2 +-
kernel/trace/trace_dynevent.c | 8 +++----
kernel/trace/trace_events.c | 9 ++-----
kernel/trace/trace_events_synth.c | 9 +++----
kernel/trace/trace_functions_graph.c | 8 +++----
kernel/trace/trace_hwlat.c | 8 +++----
kernel/trace/trace_kprobe.c | 10 ++++----
kernel/trace/trace_output.c | 14 +++++------
kernel/trace/trace_printk.c | 8 +++----
kernel/trace/trace_stack.c | 12 +++++-----
kernel/trace/trace_stat.c | 8 +++----
kernel/trace/trace_uprobe.c | 9 ++++---
13 files changed, 66 insertions(+), 75 deletions(-)
--
2.20.1 (Apple Git-117)
The value to be used and compared in trace_search_list() is "last + 1".
Let's just define next to be "last + 1" instead of doing the addition
each time.
Signed-off-by: Wei Yang <[email protected]>
---
kernel/trace/trace_output.c | 12 ++++++------
1 file changed, 6 insertions(+), 6 deletions(-)
diff --git a/kernel/trace/trace_output.c b/kernel/trace/trace_output.c
index 73976de7f8cc..a35232d61601 100644
--- a/kernel/trace/trace_output.c
+++ b/kernel/trace/trace_output.c
@@ -675,11 +675,11 @@ static LIST_HEAD(ftrace_event_list);
static int trace_search_list(struct list_head **list)
{
struct trace_event *e;
- int last = __TRACE_LAST_TYPE;
+ int next = __TRACE_LAST_TYPE + 1;
if (list_empty(&ftrace_event_list)) {
*list = &ftrace_event_list;
- return last + 1;
+ return next;
}
/*
@@ -687,17 +687,17 @@ static int trace_search_list(struct list_head **list)
* lets see if somebody freed one.
*/
list_for_each_entry(e, &ftrace_event_list, list) {
- if (e->type != last + 1)
+ if (e->type != next)
break;
- last++;
+ next++;
}
/* Did we used up all 65 thousand events??? */
- if ((last + 1) > TRACE_EVENT_TYPE_MAX)
+ if (next > TRACE_EVENT_TYPE_MAX)
return 0;
*list = &e->list;
- return last + 1;
+ return next;
}
void trace_event_read_lock(void)
--
2.20.1 (Apple Git-117)
Currently we have following call flow:
tracer_init_tracefs()
tracing_init_dentry()
event_trace_init()
tracing_init_dentry()
This shows tracing_init_dentry() is called twice in this flow and this
is not necessary.
Let's remove the second one when it is for sure be properly initialized.
Signed-off-by: Wei Yang <[email protected]>
---
v2:
* merged 4 & 5
---
kernel/trace/trace_events.c | 9 ++-------
1 file changed, 2 insertions(+), 7 deletions(-)
diff --git a/kernel/trace/trace_events.c b/kernel/trace/trace_events.c
index f6f55682d3e2..76879b29cf33 100644
--- a/kernel/trace/trace_events.c
+++ b/kernel/trace/trace_events.c
@@ -3434,7 +3434,6 @@ early_initcall(event_trace_enable_again);
__init int event_trace_init(void)
{
struct trace_array *tr;
- struct dentry *d_tracer;
struct dentry *entry;
int ret;
@@ -3442,11 +3441,7 @@ __init int event_trace_init(void)
if (!tr)
return -ENODEV;
- d_tracer = tracing_init_dentry();
- if (IS_ERR(d_tracer))
- return 0;
-
- entry = tracefs_create_file("available_events", 0444, d_tracer,
+ entry = tracefs_create_file("available_events", 0444, NULL,
tr, &ftrace_avail_fops);
if (!entry)
pr_warn("Could not create tracefs 'available_events' entry\n");
@@ -3457,7 +3452,7 @@ __init int event_trace_init(void)
if (trace_define_common_fields())
pr_warn("tracing: Failed to allocate common fields");
- ret = early_event_add_tracer(d_tracer, tr);
+ ret = early_event_add_tracer(NULL, tr);
if (ret)
return ret;
--
2.20.1 (Apple Git-117)
Static defined trace_event->type stops at (__TRACE_LAST_TYPE - 1) and
dynamic trace_event->type starts from (__TRACE_LAST_TYPE + 1).
To save one trace_event->type index, let's use __TRACE_LAST_TYPE.
Signed-off-by: Wei Yang <[email protected]>
---
kernel/trace/trace_output.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/kernel/trace/trace_output.c b/kernel/trace/trace_output.c
index a35232d61601..4d1893564912 100644
--- a/kernel/trace/trace_output.c
+++ b/kernel/trace/trace_output.c
@@ -20,7 +20,7 @@ DECLARE_RWSEM(trace_event_sem);
static struct hlist_head event_hash[EVENT_HASHSIZE] __read_mostly;
-static int next_event_type = __TRACE_LAST_TYPE + 1;
+static int next_event_type = __TRACE_LAST_TYPE;
enum print_line_t trace_print_bputs_msg_only(struct trace_iterator *iter)
{
@@ -675,7 +675,7 @@ static LIST_HEAD(ftrace_event_list);
static int trace_search_list(struct list_head **list)
{
struct trace_event *e;
- int next = __TRACE_LAST_TYPE + 1;
+ int next = __TRACE_LAST_TYPE;
if (list_empty(&ftrace_event_list)) {
*list = &ftrace_event_list;
--
2.20.1 (Apple Git-117)
Current tracing_init_dentry() return a d_entry pointer, while is not
necessary. This function returns NULL on success or error on failure,
which means there is no valid d_entry pointer return.
Let's return 0 on success and negative value for error.
Signed-off-by: Wei Yang <[email protected]>
---
kernel/trace/trace.c | 36 ++++++++++++++--------------
kernel/trace/trace.h | 2 +-
kernel/trace/trace_dynevent.c | 8 +++----
kernel/trace/trace_events_synth.c | 9 +++----
kernel/trace/trace_functions_graph.c | 8 +++----
kernel/trace/trace_hwlat.c | 8 +++----
kernel/trace/trace_kprobe.c | 10 ++++----
kernel/trace/trace_printk.c | 8 +++----
kernel/trace/trace_stack.c | 12 +++++-----
kernel/trace/trace_stat.c | 8 +++----
kernel/trace/trace_uprobe.c | 9 ++++---
11 files changed, 57 insertions(+), 61 deletions(-)
diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c
index 547e1e01902a..41c3d75c34cc 100644
--- a/kernel/trace/trace.c
+++ b/kernel/trace/trace.c
@@ -8933,23 +8933,23 @@ static struct vfsmount *trace_automount(struct dentry *mntpt, void *ingore)
* directory. It is called via fs_initcall() by any of the boot up code
* and expects to return the dentry of the top level tracing directory.
*/
-struct dentry *tracing_init_dentry(void)
+int tracing_init_dentry(void)
{
struct trace_array *tr = &global_trace;
if (security_locked_down(LOCKDOWN_TRACEFS)) {
pr_warn("Tracing disabled due to lockdown\n");
- return ERR_PTR(-EPERM);
+ return -EPERM;
}
/* The top level trace array uses NULL as parent */
if (tr->dir)
- return NULL;
+ return 0;
if (WARN_ON(!tracefs_initialized()) ||
(IS_ENABLED(CONFIG_DEBUG_FS) &&
WARN_ON(!debugfs_initialized())))
- return ERR_PTR(-ENODEV);
+ return -ENODEV;
/*
* As there may still be users that expect the tracing
@@ -8960,7 +8960,7 @@ struct dentry *tracing_init_dentry(void)
tr->dir = debugfs_create_automount("tracing", NULL,
trace_automount, NULL);
- return NULL;
+ return 0;
}
extern struct trace_eval_map *__start_ftrace_eval_maps[];
@@ -9047,48 +9047,48 @@ static struct notifier_block trace_module_nb = {
static __init int tracer_init_tracefs(void)
{
- struct dentry *d_tracer;
+ int ret;
trace_access_lock_init();
- d_tracer = tracing_init_dentry();
- if (IS_ERR(d_tracer))
+ ret = tracing_init_dentry();
+ if (ret)
return 0;
event_trace_init();
- init_tracer_tracefs(&global_trace, d_tracer);
- ftrace_init_tracefs_toplevel(&global_trace, d_tracer);
+ init_tracer_tracefs(&global_trace, NULL);
+ ftrace_init_tracefs_toplevel(&global_trace, NULL);
- trace_create_file("tracing_thresh", 0644, d_tracer,
+ trace_create_file("tracing_thresh", 0644, NULL,
&global_trace, &tracing_thresh_fops);
- trace_create_file("README", 0444, d_tracer,
+ trace_create_file("README", 0444, NULL,
NULL, &tracing_readme_fops);
- trace_create_file("saved_cmdlines", 0444, d_tracer,
+ trace_create_file("saved_cmdlines", 0444, NULL,
NULL, &tracing_saved_cmdlines_fops);
- trace_create_file("saved_cmdlines_size", 0644, d_tracer,
+ trace_create_file("saved_cmdlines_size", 0644, NULL,
NULL, &tracing_saved_cmdlines_size_fops);
- trace_create_file("saved_tgids", 0444, d_tracer,
+ trace_create_file("saved_tgids", 0444, NULL,
NULL, &tracing_saved_tgids_fops);
trace_eval_init();
- trace_create_eval_file(d_tracer);
+ trace_create_eval_file(NULL);
#ifdef CONFIG_MODULES
register_module_notifier(&trace_module_nb);
#endif
#ifdef CONFIG_DYNAMIC_FTRACE
- trace_create_file("dyn_ftrace_total_info", 0444, d_tracer,
+ trace_create_file("dyn_ftrace_total_info", 0444, NULL,
NULL, &tracing_dyn_info_fops);
#endif
- create_trace_instances(d_tracer);
+ create_trace_instances(NULL);
update_tracer_options(&global_trace);
diff --git a/kernel/trace/trace.h b/kernel/trace/trace.h
index def769df5bf1..afcef31ae76d 100644
--- a/kernel/trace/trace.h
+++ b/kernel/trace/trace.h
@@ -734,7 +734,7 @@ struct dentry *trace_create_file(const char *name,
void *data,
const struct file_operations *fops);
-struct dentry *tracing_init_dentry(void);
+int tracing_init_dentry(void);
struct ring_buffer_event;
diff --git a/kernel/trace/trace_dynevent.c b/kernel/trace/trace_dynevent.c
index 9f2e8520b748..9442a9bb080e 100644
--- a/kernel/trace/trace_dynevent.c
+++ b/kernel/trace/trace_dynevent.c
@@ -206,14 +206,14 @@ static const struct file_operations dynamic_events_ops = {
/* Make a tracefs interface for controlling dynamic events */
static __init int init_dynamic_event(void)
{
- struct dentry *d_tracer;
struct dentry *entry;
+ int ret;
- d_tracer = tracing_init_dentry();
- if (IS_ERR(d_tracer))
+ ret = tracing_init_dentry();
+ if (ret)
return 0;
- entry = tracefs_create_file("dynamic_events", 0644, d_tracer,
+ entry = tracefs_create_file("dynamic_events", 0644, NULL,
NULL, &dynamic_events_ops);
/* Event list interface */
diff --git a/kernel/trace/trace_events_synth.c b/kernel/trace/trace_events_synth.c
index c6cca0d1d584..f86a2aa0bccd 100644
--- a/kernel/trace/trace_events_synth.c
+++ b/kernel/trace/trace_events_synth.c
@@ -1757,7 +1757,6 @@ static const struct file_operations synth_events_fops = {
static __init int trace_events_synth_init(void)
{
struct dentry *entry = NULL;
- struct dentry *d_tracer;
int err = 0;
err = dyn_event_register(&synth_event_ops);
@@ -1766,13 +1765,11 @@ static __init int trace_events_synth_init(void)
return err;
}
- d_tracer = tracing_init_dentry();
- if (IS_ERR(d_tracer)) {
- err = PTR_ERR(d_tracer);
+ err = tracing_init_dentry();
+ if (err)
goto err;
- }
- entry = tracefs_create_file("synthetic_events", 0644, d_tracer,
+ entry = tracefs_create_file("synthetic_events", 0644, NULL,
NULL, &synth_events_fops);
if (!entry) {
err = -ENODEV;
diff --git a/kernel/trace/trace_functions_graph.c b/kernel/trace/trace_functions_graph.c
index 4a9c49c08ec9..60d66278aa0d 100644
--- a/kernel/trace/trace_functions_graph.c
+++ b/kernel/trace/trace_functions_graph.c
@@ -1336,13 +1336,13 @@ static const struct file_operations graph_depth_fops = {
static __init int init_graph_tracefs(void)
{
- struct dentry *d_tracer;
+ int ret;
- d_tracer = tracing_init_dentry();
- if (IS_ERR(d_tracer))
+ ret = tracing_init_dentry();
+ if (ret)
return 0;
- trace_create_file("max_graph_depth", 0644, d_tracer,
+ trace_create_file("max_graph_depth", 0644, NULL,
NULL, &graph_depth_fops);
return 0;
diff --git a/kernel/trace/trace_hwlat.c b/kernel/trace/trace_hwlat.c
index e2be7bb7ef7e..4ddbad511b6d 100644
--- a/kernel/trace/trace_hwlat.c
+++ b/kernel/trace/trace_hwlat.c
@@ -538,14 +538,14 @@ static const struct file_operations window_fops = {
*/
static int init_tracefs(void)
{
- struct dentry *d_tracer;
+ int ret;
struct dentry *top_dir;
- d_tracer = tracing_init_dentry();
- if (IS_ERR(d_tracer))
+ ret = tracing_init_dentry();
+ if (ret)
return -ENOMEM;
- top_dir = tracefs_create_dir("hwlat_detector", d_tracer);
+ top_dir = tracefs_create_dir("hwlat_detector", NULL);
if (!top_dir)
return -ENOMEM;
diff --git a/kernel/trace/trace_kprobe.c b/kernel/trace/trace_kprobe.c
index ea8d0b094f1b..51de3a9ffd1c 100644
--- a/kernel/trace/trace_kprobe.c
+++ b/kernel/trace/trace_kprobe.c
@@ -1901,14 +1901,14 @@ subsys_initcall(init_kprobe_trace_early);
/* Make a tracefs interface for controlling probe points */
static __init int init_kprobe_trace(void)
{
- struct dentry *d_tracer;
+ int ret;
struct dentry *entry;
- d_tracer = tracing_init_dentry();
- if (IS_ERR(d_tracer))
+ ret = tracing_init_dentry();
+ if (ret)
return 0;
- entry = tracefs_create_file("kprobe_events", 0644, d_tracer,
+ entry = tracefs_create_file("kprobe_events", 0644, NULL,
NULL, &kprobe_events_ops);
/* Event list interface */
@@ -1916,7 +1916,7 @@ static __init int init_kprobe_trace(void)
pr_warn("Could not create tracefs 'kprobe_events' entry\n");
/* Profile interface */
- entry = tracefs_create_file("kprobe_profile", 0444, d_tracer,
+ entry = tracefs_create_file("kprobe_profile", 0444, NULL,
NULL, &kprobe_profile_ops);
if (!entry)
diff --git a/kernel/trace/trace_printk.c b/kernel/trace/trace_printk.c
index d4e31e969206..71b2e0fdc3e0 100644
--- a/kernel/trace/trace_printk.c
+++ b/kernel/trace/trace_printk.c
@@ -367,13 +367,13 @@ static const struct file_operations ftrace_formats_fops = {
static __init int init_trace_printk_function_export(void)
{
- struct dentry *d_tracer;
+ int ret;
- d_tracer = tracing_init_dentry();
- if (IS_ERR(d_tracer))
+ ret = tracing_init_dentry();
+ if (ret)
return 0;
- trace_create_file("printk_formats", 0444, d_tracer,
+ trace_create_file("printk_formats", 0444, NULL,
NULL, &ftrace_formats_fops);
return 0;
diff --git a/kernel/trace/trace_stack.c b/kernel/trace/trace_stack.c
index c557f42a9397..67711269184b 100644
--- a/kernel/trace/trace_stack.c
+++ b/kernel/trace/trace_stack.c
@@ -555,20 +555,20 @@ __setup("stacktrace", enable_stacktrace);
static __init int stack_trace_init(void)
{
- struct dentry *d_tracer;
+ int ret;
- d_tracer = tracing_init_dentry();
- if (IS_ERR(d_tracer))
+ ret = tracing_init_dentry();
+ if (ret)
return 0;
- trace_create_file("stack_max_size", 0644, d_tracer,
+ trace_create_file("stack_max_size", 0644, NULL,
&stack_trace_max_size, &stack_max_size_fops);
- trace_create_file("stack_trace", 0444, d_tracer,
+ trace_create_file("stack_trace", 0444, NULL,
NULL, &stack_trace_fops);
#ifdef CONFIG_DYNAMIC_FTRACE
- trace_create_file("stack_trace_filter", 0644, d_tracer,
+ trace_create_file("stack_trace_filter", 0644, NULL,
&trace_ops, &stack_trace_filter_fops);
#endif
diff --git a/kernel/trace/trace_stat.c b/kernel/trace/trace_stat.c
index d1fa19773cc8..8d141c3825a9 100644
--- a/kernel/trace/trace_stat.c
+++ b/kernel/trace/trace_stat.c
@@ -276,13 +276,13 @@ static const struct file_operations tracing_stat_fops = {
static int tracing_stat_init(void)
{
- struct dentry *d_tracing;
+ int ret;
- d_tracing = tracing_init_dentry();
- if (IS_ERR(d_tracing))
+ ret = tracing_init_dentry();
+ if (ret)
return -ENODEV;
- stat_dir = tracefs_create_dir("trace_stat", d_tracing);
+ stat_dir = tracefs_create_dir("trace_stat", NULL);
if (!stat_dir) {
pr_warn("Could not create tracefs 'trace_stat' entry\n");
return -ENOMEM;
diff --git a/kernel/trace/trace_uprobe.c b/kernel/trace/trace_uprobe.c
index 2a8e8e9c1c75..502dbecf6c9f 100644
--- a/kernel/trace/trace_uprobe.c
+++ b/kernel/trace/trace_uprobe.c
@@ -1626,21 +1626,20 @@ void destroy_local_trace_uprobe(struct trace_event_call *event_call)
/* Make a trace interface for controling probe points */
static __init int init_uprobe_trace(void)
{
- struct dentry *d_tracer;
int ret;
ret = dyn_event_register(&trace_uprobe_ops);
if (ret)
return ret;
- d_tracer = tracing_init_dentry();
- if (IS_ERR(d_tracer))
+ ret = tracing_init_dentry();
+ if (ret)
return 0;
- trace_create_file("uprobe_events", 0644, d_tracer,
+ trace_create_file("uprobe_events", 0644, NULL,
NULL, &uprobe_events_ops);
/* Profile interface */
- trace_create_file("uprobe_profile", 0444, d_tracer,
+ trace_create_file("uprobe_profile", 0444, NULL,
NULL, &uprobe_profile_ops);
return 0;
}
--
2.20.1 (Apple Git-117)
Steven,
Would you like to pick this up?
On Sun, Jul 12, 2020 at 09:10:32AM +0800, Wei Yang wrote:
>Some trivial cleanup for tracing.
>
>v2:
> * drop patch 1
> * merge patch 4 & 5
> * introduce a new patch change the return value of tracing_init_dentry()
>
>Wei Yang (4):
> tracing: simplify the logic by defining next to be "lasst + 1"
> tracing: save one trace_event->type by using __TRACE_LAST_TYPE
> tracing: toplevel d_entry already initialized
> tracing: make tracing_init_dentry() returns an integer instead of a
> d_entry pointer
>
> kernel/trace/trace.c | 36 ++++++++++++++--------------
> kernel/trace/trace.h | 2 +-
> kernel/trace/trace_dynevent.c | 8 +++----
> kernel/trace/trace_events.c | 9 ++-----
> kernel/trace/trace_events_synth.c | 9 +++----
> kernel/trace/trace_functions_graph.c | 8 +++----
> kernel/trace/trace_hwlat.c | 8 +++----
> kernel/trace/trace_kprobe.c | 10 ++++----
> kernel/trace/trace_output.c | 14 +++++------
> kernel/trace/trace_printk.c | 8 +++----
> kernel/trace/trace_stack.c | 12 +++++-----
> kernel/trace/trace_stat.c | 8 +++----
> kernel/trace/trace_uprobe.c | 9 ++++---
> 13 files changed, 66 insertions(+), 75 deletions(-)
>
>--
>2.20.1 (Apple Git-117)
--
Wei Yang
Help you, Help me
On Fri, 28 Aug 2020 11:42:57 +0800
Wei Yang <[email protected]> wrote:
> Steven,
>
> Would you like to pick this up?
>
Hmm, patch 1 and 2 have been accepted (different subjects though):
746cf3459f11859 ("tracing: Simplify defining of the next event id")
36b8aacf2a483ba ("tracing: Save one trace_event->type by using __TRACE_LAST_TYPE")
I'm not sure why I didn't pick up patches 3 and 4. I'm looking into that
now.
-- Steve
> On Sun, Jul 12, 2020 at 09:10:32AM +0800, Wei Yang wrote:
> >Some trivial cleanup for tracing.
> >
> >v2:
> > * drop patch 1
> > * merge patch 4 & 5
> > * introduce a new patch change the return value of tracing_init_dentry()
> >
> >Wei Yang (4):
> > tracing: simplify the logic by defining next to be "lasst + 1"
> > tracing: save one trace_event->type by using __TRACE_LAST_TYPE
> > tracing: toplevel d_entry already initialized
> > tracing: make tracing_init_dentry() returns an integer instead of a
> > d_entry pointer
> >
> > kernel/trace/trace.c | 36 ++++++++++++++--------------
> > kernel/trace/trace.h | 2 +-
> > kernel/trace/trace_dynevent.c | 8 +++----
> > kernel/trace/trace_events.c | 9 ++-----
> > kernel/trace/trace_events_synth.c | 9 +++----
> > kernel/trace/trace_functions_graph.c | 8 +++----
> > kernel/trace/trace_hwlat.c | 8 +++----
> > kernel/trace/trace_kprobe.c | 10 ++++----
> > kernel/trace/trace_output.c | 14 +++++------
> > kernel/trace/trace_printk.c | 8 +++----
> > kernel/trace/trace_stack.c | 12 +++++-----
> > kernel/trace/trace_stat.c | 8 +++----
> > kernel/trace/trace_uprobe.c | 9 ++++---
> > 13 files changed, 66 insertions(+), 75 deletions(-)
> >
> >--
> >2.20.1 (Apple Git-117)
>
On Mon, Sep 14, 2020 at 06:55:28PM -0400, Steven Rostedt wrote:
>On Fri, 28 Aug 2020 11:42:57 +0800
>Wei Yang <[email protected]> wrote:
>
>> Steven,
>>
>> Would you like to pick this up?
>>
>
>Hmm, patch 1 and 2 have been accepted (different subjects though):
>
> 746cf3459f11859 ("tracing: Simplify defining of the next event id")
> 36b8aacf2a483ba ("tracing: Save one trace_event->type by using __TRACE_LAST_TYPE")
>
>I'm not sure why I didn't pick up patches 3 and 4. I'm looking into that
>now.
>
Yep, thanks a lot :-)
>-- Steve
>
>
>> On Sun, Jul 12, 2020 at 09:10:32AM +0800, Wei Yang wrote:
>> >Some trivial cleanup for tracing.
>> >
>> >v2:
>> > * drop patch 1
>> > * merge patch 4 & 5
>> > * introduce a new patch change the return value of tracing_init_dentry()
>> >
>> >Wei Yang (4):
>> > tracing: simplify the logic by defining next to be "lasst + 1"
>> > tracing: save one trace_event->type by using __TRACE_LAST_TYPE
>> > tracing: toplevel d_entry already initialized
>> > tracing: make tracing_init_dentry() returns an integer instead of a
>> > d_entry pointer
>> >
>> > kernel/trace/trace.c | 36 ++++++++++++++--------------
>> > kernel/trace/trace.h | 2 +-
>> > kernel/trace/trace_dynevent.c | 8 +++----
>> > kernel/trace/trace_events.c | 9 ++-----
>> > kernel/trace/trace_events_synth.c | 9 +++----
>> > kernel/trace/trace_functions_graph.c | 8 +++----
>> > kernel/trace/trace_hwlat.c | 8 +++----
>> > kernel/trace/trace_kprobe.c | 10 ++++----
>> > kernel/trace/trace_output.c | 14 +++++------
>> > kernel/trace/trace_printk.c | 8 +++----
>> > kernel/trace/trace_stack.c | 12 +++++-----
>> > kernel/trace/trace_stat.c | 8 +++----
>> > kernel/trace/trace_uprobe.c | 9 ++++---
>> > 13 files changed, 66 insertions(+), 75 deletions(-)
>> >
>> >--
>> >2.20.1 (Apple Git-117)
>>
--
Wei Yang
Help you, Help me