@@ -423,84 +423,104 @@ static int compare_alias_to_test_event(struct perf_pmu_alias *alias,
423
423
return 0 ;
424
424
}
425
425
426
- /* Verify generated events from pmu-events.c are as expected */
427
- static int test__pmu_event_table ( struct test_suite * test __maybe_unused ,
428
- int subtest __maybe_unused )
426
+ static int test__pmu_event_table_core_callback ( const struct pmu_event * pe ,
427
+ const struct pmu_event * table __maybe_unused ,
428
+ void * data )
429
429
{
430
- const struct pmu_event * sys_event_tables = find_sys_events_table ( "pme_test_soc_sys" ) ;
431
- const struct pmu_event * table = find_core_events_table ( "testarch" , "testcpu" ) ;
432
- int map_events = 0 , expected_events ;
430
+ int * map_events = data ;
431
+ struct perf_pmu_test_event const * * test_event_table ;
432
+ bool found = false ;
433
433
434
- /* ignore 3x sentinels */
435
- expected_events = ARRAY_SIZE (core_events ) +
436
- ARRAY_SIZE (uncore_events ) +
437
- ARRAY_SIZE (sys_events ) - 3 ;
434
+ if (!pe -> name )
435
+ return 0 ;
438
436
439
- if (!table || !sys_event_tables )
440
- return -1 ;
437
+ if (pe -> pmu )
438
+ test_event_table = & uncore_events [0 ];
439
+ else
440
+ test_event_table = & core_events [0 ];
441
441
442
- for (; table -> name ; table ++ ) {
443
- struct perf_pmu_test_event const * * test_event_table ;
444
- bool found = false ;
442
+ for (; * test_event_table ; test_event_table ++ ) {
443
+ struct perf_pmu_test_event const * test_event = * test_event_table ;
444
+ struct pmu_event const * event = & test_event -> event ;
445
445
446
- if (table -> pmu )
447
- test_event_table = & uncore_events [ 0 ] ;
448
- else
449
- test_event_table = & core_events [ 0 ] ;
446
+ if (strcmp ( pe -> name , event -> name ) )
447
+ continue ;
448
+ found = true;
449
+ ( * map_events ) ++ ;
450
450
451
- for (; * test_event_table ; test_event_table ++ ) {
452
- struct perf_pmu_test_event const * test_event = * test_event_table ;
453
- struct pmu_event const * event = & test_event -> event ;
451
+ if (compare_pmu_events (pe , event ))
452
+ return -1 ;
454
453
455
- if (strcmp (table -> name , event -> name ))
456
- continue ;
457
- found = true;
458
- map_events ++ ;
454
+ pr_debug ("testing event table %s: pass\n" , pe -> name );
455
+ }
456
+ if (!found ) {
457
+ pr_err ("testing event table: could not find event %s\n" , pe -> name );
458
+ return -1 ;
459
+ }
460
+ return 0 ;
461
+ }
459
462
460
- if (compare_pmu_events (table , event ))
461
- return -1 ;
463
+ static int test__pmu_event_table_sys_callback (const struct pmu_event * pe ,
464
+ const struct pmu_event * table __maybe_unused ,
465
+ void * data )
466
+ {
467
+ int * map_events = data ;
468
+ struct perf_pmu_test_event const * * test_event_table ;
469
+ bool found = false;
462
470
463
- pr_debug ("testing event table %s: pass\n" , table -> name );
464
- }
471
+ test_event_table = & sys_events [0 ];
465
472
466
- if (!found ) {
467
- pr_err ("testing event table: could not find event %s\n" ,
468
- table -> name );
469
- return -1 ;
470
- }
471
- }
473
+ for (; * test_event_table ; test_event_table ++ ) {
474
+ struct perf_pmu_test_event const * test_event = * test_event_table ;
475
+ struct pmu_event const * event = & test_event -> event ;
472
476
473
- for (table = sys_event_tables ; table -> name ; table ++ ) {
474
- struct perf_pmu_test_event const * * test_event_table ;
475
- bool found = false;
477
+ if (strcmp (pe -> name , event -> name ))
478
+ continue ;
479
+ found = true;
480
+ (* map_events )++ ;
476
481
477
- test_event_table = & sys_events [0 ];
482
+ if (compare_pmu_events (pe , event ))
483
+ return TEST_FAIL ;
478
484
479
- for (; * test_event_table ; test_event_table ++ ) {
480
- struct perf_pmu_test_event const * test_event = * test_event_table ;
481
- struct pmu_event const * event = & test_event -> event ;
485
+ pr_debug ("testing sys event table %s: pass\n" , pe -> name );
486
+ }
487
+ if (!found ) {
488
+ pr_debug ("testing sys event table: could not find event %s\n" , pe -> name );
489
+ return TEST_FAIL ;
490
+ }
491
+ return TEST_OK ;
492
+ }
482
493
483
- if (strcmp (table -> name , event -> name ))
484
- continue ;
485
- found = true;
486
- map_events ++ ;
494
+ /* Verify generated events from pmu-events.c are as expected */
495
+ static int test__pmu_event_table (struct test_suite * test __maybe_unused ,
496
+ int subtest __maybe_unused )
497
+ {
498
+ const struct pmu_event * sys_event_table = find_sys_events_table ("pme_test_soc_sys" );
499
+ const struct pmu_event * table = find_core_events_table ("testarch" , "testcpu" );
500
+ int map_events = 0 , expected_events , err ;
487
501
488
- if (compare_pmu_events (table , event ))
489
- return -1 ;
502
+ /* ignore 3x sentinels */
503
+ expected_events = ARRAY_SIZE (core_events ) +
504
+ ARRAY_SIZE (uncore_events ) +
505
+ ARRAY_SIZE (sys_events ) - 3 ;
490
506
491
- pr_debug ("testing sys event table %s: pass\n" , table -> name );
492
- }
493
- if (!found ) {
494
- pr_debug ("testing event table: could not find event %s\n" ,
495
- table -> name );
496
- return -1 ;
497
- }
498
- }
507
+ if (!table || !sys_event_table )
508
+ return -1 ;
509
+
510
+ err = pmu_events_table_for_each_event (table , test__pmu_event_table_core_callback ,
511
+ & map_events );
512
+ if (err )
513
+ return err ;
514
+
515
+ err = pmu_events_table_for_each_event (sys_event_table , test__pmu_event_table_sys_callback ,
516
+ & map_events );
517
+ if (err )
518
+ return err ;
499
519
500
520
if (map_events != expected_events ) {
501
521
pr_err ("testing event table: found %d, but expected %d\n" ,
502
522
map_events , expected_events );
503
- return -1 ;
523
+ return TEST_FAIL ;
504
524
}
505
525
506
526
return 0 ;
0 commit comments