20
20
#define PERF_TP_SAMPLE_TYPE (PERF_SAMPLE_RAW | PERF_SAMPLE_TIME | \
21
21
PERF_SAMPLE_CPU | PERF_SAMPLE_PERIOD)
22
22
23
+ static int num_core_entries (void )
24
+ {
25
+ /*
26
+ * If the kernel supports extended type, expect events to be
27
+ * opened once for each core PMU type. Otherwise fall back to the legacy
28
+ * behavior of opening only one event even though there are multiple
29
+ * PMUs
30
+ */
31
+ if (perf_pmus__supports_extended_type ())
32
+ return perf_pmus__num_core_pmus ();
33
+
34
+ return 1 ;
35
+ }
36
+
23
37
static bool test_config (const struct evsel * evsel , __u64 expected_config )
24
38
{
25
39
__u32 type = evsel -> core .attr .type ;
@@ -339,7 +353,7 @@ static int test__checkevent_symbolic_name_modifier(struct evlist *evlist)
339
353
struct perf_evsel * evsel ;
340
354
341
355
TEST_ASSERT_VAL ("wrong number of entries" ,
342
- evlist -> core .nr_entries == perf_pmus__num_core_pmus ());
356
+ evlist -> core .nr_entries == num_core_entries ());
343
357
344
358
perf_evlist__for_each_entry (& evlist -> core , evsel ) {
345
359
TEST_ASSERT_VAL ("wrong exclude_user" , evsel -> attr .exclude_user );
@@ -842,11 +856,11 @@ static int test__group1(struct evlist *evlist)
842
856
struct evsel * evsel , * leader ;
843
857
844
858
TEST_ASSERT_VAL ("wrong number of entries" ,
845
- evlist -> core .nr_entries == (perf_pmus__num_core_pmus () * 2 ));
859
+ evlist -> core .nr_entries == (num_core_entries () * 2 ));
846
860
TEST_ASSERT_VAL ("wrong number of groups" ,
847
- evlist__nr_groups (evlist ) == perf_pmus__num_core_pmus ());
861
+ evlist__nr_groups (evlist ) == num_core_entries ());
848
862
849
- for (int i = 0 ; i < perf_pmus__num_core_pmus (); i ++ ) {
863
+ for (int i = 0 ; i < num_core_entries (); i ++ ) {
850
864
/* instructions:k */
851
865
evsel = leader = (i == 0 ? evlist__first (evlist ) : evsel__next (evsel ));
852
866
TEST_ASSERT_VAL ("wrong type" , PERF_TYPE_HARDWARE == evsel -> core .attr .type );
@@ -885,7 +899,7 @@ static int test__group2(struct evlist *evlist)
885
899
struct evsel * evsel , * leader = NULL ;
886
900
887
901
TEST_ASSERT_VAL ("wrong number of entries" ,
888
- evlist -> core .nr_entries == (2 * perf_pmus__num_core_pmus () + 1 ));
902
+ evlist -> core .nr_entries == (2 * num_core_entries () + 1 ));
889
903
/*
890
904
* TODO: Currently the software event won't be grouped with the hardware
891
905
* event except for 1 PMU.
@@ -1051,11 +1065,11 @@ static int test__group4(struct evlist *evlist __maybe_unused)
1051
1065
struct evsel * evsel , * leader ;
1052
1066
1053
1067
TEST_ASSERT_VAL ("wrong number of entries" ,
1054
- evlist -> core .nr_entries == (perf_pmus__num_core_pmus () * 2 ));
1068
+ evlist -> core .nr_entries == (num_core_entries () * 2 ));
1055
1069
TEST_ASSERT_VAL ("wrong number of groups" ,
1056
- perf_pmus__num_core_pmus () == evlist__nr_groups (evlist ));
1070
+ num_core_entries () == evlist__nr_groups (evlist ));
1057
1071
1058
- for (int i = 0 ; i < perf_pmus__num_core_pmus (); i ++ ) {
1072
+ for (int i = 0 ; i < num_core_entries (); i ++ ) {
1059
1073
/* cycles:u + p */
1060
1074
evsel = leader = (i == 0 ? evlist__first (evlist ) : evsel__next (evsel ));
1061
1075
TEST_ASSERT_VAL ("wrong type" , PERF_TYPE_HARDWARE == evsel -> core .attr .type );
@@ -1096,11 +1110,11 @@ static int test__group5(struct evlist *evlist __maybe_unused)
1096
1110
struct evsel * evsel = NULL , * leader ;
1097
1111
1098
1112
TEST_ASSERT_VAL ("wrong number of entries" ,
1099
- evlist -> core .nr_entries == (5 * perf_pmus__num_core_pmus ()));
1113
+ evlist -> core .nr_entries == (5 * num_core_entries ()));
1100
1114
TEST_ASSERT_VAL ("wrong number of groups" ,
1101
- evlist__nr_groups (evlist ) == (2 * perf_pmus__num_core_pmus ()));
1115
+ evlist__nr_groups (evlist ) == (2 * num_core_entries ()));
1102
1116
1103
- for (int i = 0 ; i < perf_pmus__num_core_pmus (); i ++ ) {
1117
+ for (int i = 0 ; i < num_core_entries (); i ++ ) {
1104
1118
/* cycles + G */
1105
1119
evsel = leader = (i == 0 ? evlist__first (evlist ) : evsel__next (evsel ));
1106
1120
TEST_ASSERT_VAL ("wrong type" , PERF_TYPE_HARDWARE == evsel -> core .attr .type );
@@ -1131,7 +1145,7 @@ static int test__group5(struct evlist *evlist __maybe_unused)
1131
1145
TEST_ASSERT_VAL ("wrong group_idx" , evsel__group_idx (evsel ) == 1 );
1132
1146
TEST_ASSERT_VAL ("wrong sample_read" , !evsel -> sample_read );
1133
1147
}
1134
- for (int i = 0 ; i < perf_pmus__num_core_pmus (); i ++ ) {
1148
+ for (int i = 0 ; i < num_core_entries (); i ++ ) {
1135
1149
/* cycles:G */
1136
1150
evsel = leader = evsel__next (evsel );
1137
1151
TEST_ASSERT_VAL ("wrong type" , PERF_TYPE_HARDWARE == evsel -> core .attr .type );
@@ -1161,7 +1175,7 @@ static int test__group5(struct evlist *evlist __maybe_unused)
1161
1175
TEST_ASSERT_VAL ("wrong leader" , evsel__has_leader (evsel , leader ));
1162
1176
TEST_ASSERT_VAL ("wrong group_idx" , evsel__group_idx (evsel ) == 1 );
1163
1177
}
1164
- for (int i = 0 ; i < perf_pmus__num_core_pmus (); i ++ ) {
1178
+ for (int i = 0 ; i < num_core_entries (); i ++ ) {
1165
1179
/* cycles */
1166
1180
evsel = evsel__next (evsel );
1167
1181
TEST_ASSERT_VAL ("wrong type" , PERF_TYPE_HARDWARE == evsel -> core .attr .type );
@@ -1182,11 +1196,11 @@ static int test__group_gh1(struct evlist *evlist)
1182
1196
struct evsel * evsel = NULL , * leader ;
1183
1197
1184
1198
TEST_ASSERT_VAL ("wrong number of entries" ,
1185
- evlist -> core .nr_entries == (2 * perf_pmus__num_core_pmus ()));
1199
+ evlist -> core .nr_entries == (2 * num_core_entries ()));
1186
1200
TEST_ASSERT_VAL ("wrong number of groups" ,
1187
- evlist__nr_groups (evlist ) == perf_pmus__num_core_pmus ());
1201
+ evlist__nr_groups (evlist ) == num_core_entries ());
1188
1202
1189
- for (int i = 0 ; i < perf_pmus__num_core_pmus (); i ++ ) {
1203
+ for (int i = 0 ; i < num_core_entries (); i ++ ) {
1190
1204
/* cycles + :H group modifier */
1191
1205
evsel = leader = (i == 0 ? evlist__first (evlist ) : evsel__next (evsel ));
1192
1206
TEST_ASSERT_VAL ("wrong type" , PERF_TYPE_HARDWARE == evsel -> core .attr .type );
@@ -1223,11 +1237,11 @@ static int test__group_gh2(struct evlist *evlist)
1223
1237
struct evsel * evsel = NULL , * leader ;
1224
1238
1225
1239
TEST_ASSERT_VAL ("wrong number of entries" ,
1226
- evlist -> core .nr_entries == (2 * perf_pmus__num_core_pmus ()));
1240
+ evlist -> core .nr_entries == (2 * num_core_entries ()));
1227
1241
TEST_ASSERT_VAL ("wrong number of groups" ,
1228
- evlist__nr_groups (evlist ) == perf_pmus__num_core_pmus ());
1242
+ evlist__nr_groups (evlist ) == num_core_entries ());
1229
1243
1230
- for (int i = 0 ; i < perf_pmus__num_core_pmus (); i ++ ) {
1244
+ for (int i = 0 ; i < num_core_entries (); i ++ ) {
1231
1245
/* cycles + :G group modifier */
1232
1246
evsel = leader = (i == 0 ? evlist__first (evlist ) : evsel__next (evsel ));
1233
1247
TEST_ASSERT_VAL ("wrong type" , PERF_TYPE_HARDWARE == evsel -> core .attr .type );
@@ -1264,11 +1278,11 @@ static int test__group_gh3(struct evlist *evlist)
1264
1278
struct evsel * evsel = NULL , * leader ;
1265
1279
1266
1280
TEST_ASSERT_VAL ("wrong number of entries" ,
1267
- evlist -> core .nr_entries == (2 * perf_pmus__num_core_pmus ()));
1281
+ evlist -> core .nr_entries == (2 * num_core_entries ()));
1268
1282
TEST_ASSERT_VAL ("wrong number of groups" ,
1269
- evlist__nr_groups (evlist ) == perf_pmus__num_core_pmus ());
1283
+ evlist__nr_groups (evlist ) == num_core_entries ());
1270
1284
1271
- for (int i = 0 ; i < perf_pmus__num_core_pmus (); i ++ ) {
1285
+ for (int i = 0 ; i < num_core_entries (); i ++ ) {
1272
1286
/* cycles:G + :u group modifier */
1273
1287
evsel = leader = (i == 0 ? evlist__first (evlist ) : evsel__next (evsel ));
1274
1288
TEST_ASSERT_VAL ("wrong type" , PERF_TYPE_HARDWARE == evsel -> core .attr .type );
@@ -1305,11 +1319,11 @@ static int test__group_gh4(struct evlist *evlist)
1305
1319
struct evsel * evsel = NULL , * leader ;
1306
1320
1307
1321
TEST_ASSERT_VAL ("wrong number of entries" ,
1308
- evlist -> core .nr_entries == (2 * perf_pmus__num_core_pmus ()));
1322
+ evlist -> core .nr_entries == (2 * num_core_entries ()));
1309
1323
TEST_ASSERT_VAL ("wrong number of groups" ,
1310
- evlist__nr_groups (evlist ) == perf_pmus__num_core_pmus ());
1324
+ evlist__nr_groups (evlist ) == num_core_entries ());
1311
1325
1312
- for (int i = 0 ; i < perf_pmus__num_core_pmus (); i ++ ) {
1326
+ for (int i = 0 ; i < num_core_entries (); i ++ ) {
1313
1327
/* cycles:G + :uG group modifier */
1314
1328
evsel = leader = (i == 0 ? evlist__first (evlist ) : evsel__next (evsel ));
1315
1329
TEST_ASSERT_VAL ("wrong type" , PERF_TYPE_HARDWARE == evsel -> core .attr .type );
@@ -1346,9 +1360,9 @@ static int test__leader_sample1(struct evlist *evlist)
1346
1360
struct evsel * evsel = NULL , * leader ;
1347
1361
1348
1362
TEST_ASSERT_VAL ("wrong number of entries" ,
1349
- evlist -> core .nr_entries == (3 * perf_pmus__num_core_pmus ()));
1363
+ evlist -> core .nr_entries == (3 * num_core_entries ()));
1350
1364
1351
- for (int i = 0 ; i < perf_pmus__num_core_pmus (); i ++ ) {
1365
+ for (int i = 0 ; i < num_core_entries (); i ++ ) {
1352
1366
/* cycles - sampling group leader */
1353
1367
evsel = leader = (i == 0 ? evlist__first (evlist ) : evsel__next (evsel ));
1354
1368
TEST_ASSERT_VAL ("wrong type" , PERF_TYPE_HARDWARE == evsel -> core .attr .type );
@@ -1398,9 +1412,9 @@ static int test__leader_sample2(struct evlist *evlist __maybe_unused)
1398
1412
struct evsel * evsel = NULL , * leader ;
1399
1413
1400
1414
TEST_ASSERT_VAL ("wrong number of entries" ,
1401
- evlist -> core .nr_entries == (2 * perf_pmus__num_core_pmus ()));
1415
+ evlist -> core .nr_entries == (2 * num_core_entries ()));
1402
1416
1403
- for (int i = 0 ; i < perf_pmus__num_core_pmus (); i ++ ) {
1417
+ for (int i = 0 ; i < num_core_entries (); i ++ ) {
1404
1418
/* instructions - sampling group leader */
1405
1419
evsel = leader = (i == 0 ? evlist__first (evlist ) : evsel__next (evsel ));
1406
1420
TEST_ASSERT_VAL ("wrong type" , PERF_TYPE_HARDWARE == evsel -> core .attr .type );
@@ -1437,9 +1451,9 @@ static int test__checkevent_pinned_modifier(struct evlist *evlist)
1437
1451
struct evsel * evsel = NULL ;
1438
1452
1439
1453
TEST_ASSERT_VAL ("wrong number of entries" ,
1440
- evlist -> core .nr_entries == perf_pmus__num_core_pmus ());
1454
+ evlist -> core .nr_entries == num_core_entries ());
1441
1455
1442
- for (int i = 0 ; i < perf_pmus__num_core_pmus (); i ++ ) {
1456
+ for (int i = 0 ; i < num_core_entries (); i ++ ) {
1443
1457
evsel = (i == 0 ? evlist__first (evlist ) : evsel__next (evsel ));
1444
1458
TEST_ASSERT_VAL ("wrong exclude_user" , !evsel -> core .attr .exclude_user );
1445
1459
TEST_ASSERT_VAL ("wrong exclude_kernel" , evsel -> core .attr .exclude_kernel );
@@ -1455,9 +1469,9 @@ static int test__pinned_group(struct evlist *evlist)
1455
1469
struct evsel * evsel = NULL , * leader ;
1456
1470
1457
1471
TEST_ASSERT_VAL ("wrong number of entries" ,
1458
- evlist -> core .nr_entries == (3 * perf_pmus__num_core_pmus ()));
1472
+ evlist -> core .nr_entries == (3 * num_core_entries ()));
1459
1473
1460
- for (int i = 0 ; i < perf_pmus__num_core_pmus (); i ++ ) {
1474
+ for (int i = 0 ; i < num_core_entries (); i ++ ) {
1461
1475
/* cycles - group leader */
1462
1476
evsel = leader = (i == 0 ? evlist__first (evlist ) : evsel__next (evsel ));
1463
1477
TEST_ASSERT_VAL ("wrong type" , PERF_TYPE_HARDWARE == evsel -> core .attr .type );
@@ -1500,9 +1514,9 @@ static int test__exclusive_group(struct evlist *evlist)
1500
1514
struct evsel * evsel = NULL , * leader ;
1501
1515
1502
1516
TEST_ASSERT_VAL ("wrong number of entries" ,
1503
- evlist -> core .nr_entries == ( 3 * perf_pmus__num_core_pmus () ));
1517
+ evlist -> core .nr_entries == 3 * num_core_entries ( ));
1504
1518
1505
- for (int i = 0 ; i < perf_pmus__num_core_pmus (); i ++ ) {
1519
+ for (int i = 0 ; i < num_core_entries (); i ++ ) {
1506
1520
/* cycles - group leader */
1507
1521
evsel = leader = (i == 0 ? evlist__first (evlist ) : evsel__next (evsel ));
1508
1522
TEST_ASSERT_VAL ("wrong type" , PERF_TYPE_HARDWARE == evsel -> core .attr .type );
@@ -1574,7 +1588,7 @@ static int test__checkevent_precise_max_modifier(struct evlist *evlist)
1574
1588
struct evsel * evsel = evlist__first (evlist );
1575
1589
1576
1590
TEST_ASSERT_VAL ("wrong number of entries" ,
1577
- evlist -> core .nr_entries == ( 1 + perf_pmus__num_core_pmus () ));
1591
+ evlist -> core .nr_entries == 1 + num_core_entries ( ));
1578
1592
TEST_ASSERT_VAL ("wrong type" , PERF_TYPE_SOFTWARE == evsel -> core .attr .type );
1579
1593
TEST_ASSERT_VAL ("wrong config" , test_config (evsel , PERF_COUNT_SW_TASK_CLOCK ));
1580
1594
return TEST_OK ;
0 commit comments