2020#define PERF_TP_SAMPLE_TYPE (PERF_SAMPLE_RAW | PERF_SAMPLE_TIME | \
2121 PERF_SAMPLE_CPU | PERF_SAMPLE_PERIOD)
2222
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+
2337static bool test_config (const struct evsel * evsel , __u64 expected_config )
2438{
2539 __u32 type = evsel -> core .attr .type ;
@@ -339,7 +353,7 @@ static int test__checkevent_symbolic_name_modifier(struct evlist *evlist)
339353 struct perf_evsel * evsel ;
340354
341355 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 ());
343357
344358 perf_evlist__for_each_entry (& evlist -> core , evsel ) {
345359 TEST_ASSERT_VAL ("wrong exclude_user" , evsel -> attr .exclude_user );
@@ -842,11 +856,11 @@ static int test__group1(struct evlist *evlist)
842856 struct evsel * evsel , * leader ;
843857
844858 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 ));
846860 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 ());
848862
849- for (int i = 0 ; i < perf_pmus__num_core_pmus (); i ++ ) {
863+ for (int i = 0 ; i < num_core_entries (); i ++ ) {
850864 /* instructions:k */
851865 evsel = leader = (i == 0 ? evlist__first (evlist ) : evsel__next (evsel ));
852866 TEST_ASSERT_VAL ("wrong type" , PERF_TYPE_HARDWARE == evsel -> core .attr .type );
@@ -885,7 +899,7 @@ static int test__group2(struct evlist *evlist)
885899 struct evsel * evsel , * leader = NULL ;
886900
887901 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 ));
889903 /*
890904 * TODO: Currently the software event won't be grouped with the hardware
891905 * event except for 1 PMU.
@@ -1051,11 +1065,11 @@ static int test__group4(struct evlist *evlist __maybe_unused)
10511065 struct evsel * evsel , * leader ;
10521066
10531067 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 ));
10551069 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 ));
10571071
1058- for (int i = 0 ; i < perf_pmus__num_core_pmus (); i ++ ) {
1072+ for (int i = 0 ; i < num_core_entries (); i ++ ) {
10591073 /* cycles:u + p */
10601074 evsel = leader = (i == 0 ? evlist__first (evlist ) : evsel__next (evsel ));
10611075 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)
10961110 struct evsel * evsel = NULL , * leader ;
10971111
10981112 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 ()));
11001114 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 ()));
11021116
1103- for (int i = 0 ; i < perf_pmus__num_core_pmus (); i ++ ) {
1117+ for (int i = 0 ; i < num_core_entries (); i ++ ) {
11041118 /* cycles + G */
11051119 evsel = leader = (i == 0 ? evlist__first (evlist ) : evsel__next (evsel ));
11061120 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)
11311145 TEST_ASSERT_VAL ("wrong group_idx" , evsel__group_idx (evsel ) == 1 );
11321146 TEST_ASSERT_VAL ("wrong sample_read" , !evsel -> sample_read );
11331147 }
1134- for (int i = 0 ; i < perf_pmus__num_core_pmus (); i ++ ) {
1148+ for (int i = 0 ; i < num_core_entries (); i ++ ) {
11351149 /* cycles:G */
11361150 evsel = leader = evsel__next (evsel );
11371151 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)
11611175 TEST_ASSERT_VAL ("wrong leader" , evsel__has_leader (evsel , leader ));
11621176 TEST_ASSERT_VAL ("wrong group_idx" , evsel__group_idx (evsel ) == 1 );
11631177 }
1164- for (int i = 0 ; i < perf_pmus__num_core_pmus (); i ++ ) {
1178+ for (int i = 0 ; i < num_core_entries (); i ++ ) {
11651179 /* cycles */
11661180 evsel = evsel__next (evsel );
11671181 TEST_ASSERT_VAL ("wrong type" , PERF_TYPE_HARDWARE == evsel -> core .attr .type );
@@ -1182,11 +1196,11 @@ static int test__group_gh1(struct evlist *evlist)
11821196 struct evsel * evsel = NULL , * leader ;
11831197
11841198 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 ()));
11861200 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 ());
11881202
1189- for (int i = 0 ; i < perf_pmus__num_core_pmus (); i ++ ) {
1203+ for (int i = 0 ; i < num_core_entries (); i ++ ) {
11901204 /* cycles + :H group modifier */
11911205 evsel = leader = (i == 0 ? evlist__first (evlist ) : evsel__next (evsel ));
11921206 TEST_ASSERT_VAL ("wrong type" , PERF_TYPE_HARDWARE == evsel -> core .attr .type );
@@ -1223,11 +1237,11 @@ static int test__group_gh2(struct evlist *evlist)
12231237 struct evsel * evsel = NULL , * leader ;
12241238
12251239 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 ()));
12271241 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 ());
12291243
1230- for (int i = 0 ; i < perf_pmus__num_core_pmus (); i ++ ) {
1244+ for (int i = 0 ; i < num_core_entries (); i ++ ) {
12311245 /* cycles + :G group modifier */
12321246 evsel = leader = (i == 0 ? evlist__first (evlist ) : evsel__next (evsel ));
12331247 TEST_ASSERT_VAL ("wrong type" , PERF_TYPE_HARDWARE == evsel -> core .attr .type );
@@ -1264,11 +1278,11 @@ static int test__group_gh3(struct evlist *evlist)
12641278 struct evsel * evsel = NULL , * leader ;
12651279
12661280 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 ()));
12681282 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 ());
12701284
1271- for (int i = 0 ; i < perf_pmus__num_core_pmus (); i ++ ) {
1285+ for (int i = 0 ; i < num_core_entries (); i ++ ) {
12721286 /* cycles:G + :u group modifier */
12731287 evsel = leader = (i == 0 ? evlist__first (evlist ) : evsel__next (evsel ));
12741288 TEST_ASSERT_VAL ("wrong type" , PERF_TYPE_HARDWARE == evsel -> core .attr .type );
@@ -1305,11 +1319,11 @@ static int test__group_gh4(struct evlist *evlist)
13051319 struct evsel * evsel = NULL , * leader ;
13061320
13071321 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 ()));
13091323 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 ());
13111325
1312- for (int i = 0 ; i < perf_pmus__num_core_pmus (); i ++ ) {
1326+ for (int i = 0 ; i < num_core_entries (); i ++ ) {
13131327 /* cycles:G + :uG group modifier */
13141328 evsel = leader = (i == 0 ? evlist__first (evlist ) : evsel__next (evsel ));
13151329 TEST_ASSERT_VAL ("wrong type" , PERF_TYPE_HARDWARE == evsel -> core .attr .type );
@@ -1346,9 +1360,9 @@ static int test__leader_sample1(struct evlist *evlist)
13461360 struct evsel * evsel = NULL , * leader ;
13471361
13481362 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 ()));
13501364
1351- for (int i = 0 ; i < perf_pmus__num_core_pmus (); i ++ ) {
1365+ for (int i = 0 ; i < num_core_entries (); i ++ ) {
13521366 /* cycles - sampling group leader */
13531367 evsel = leader = (i == 0 ? evlist__first (evlist ) : evsel__next (evsel ));
13541368 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)
13981412 struct evsel * evsel = NULL , * leader ;
13991413
14001414 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 ()));
14021416
1403- for (int i = 0 ; i < perf_pmus__num_core_pmus (); i ++ ) {
1417+ for (int i = 0 ; i < num_core_entries (); i ++ ) {
14041418 /* instructions - sampling group leader */
14051419 evsel = leader = (i == 0 ? evlist__first (evlist ) : evsel__next (evsel ));
14061420 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)
14371451 struct evsel * evsel = NULL ;
14381452
14391453 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 ());
14411455
1442- for (int i = 0 ; i < perf_pmus__num_core_pmus (); i ++ ) {
1456+ for (int i = 0 ; i < num_core_entries (); i ++ ) {
14431457 evsel = (i == 0 ? evlist__first (evlist ) : evsel__next (evsel ));
14441458 TEST_ASSERT_VAL ("wrong exclude_user" , !evsel -> core .attr .exclude_user );
14451459 TEST_ASSERT_VAL ("wrong exclude_kernel" , evsel -> core .attr .exclude_kernel );
@@ -1455,9 +1469,9 @@ static int test__pinned_group(struct evlist *evlist)
14551469 struct evsel * evsel = NULL , * leader ;
14561470
14571471 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 ()));
14591473
1460- for (int i = 0 ; i < perf_pmus__num_core_pmus (); i ++ ) {
1474+ for (int i = 0 ; i < num_core_entries (); i ++ ) {
14611475 /* cycles - group leader */
14621476 evsel = leader = (i == 0 ? evlist__first (evlist ) : evsel__next (evsel ));
14631477 TEST_ASSERT_VAL ("wrong type" , PERF_TYPE_HARDWARE == evsel -> core .attr .type );
@@ -1500,9 +1514,9 @@ static int test__exclusive_group(struct evlist *evlist)
15001514 struct evsel * evsel = NULL , * leader ;
15011515
15021516 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 ( ));
15041518
1505- for (int i = 0 ; i < perf_pmus__num_core_pmus (); i ++ ) {
1519+ for (int i = 0 ; i < num_core_entries (); i ++ ) {
15061520 /* cycles - group leader */
15071521 evsel = leader = (i == 0 ? evlist__first (evlist ) : evsel__next (evsel ));
15081522 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)
15741588 struct evsel * evsel = evlist__first (evlist );
15751589
15761590 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 ( ));
15781592 TEST_ASSERT_VAL ("wrong type" , PERF_TYPE_SOFTWARE == evsel -> core .attr .type );
15791593 TEST_ASSERT_VAL ("wrong config" , test_config (evsel , PERF_COUNT_SW_TASK_CLOCK ));
15801594 return TEST_OK ;
0 commit comments