@@ -153,7 +153,7 @@ const char *event_type(int type)
153
153
return "unknown" ;
154
154
}
155
155
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 )
157
157
{
158
158
struct parse_events_term * term ;
159
159
@@ -722,7 +722,7 @@ int parse_events_add_breakpoint(struct parse_events_state *parse_state,
722
722
723
723
static int check_type_val (struct parse_events_term * term ,
724
724
struct parse_events_error * err ,
725
- int type )
725
+ enum parse_events__term_val_type type )
726
726
{
727
727
if (type == term -> type_val )
728
728
return 0 ;
@@ -737,42 +737,49 @@ static int check_type_val(struct parse_events_term *term,
737
737
return - EINVAL ;
738
738
}
739
739
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
-
772
740
static bool config_term_shrinked ;
773
741
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
+
774
781
static 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 )
776
783
{
777
784
char * err_str ;
778
785
@@ -794,13 +801,31 @@ config_term_avail(int term_type, struct parse_events_error *err)
794
801
case PARSE_EVENTS__TERM_TYPE_SAMPLE_PERIOD :
795
802
case PARSE_EVENTS__TERM_TYPE_PERCORE :
796
803
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 :
797
822
default :
798
823
if (!err )
799
824
return false;
800
825
801
826
/* term_type is validated so indexing is safe */
802
827
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 )
804
829
parse_events_error__handle (err , -1 , err_str , NULL );
805
830
return false;
806
831
}
@@ -918,10 +943,14 @@ do { \
918
943
return - EINVAL ;
919
944
}
920
945
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 :
921
950
default :
922
951
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 ));
925
954
return - EINVAL ;
926
955
}
927
956
@@ -1007,10 +1036,26 @@ static int config_term_tracepoint(struct perf_event_attr *attr,
1007
1036
case PARSE_EVENTS__TERM_TYPE_AUX_OUTPUT :
1008
1037
case PARSE_EVENTS__TERM_TYPE_AUX_SAMPLE_SIZE :
1009
1038
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 :
1010
1055
default :
1011
1056
if (err ) {
1012
1057
parse_events_error__handle (err , term -> err_term ,
1013
- strdup ("unknown term" ),
1058
+ strdup (config_term_name ( term -> type_term ) ),
1014
1059
strdup ("valid terms: call-graph,stack-size\n" ));
1015
1060
}
1016
1061
return - EINVAL ;
@@ -1128,6 +1173,16 @@ do { \
1128
1173
ADD_CONFIG_TERM_VAL (AUX_SAMPLE_SIZE , aux_sample_size ,
1129
1174
term -> val .num , term -> weak );
1130
1175
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 :
1131
1186
default :
1132
1187
break ;
1133
1188
}
@@ -1157,6 +1212,30 @@ static int get_config_chgs(struct perf_pmu *pmu, struct list_head *head_config,
1157
1212
case PARSE_EVENTS__TERM_TYPE_CONFIG :
1158
1213
bits = ~(u64 )0 ;
1159
1214
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 :
1160
1239
default :
1161
1240
break ;
1162
1241
}
@@ -2386,7 +2465,8 @@ static int new_term(struct parse_events_term **_term,
2386
2465
}
2387
2466
2388
2467
int 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 ,
2390
2470
bool no_value ,
2391
2471
void * loc_term_ , void * loc_val_ )
2392
2472
{
@@ -2396,7 +2476,7 @@ int parse_events_term__num(struct parse_events_term **term,
2396
2476
struct parse_events_term temp = {
2397
2477
.type_val = PARSE_EVENTS__TERM_TYPE_NUM ,
2398
2478
.type_term = type_term ,
2399
- .config = config ? : strdup (config_term_names [ type_term ] ),
2479
+ .config = config ? : strdup (config_term_name ( type_term ) ),
2400
2480
.no_value = no_value ,
2401
2481
.err_term = loc_term ? loc_term -> first_column : 0 ,
2402
2482
.err_val = loc_val ? loc_val -> first_column : 0 ,
@@ -2406,7 +2486,8 @@ int parse_events_term__num(struct parse_events_term **term,
2406
2486
}
2407
2487
2408
2488
int 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 ,
2410
2491
void * loc_term_ , void * loc_val_ )
2411
2492
{
2412
2493
YYLTYPE * loc_term = loc_term_ ;
@@ -2424,11 +2505,12 @@ int parse_events_term__str(struct parse_events_term **term,
2424
2505
}
2425
2506
2426
2507
int 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 ,
2428
2510
void * loc_term , void * loc_val )
2429
2511
{
2430
2512
return parse_events_term__str (term , term_lhs , NULL ,
2431
- strdup (config_term_names [ term_rhs ] ),
2513
+ strdup (config_term_name ( term_rhs ) ),
2432
2514
loc_term , loc_val );
2433
2515
}
2434
2516
@@ -2539,7 +2621,7 @@ int parse_events_term__to_strbuf(struct list_head *term_list, struct strbuf *sb)
2539
2621
if (ret < 0 )
2540
2622
return ret ;
2541
2623
} 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 ) );
2543
2625
if (ret < 0 )
2544
2626
return ret ;
2545
2627
}
@@ -2567,7 +2649,7 @@ static void config_terms_list(char *buf, size_t buf_sz)
2567
2649
2568
2650
buf [0 ] = '\0' ;
2569
2651
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 ) ;
2571
2653
2572
2654
if (!config_term_avail (i , NULL ))
2573
2655
continue ;
0 commit comments