@@ -153,7 +153,7 @@ const char *event_type(int type)
153153 return "unknown" ;
154154}
155155
156- static char * get_config_str (struct list_head * head_terms , int type_term )
156+ static char * get_config_str (struct list_head * head_terms , enum parse_events__term_type type_term )
157157{
158158 struct parse_events_term * term ;
159159
@@ -722,7 +722,7 @@ int parse_events_add_breakpoint(struct parse_events_state *parse_state,
722722
723723static int check_type_val (struct parse_events_term * term ,
724724 struct parse_events_error * err ,
725- int type )
725+ enum parse_events__term_val_type type )
726726{
727727 if (type == term -> type_val )
728728 return 0 ;
@@ -737,42 +737,49 @@ static int check_type_val(struct parse_events_term *term,
737737 return - EINVAL ;
738738}
739739
740- /*
741- * Update according to parse-events.l
742- */
743- static const char * config_term_names [__PARSE_EVENTS__TERM_TYPE_NR ] = {
744- [PARSE_EVENTS__TERM_TYPE_USER ] = "<sysfs term>" ,
745- [PARSE_EVENTS__TERM_TYPE_CONFIG ] = "config" ,
746- [PARSE_EVENTS__TERM_TYPE_CONFIG1 ] = "config1" ,
747- [PARSE_EVENTS__TERM_TYPE_CONFIG2 ] = "config2" ,
748- [PARSE_EVENTS__TERM_TYPE_CONFIG3 ] = "config3" ,
749- [PARSE_EVENTS__TERM_TYPE_NAME ] = "name" ,
750- [PARSE_EVENTS__TERM_TYPE_SAMPLE_PERIOD ] = "period" ,
751- [PARSE_EVENTS__TERM_TYPE_SAMPLE_FREQ ] = "freq" ,
752- [PARSE_EVENTS__TERM_TYPE_BRANCH_SAMPLE_TYPE ] = "branch_type" ,
753- [PARSE_EVENTS__TERM_TYPE_TIME ] = "time" ,
754- [PARSE_EVENTS__TERM_TYPE_CALLGRAPH ] = "call-graph" ,
755- [PARSE_EVENTS__TERM_TYPE_STACKSIZE ] = "stack-size" ,
756- [PARSE_EVENTS__TERM_TYPE_NOINHERIT ] = "no-inherit" ,
757- [PARSE_EVENTS__TERM_TYPE_INHERIT ] = "inherit" ,
758- [PARSE_EVENTS__TERM_TYPE_MAX_STACK ] = "max-stack" ,
759- [PARSE_EVENTS__TERM_TYPE_MAX_EVENTS ] = "nr" ,
760- [PARSE_EVENTS__TERM_TYPE_OVERWRITE ] = "overwrite" ,
761- [PARSE_EVENTS__TERM_TYPE_NOOVERWRITE ] = "no-overwrite" ,
762- [PARSE_EVENTS__TERM_TYPE_DRV_CFG ] = "driver-config" ,
763- [PARSE_EVENTS__TERM_TYPE_PERCORE ] = "percore" ,
764- [PARSE_EVENTS__TERM_TYPE_AUX_OUTPUT ] = "aux-output" ,
765- [PARSE_EVENTS__TERM_TYPE_AUX_SAMPLE_SIZE ] = "aux-sample-size" ,
766- [PARSE_EVENTS__TERM_TYPE_METRIC_ID ] = "metric-id" ,
767- [PARSE_EVENTS__TERM_TYPE_RAW ] = "raw" ,
768- [PARSE_EVENTS__TERM_TYPE_LEGACY_CACHE ] = "legacy-cache" ,
769- [PARSE_EVENTS__TERM_TYPE_HARDWARE ] = "hardware" ,
770- };
771-
772740static bool config_term_shrinked ;
773741
742+ static const char * config_term_name (enum parse_events__term_type term_type )
743+ {
744+ /*
745+ * Update according to parse-events.l
746+ */
747+ static const char * config_term_names [__PARSE_EVENTS__TERM_TYPE_NR ] = {
748+ [PARSE_EVENTS__TERM_TYPE_USER ] = "<sysfs term>" ,
749+ [PARSE_EVENTS__TERM_TYPE_CONFIG ] = "config" ,
750+ [PARSE_EVENTS__TERM_TYPE_CONFIG1 ] = "config1" ,
751+ [PARSE_EVENTS__TERM_TYPE_CONFIG2 ] = "config2" ,
752+ [PARSE_EVENTS__TERM_TYPE_CONFIG3 ] = "config3" ,
753+ [PARSE_EVENTS__TERM_TYPE_NAME ] = "name" ,
754+ [PARSE_EVENTS__TERM_TYPE_SAMPLE_PERIOD ] = "period" ,
755+ [PARSE_EVENTS__TERM_TYPE_SAMPLE_FREQ ] = "freq" ,
756+ [PARSE_EVENTS__TERM_TYPE_BRANCH_SAMPLE_TYPE ] = "branch_type" ,
757+ [PARSE_EVENTS__TERM_TYPE_TIME ] = "time" ,
758+ [PARSE_EVENTS__TERM_TYPE_CALLGRAPH ] = "call-graph" ,
759+ [PARSE_EVENTS__TERM_TYPE_STACKSIZE ] = "stack-size" ,
760+ [PARSE_EVENTS__TERM_TYPE_NOINHERIT ] = "no-inherit" ,
761+ [PARSE_EVENTS__TERM_TYPE_INHERIT ] = "inherit" ,
762+ [PARSE_EVENTS__TERM_TYPE_MAX_STACK ] = "max-stack" ,
763+ [PARSE_EVENTS__TERM_TYPE_MAX_EVENTS ] = "nr" ,
764+ [PARSE_EVENTS__TERM_TYPE_OVERWRITE ] = "overwrite" ,
765+ [PARSE_EVENTS__TERM_TYPE_NOOVERWRITE ] = "no-overwrite" ,
766+ [PARSE_EVENTS__TERM_TYPE_DRV_CFG ] = "driver-config" ,
767+ [PARSE_EVENTS__TERM_TYPE_PERCORE ] = "percore" ,
768+ [PARSE_EVENTS__TERM_TYPE_AUX_OUTPUT ] = "aux-output" ,
769+ [PARSE_EVENTS__TERM_TYPE_AUX_SAMPLE_SIZE ] = "aux-sample-size" ,
770+ [PARSE_EVENTS__TERM_TYPE_METRIC_ID ] = "metric-id" ,
771+ [PARSE_EVENTS__TERM_TYPE_RAW ] = "raw" ,
772+ [PARSE_EVENTS__TERM_TYPE_LEGACY_CACHE ] = "legacy-cache" ,
773+ [PARSE_EVENTS__TERM_TYPE_HARDWARE ] = "hardware" ,
774+ };
775+ if ((unsigned int )term_type >= __PARSE_EVENTS__TERM_TYPE_NR )
776+ return "unknown term" ;
777+
778+ return config_term_names [term_type ];
779+ }
780+
774781static bool
775- config_term_avail (int term_type , struct parse_events_error * err )
782+ config_term_avail (enum parse_events__term_type term_type , struct parse_events_error * err )
776783{
777784 char * err_str ;
778785
@@ -794,13 +801,31 @@ config_term_avail(int term_type, struct parse_events_error *err)
794801 case PARSE_EVENTS__TERM_TYPE_SAMPLE_PERIOD :
795802 case PARSE_EVENTS__TERM_TYPE_PERCORE :
796803 return true;
804+ case PARSE_EVENTS__TERM_TYPE_USER :
805+ case PARSE_EVENTS__TERM_TYPE_SAMPLE_FREQ :
806+ case PARSE_EVENTS__TERM_TYPE_BRANCH_SAMPLE_TYPE :
807+ case PARSE_EVENTS__TERM_TYPE_TIME :
808+ case PARSE_EVENTS__TERM_TYPE_CALLGRAPH :
809+ case PARSE_EVENTS__TERM_TYPE_STACKSIZE :
810+ case PARSE_EVENTS__TERM_TYPE_NOINHERIT :
811+ case PARSE_EVENTS__TERM_TYPE_INHERIT :
812+ case PARSE_EVENTS__TERM_TYPE_MAX_STACK :
813+ case PARSE_EVENTS__TERM_TYPE_MAX_EVENTS :
814+ case PARSE_EVENTS__TERM_TYPE_NOOVERWRITE :
815+ case PARSE_EVENTS__TERM_TYPE_OVERWRITE :
816+ case PARSE_EVENTS__TERM_TYPE_DRV_CFG :
817+ case PARSE_EVENTS__TERM_TYPE_AUX_OUTPUT :
818+ case PARSE_EVENTS__TERM_TYPE_AUX_SAMPLE_SIZE :
819+ case PARSE_EVENTS__TERM_TYPE_RAW :
820+ case PARSE_EVENTS__TERM_TYPE_LEGACY_CACHE :
821+ case PARSE_EVENTS__TERM_TYPE_HARDWARE :
797822 default :
798823 if (!err )
799824 return false;
800825
801826 /* term_type is validated so indexing is safe */
802827 if (asprintf (& err_str , "'%s' is not usable in 'perf stat'" ,
803- config_term_names [ term_type ] ) >= 0 )
828+ config_term_name ( term_type ) ) >= 0 )
804829 parse_events_error__handle (err , -1 , err_str , NULL );
805830 return false;
806831 }
@@ -918,10 +943,14 @@ do { \
918943 return - EINVAL ;
919944 }
920945 break ;
946+ case PARSE_EVENTS__TERM_TYPE_DRV_CFG :
947+ case PARSE_EVENTS__TERM_TYPE_USER :
948+ case PARSE_EVENTS__TERM_TYPE_LEGACY_CACHE :
949+ case PARSE_EVENTS__TERM_TYPE_HARDWARE :
921950 default :
922951 parse_events_error__handle (err , term -> err_term ,
923- strdup ("unknown term" ),
924- parse_events_formats_error_string (NULL ));
952+ strdup (config_term_name ( term -> type_term ) ),
953+ parse_events_formats_error_string (NULL ));
925954 return - EINVAL ;
926955 }
927956
@@ -1007,10 +1036,26 @@ static int config_term_tracepoint(struct perf_event_attr *attr,
10071036 case PARSE_EVENTS__TERM_TYPE_AUX_OUTPUT :
10081037 case PARSE_EVENTS__TERM_TYPE_AUX_SAMPLE_SIZE :
10091038 return config_term_common (attr , term , err );
1039+ case PARSE_EVENTS__TERM_TYPE_USER :
1040+ case PARSE_EVENTS__TERM_TYPE_CONFIG :
1041+ case PARSE_EVENTS__TERM_TYPE_CONFIG1 :
1042+ case PARSE_EVENTS__TERM_TYPE_CONFIG2 :
1043+ case PARSE_EVENTS__TERM_TYPE_CONFIG3 :
1044+ case PARSE_EVENTS__TERM_TYPE_NAME :
1045+ case PARSE_EVENTS__TERM_TYPE_SAMPLE_PERIOD :
1046+ case PARSE_EVENTS__TERM_TYPE_SAMPLE_FREQ :
1047+ case PARSE_EVENTS__TERM_TYPE_BRANCH_SAMPLE_TYPE :
1048+ case PARSE_EVENTS__TERM_TYPE_TIME :
1049+ case PARSE_EVENTS__TERM_TYPE_DRV_CFG :
1050+ case PARSE_EVENTS__TERM_TYPE_PERCORE :
1051+ case PARSE_EVENTS__TERM_TYPE_METRIC_ID :
1052+ case PARSE_EVENTS__TERM_TYPE_RAW :
1053+ case PARSE_EVENTS__TERM_TYPE_LEGACY_CACHE :
1054+ case PARSE_EVENTS__TERM_TYPE_HARDWARE :
10101055 default :
10111056 if (err ) {
10121057 parse_events_error__handle (err , term -> err_term ,
1013- strdup ("unknown term" ),
1058+ strdup (config_term_name ( term -> type_term ) ),
10141059 strdup ("valid terms: call-graph,stack-size\n" ));
10151060 }
10161061 return - EINVAL ;
@@ -1128,6 +1173,16 @@ do { \
11281173 ADD_CONFIG_TERM_VAL (AUX_SAMPLE_SIZE , aux_sample_size ,
11291174 term -> val .num , term -> weak );
11301175 break ;
1176+ case PARSE_EVENTS__TERM_TYPE_USER :
1177+ case PARSE_EVENTS__TERM_TYPE_CONFIG :
1178+ case PARSE_EVENTS__TERM_TYPE_CONFIG1 :
1179+ case PARSE_EVENTS__TERM_TYPE_CONFIG2 :
1180+ case PARSE_EVENTS__TERM_TYPE_CONFIG3 :
1181+ case PARSE_EVENTS__TERM_TYPE_NAME :
1182+ case PARSE_EVENTS__TERM_TYPE_METRIC_ID :
1183+ case PARSE_EVENTS__TERM_TYPE_RAW :
1184+ case PARSE_EVENTS__TERM_TYPE_LEGACY_CACHE :
1185+ case PARSE_EVENTS__TERM_TYPE_HARDWARE :
11311186 default :
11321187 break ;
11331188 }
@@ -1157,6 +1212,30 @@ static int get_config_chgs(struct perf_pmu *pmu, struct list_head *head_config,
11571212 case PARSE_EVENTS__TERM_TYPE_CONFIG :
11581213 bits = ~(u64 )0 ;
11591214 break ;
1215+ case PARSE_EVENTS__TERM_TYPE_CONFIG1 :
1216+ case PARSE_EVENTS__TERM_TYPE_CONFIG2 :
1217+ case PARSE_EVENTS__TERM_TYPE_CONFIG3 :
1218+ case PARSE_EVENTS__TERM_TYPE_NAME :
1219+ case PARSE_EVENTS__TERM_TYPE_SAMPLE_PERIOD :
1220+ case PARSE_EVENTS__TERM_TYPE_SAMPLE_FREQ :
1221+ case PARSE_EVENTS__TERM_TYPE_BRANCH_SAMPLE_TYPE :
1222+ case PARSE_EVENTS__TERM_TYPE_TIME :
1223+ case PARSE_EVENTS__TERM_TYPE_CALLGRAPH :
1224+ case PARSE_EVENTS__TERM_TYPE_STACKSIZE :
1225+ case PARSE_EVENTS__TERM_TYPE_NOINHERIT :
1226+ case PARSE_EVENTS__TERM_TYPE_INHERIT :
1227+ case PARSE_EVENTS__TERM_TYPE_MAX_STACK :
1228+ case PARSE_EVENTS__TERM_TYPE_MAX_EVENTS :
1229+ case PARSE_EVENTS__TERM_TYPE_NOOVERWRITE :
1230+ case PARSE_EVENTS__TERM_TYPE_OVERWRITE :
1231+ case PARSE_EVENTS__TERM_TYPE_DRV_CFG :
1232+ case PARSE_EVENTS__TERM_TYPE_PERCORE :
1233+ case PARSE_EVENTS__TERM_TYPE_AUX_OUTPUT :
1234+ case PARSE_EVENTS__TERM_TYPE_AUX_SAMPLE_SIZE :
1235+ case PARSE_EVENTS__TERM_TYPE_METRIC_ID :
1236+ case PARSE_EVENTS__TERM_TYPE_RAW :
1237+ case PARSE_EVENTS__TERM_TYPE_LEGACY_CACHE :
1238+ case PARSE_EVENTS__TERM_TYPE_HARDWARE :
11601239 default :
11611240 break ;
11621241 }
@@ -2386,7 +2465,8 @@ static int new_term(struct parse_events_term **_term,
23862465}
23872466
23882467int parse_events_term__num (struct parse_events_term * * term ,
2389- int type_term , const char * config , u64 num ,
2468+ enum parse_events__term_type type_term ,
2469+ const char * config , u64 num ,
23902470 bool no_value ,
23912471 void * loc_term_ , void * loc_val_ )
23922472{
@@ -2396,7 +2476,7 @@ int parse_events_term__num(struct parse_events_term **term,
23962476 struct parse_events_term temp = {
23972477 .type_val = PARSE_EVENTS__TERM_TYPE_NUM ,
23982478 .type_term = type_term ,
2399- .config = config ? : strdup (config_term_names [ type_term ] ),
2479+ .config = config ? : strdup (config_term_name ( type_term ) ),
24002480 .no_value = no_value ,
24012481 .err_term = loc_term ? loc_term -> first_column : 0 ,
24022482 .err_val = loc_val ? loc_val -> first_column : 0 ,
@@ -2406,7 +2486,8 @@ int parse_events_term__num(struct parse_events_term **term,
24062486}
24072487
24082488int parse_events_term__str (struct parse_events_term * * term ,
2409- int type_term , char * config , char * str ,
2489+ enum parse_events__term_type type_term ,
2490+ char * config , char * str ,
24102491 void * loc_term_ , void * loc_val_ )
24112492{
24122493 YYLTYPE * loc_term = loc_term_ ;
@@ -2424,11 +2505,12 @@ int parse_events_term__str(struct parse_events_term **term,
24242505}
24252506
24262507int parse_events_term__term (struct parse_events_term * * term ,
2427- int term_lhs , int term_rhs ,
2508+ enum parse_events__term_type term_lhs ,
2509+ enum parse_events__term_type term_rhs ,
24282510 void * loc_term , void * loc_val )
24292511{
24302512 return parse_events_term__str (term , term_lhs , NULL ,
2431- strdup (config_term_names [ term_rhs ] ),
2513+ strdup (config_term_name ( term_rhs ) ),
24322514 loc_term , loc_val );
24332515}
24342516
@@ -2539,7 +2621,7 @@ int parse_events_term__to_strbuf(struct list_head *term_list, struct strbuf *sb)
25392621 if (ret < 0 )
25402622 return ret ;
25412623 } else if (term -> type_term < __PARSE_EVENTS__TERM_TYPE_NR ) {
2542- ret = strbuf_addf (sb , "%s=" , config_term_names [ term -> type_term ] );
2624+ ret = strbuf_addf (sb , "%s=" , config_term_name ( term -> type_term ) );
25432625 if (ret < 0 )
25442626 return ret ;
25452627 }
@@ -2567,7 +2649,7 @@ static void config_terms_list(char *buf, size_t buf_sz)
25672649
25682650 buf [0 ] = '\0' ;
25692651 for (i = 0 ; i < __PARSE_EVENTS__TERM_TYPE_NR ; i ++ ) {
2570- const char * name = config_term_names [ i ] ;
2652+ const char * name = config_term_name ( i ) ;
25712653
25722654 if (!config_term_avail (i , NULL ))
25732655 continue ;
0 commit comments