@@ -565,7 +565,24 @@ static int set_tracing_options(struct perf_ftrace *ftrace)
565
565
return 0 ;
566
566
}
567
567
568
- static int __cmd_ftrace (struct perf_ftrace * ftrace , int argc , const char * * argv )
568
+ static void select_tracer (struct perf_ftrace * ftrace )
569
+ {
570
+ bool graph = !list_empty (& ftrace -> graph_funcs ) ||
571
+ !list_empty (& ftrace -> nograph_funcs );
572
+ bool func = !list_empty (& ftrace -> filters ) ||
573
+ !list_empty (& ftrace -> notrace );
574
+
575
+ /* The function_graph has priority over function tracer. */
576
+ if (graph )
577
+ ftrace -> tracer = "function_graph" ;
578
+ else if (func )
579
+ ftrace -> tracer = "function" ;
580
+ /* Otherwise, the default tracer is used. */
581
+
582
+ pr_debug ("%s tracer is used\n" , ftrace -> tracer );
583
+ }
584
+
585
+ static int __cmd_ftrace (struct perf_ftrace * ftrace )
569
586
{
570
587
char * trace_file ;
571
588
int trace_fd ;
@@ -586,10 +603,7 @@ static int __cmd_ftrace(struct perf_ftrace *ftrace, int argc, const char **argv)
586
603
return -1 ;
587
604
}
588
605
589
- signal (SIGINT , sig_handler );
590
- signal (SIGUSR1 , sig_handler );
591
- signal (SIGCHLD , sig_handler );
592
- signal (SIGPIPE , sig_handler );
606
+ select_tracer (ftrace );
593
607
594
608
if (reset_tracing_files (ftrace ) < 0 ) {
595
609
pr_err ("failed to reset ftrace\n" );
@@ -600,11 +614,6 @@ static int __cmd_ftrace(struct perf_ftrace *ftrace, int argc, const char **argv)
600
614
if (write_tracing_file ("trace" , "0" ) < 0 )
601
615
goto out ;
602
616
603
- if (argc && evlist__prepare_workload (ftrace -> evlist , & ftrace -> target , argv , false,
604
- ftrace__workload_exec_failed_signal ) < 0 ) {
605
- goto out ;
606
- }
607
-
608
617
if (set_tracing_options (ftrace ) < 0 )
609
618
goto out_reset ;
610
619
@@ -855,23 +864,6 @@ static int parse_graph_tracer_opts(const struct option *opt,
855
864
return 0 ;
856
865
}
857
866
858
- static void select_tracer (struct perf_ftrace * ftrace )
859
- {
860
- bool graph = !list_empty (& ftrace -> graph_funcs ) ||
861
- !list_empty (& ftrace -> nograph_funcs );
862
- bool func = !list_empty (& ftrace -> filters ) ||
863
- !list_empty (& ftrace -> notrace );
864
-
865
- /* The function_graph has priority over function tracer. */
866
- if (graph )
867
- ftrace -> tracer = "function_graph" ;
868
- else if (func )
869
- ftrace -> tracer = "function" ;
870
- /* Otherwise, the default tracer is used. */
871
-
872
- pr_debug ("%s tracer is used\n" , ftrace -> tracer );
873
- }
874
-
875
867
int cmd_ftrace (int argc , const char * * argv )
876
868
{
877
869
int ret ;
@@ -937,6 +929,11 @@ int cmd_ftrace(int argc, const char **argv)
937
929
INIT_LIST_HEAD (& ftrace .graph_funcs );
938
930
INIT_LIST_HEAD (& ftrace .nograph_funcs );
939
931
932
+ signal (SIGINT , sig_handler );
933
+ signal (SIGUSR1 , sig_handler );
934
+ signal (SIGCHLD , sig_handler );
935
+ signal (SIGPIPE , sig_handler );
936
+
940
937
ret = perf_config (perf_ftrace_config , & ftrace );
941
938
if (ret < 0 )
942
939
return -1 ;
@@ -951,8 +948,6 @@ int cmd_ftrace(int argc, const char **argv)
951
948
if (!argc && target__none (& ftrace .target ))
952
949
ftrace .target .system_wide = true;
953
950
954
- select_tracer (& ftrace );
955
-
956
951
ret = target__validate (& ftrace .target );
957
952
if (ret ) {
958
953
char errbuf [512 ];
@@ -972,7 +967,15 @@ int cmd_ftrace(int argc, const char **argv)
972
967
if (ret < 0 )
973
968
goto out_delete_evlist ;
974
969
975
- ret = __cmd_ftrace (& ftrace , argc , argv );
970
+ if (argc ) {
971
+ ret = evlist__prepare_workload (ftrace .evlist , & ftrace .target ,
972
+ argv , false,
973
+ ftrace__workload_exec_failed_signal );
974
+ if (ret < 0 )
975
+ goto out_delete_evlist ;
976
+ }
977
+
978
+ ret = __cmd_ftrace (& ftrace );
976
979
977
980
out_delete_evlist :
978
981
evlist__delete (ftrace .evlist );
0 commit comments