aboutsummaryrefslogtreecommitdiffstats
path: root/tools/perf/tests/code-reading.c
diff options
context:
space:
mode:
Diffstat (limited to 'tools/perf/tests/code-reading.c')
-rw-r--r--tools/perf/tests/code-reading.c43
1 files changed, 37 insertions, 6 deletions
diff --git a/tools/perf/tests/code-reading.c b/tools/perf/tests/code-reading.c
index 3bf7b145b826..99936352df4f 100644
--- a/tools/perf/tests/code-reading.c
+++ b/tools/perf/tests/code-reading.c
@@ -409,15 +409,21 @@ static int process_events(struct machine *machine, struct perf_evlist *evlist,
409 struct state *state) 409 struct state *state)
410{ 410{
411 union perf_event *event; 411 union perf_event *event;
412 struct perf_mmap *md;
412 int i, ret; 413 int i, ret;
413 414
414 for (i = 0; i < evlist->nr_mmaps; i++) { 415 for (i = 0; i < evlist->nr_mmaps; i++) {
415 while ((event = perf_evlist__mmap_read(evlist, i)) != NULL) { 416 md = &evlist->mmap[i];
417 if (perf_mmap__read_init(md) < 0)
418 continue;
419
420 while ((event = perf_mmap__read_event(md)) != NULL) {
416 ret = process_event(machine, evlist, event, state); 421 ret = process_event(machine, evlist, event, state);
417 perf_evlist__mmap_consume(evlist, i); 422 perf_mmap__consume(md);
418 if (ret < 0) 423 if (ret < 0)
419 return ret; 424 return ret;
420 } 425 }
426 perf_mmap__read_done(md);
421 } 427 }
422 return 0; 428 return 0;
423} 429}
@@ -482,6 +488,34 @@ static void fs_something(void)
482 } 488 }
483} 489}
484 490
491static const char *do_determine_event(bool excl_kernel)
492{
493 const char *event = excl_kernel ? "cycles:u" : "cycles";
494
495#ifdef __s390x__
496 char cpuid[128], model[16], model_c[16], cpum_cf_v[16];
497 unsigned int family;
498 int ret, cpum_cf_a;
499
500 if (get_cpuid(cpuid, sizeof(cpuid)))
501 goto out_clocks;
502 ret = sscanf(cpuid, "%*[^,],%u,%[^,],%[^,],%[^,],%x", &family, model_c,
503 model, cpum_cf_v, &cpum_cf_a);
504 if (ret != 5) /* Not available */
505 goto out_clocks;
506 if (excl_kernel && (cpum_cf_a & 4))
507 return event;
508 if (!excl_kernel && (cpum_cf_a & 2))
509 return event;
510
511 /* Fall through: missing authorization */
512out_clocks:
513 event = excl_kernel ? "cpu-clock:u" : "cpu-clock";
514
515#endif
516 return event;
517}
518
485static void do_something(void) 519static void do_something(void)
486{ 520{
487 fs_something(); 521 fs_something();
@@ -592,10 +626,7 @@ static int do_test_code_reading(bool try_kcore)
592 626
593 perf_evlist__set_maps(evlist, cpus, threads); 627 perf_evlist__set_maps(evlist, cpus, threads);
594 628
595 if (excl_kernel) 629 str = do_determine_event(excl_kernel);
596 str = "cycles:u";
597 else
598 str = "cycles";
599 pr_debug("Parsing event '%s'\n", str); 630 pr_debug("Parsing event '%s'\n", str);
600 ret = parse_events(evlist, str, NULL); 631 ret = parse_events(evlist, str, NULL);
601 if (ret < 0) { 632 if (ret < 0) {