@@ -1115,6 +1115,7 @@ enum perf_ftrace_subcommand {
11151115int cmd_ftrace (int argc , const char * * argv )
11161116{
11171117 int ret ;
1118+ int (* cmd_func )(struct perf_ftrace * ) = NULL ;
11181119 struct perf_ftrace ftrace = {
11191120 .tracer = DEFAULT_TRACER ,
11201121 .target = { .uid = UINT_MAX , },
@@ -1221,6 +1222,28 @@ int cmd_ftrace(int argc, const char **argv)
12211222 goto out_delete_filters ;
12221223 }
12231224
1225+ switch (subcmd ) {
1226+ case PERF_FTRACE_TRACE :
1227+ if (!argc && target__none (& ftrace .target ))
1228+ ftrace .target .system_wide = true;
1229+ cmd_func = __cmd_ftrace ;
1230+ break ;
1231+ case PERF_FTRACE_LATENCY :
1232+ if (list_empty (& ftrace .filters )) {
1233+ pr_err ("Should provide a function to measure\n" );
1234+ parse_options_usage (ftrace_usage , options , "T" , 1 );
1235+ ret = - EINVAL ;
1236+ goto out_delete_filters ;
1237+ }
1238+ cmd_func = __cmd_latency ;
1239+ break ;
1240+ case PERF_FTRACE_NONE :
1241+ default :
1242+ pr_err ("Invalid subcommand\n" );
1243+ ret = - EINVAL ;
1244+ goto out_delete_filters ;
1245+ }
1246+
12241247 ret = target__validate (& ftrace .target );
12251248 if (ret ) {
12261249 char errbuf [512 ];
@@ -1248,27 +1271,7 @@ int cmd_ftrace(int argc, const char **argv)
12481271 goto out_delete_evlist ;
12491272 }
12501273
1251- switch (subcmd ) {
1252- case PERF_FTRACE_TRACE :
1253- if (!argc && target__none (& ftrace .target ))
1254- ftrace .target .system_wide = true;
1255- ret = __cmd_ftrace (& ftrace );
1256- break ;
1257- case PERF_FTRACE_LATENCY :
1258- if (list_empty (& ftrace .filters )) {
1259- pr_err ("Should provide a function to measure\n" );
1260- parse_options_usage (ftrace_usage , options , "T" , 1 );
1261- ret = - EINVAL ;
1262- goto out_delete_evlist ;
1263- }
1264- ret = __cmd_latency (& ftrace );
1265- break ;
1266- case PERF_FTRACE_NONE :
1267- default :
1268- pr_err ("Invalid subcommand\n" );
1269- ret = - EINVAL ;
1270- break ;
1271- }
1274+ ret = cmd_func (& ftrace );
12721275
12731276out_delete_evlist :
12741277 evlist__delete (ftrace .evlist );
0 commit comments