Skip to content

Commit ad60ba0

Browse files
ahunter6acmel
authored andcommitted
perf auxtrace: Add auxtrace_record__read_finish()
All ->read_finish() implementations are doing the same thing. Add a helper function so that they can share the same implementation. Signed-off-by: Adrian Hunter <[email protected]> Reviewed-by: Leo Yan <[email protected]> Tested-by: Leo Yan <[email protected]> Reviewed-by: Mathieu Poirier <[email protected]> Cc: Jiri Olsa <[email protected]> Cc: Kim Phillips <[email protected]> Cc: Wei Li <[email protected]> Link: http://lore.kernel.org/lkml/[email protected] Signed-off-by: Arnaldo Carvalho de Melo <[email protected]>
1 parent d6bc34c commit ad60ba0

File tree

6 files changed

+35
-74
lines changed

6 files changed

+35
-74
lines changed

tools/perf/arch/arm/util/cs-etm.c

Lines changed: 2 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -858,24 +858,6 @@ static void cs_etm_recording_free(struct auxtrace_record *itr)
858858
free(ptr);
859859
}
860860

861-
static int cs_etm_read_finish(struct auxtrace_record *itr, int idx)
862-
{
863-
struct cs_etm_recording *ptr =
864-
container_of(itr, struct cs_etm_recording, itr);
865-
struct evsel *evsel;
866-
867-
evlist__for_each_entry(ptr->evlist, evsel) {
868-
if (evsel->core.attr.type == ptr->cs_etm_pmu->type) {
869-
if (evsel->disabled)
870-
return 0;
871-
return perf_evlist__enable_event_idx(ptr->evlist,
872-
evsel, idx);
873-
}
874-
}
875-
876-
return -EINVAL;
877-
}
878-
879861
struct auxtrace_record *cs_etm_record_init(int *err)
880862
{
881863
struct perf_pmu *cs_etm_pmu;
@@ -895,6 +877,7 @@ struct auxtrace_record *cs_etm_record_init(int *err)
895877
}
896878

897879
ptr->cs_etm_pmu = cs_etm_pmu;
880+
ptr->itr.pmu = cs_etm_pmu;
898881
ptr->itr.parse_snapshot_options = cs_etm_parse_snapshot_options;
899882
ptr->itr.recording_options = cs_etm_recording_options;
900883
ptr->itr.info_priv_size = cs_etm_info_priv_size;
@@ -904,7 +887,7 @@ struct auxtrace_record *cs_etm_record_init(int *err)
904887
ptr->itr.snapshot_finish = cs_etm_snapshot_finish;
905888
ptr->itr.reference = cs_etm_reference;
906889
ptr->itr.free = cs_etm_recording_free;
907-
ptr->itr.read_finish = cs_etm_read_finish;
890+
ptr->itr.read_finish = auxtrace_record__read_finish;
908891

909892
*err = 0;
910893
return &ptr->itr;

tools/perf/arch/arm64/util/arm-spe.c

Lines changed: 2 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -158,23 +158,6 @@ static void arm_spe_recording_free(struct auxtrace_record *itr)
158158
free(sper);
159159
}
160160

161-
static int arm_spe_read_finish(struct auxtrace_record *itr, int idx)
162-
{
163-
struct arm_spe_recording *sper =
164-
container_of(itr, struct arm_spe_recording, itr);
165-
struct evsel *evsel;
166-
167-
evlist__for_each_entry(sper->evlist, evsel) {
168-
if (evsel->core.attr.type == sper->arm_spe_pmu->type) {
169-
if (evsel->disabled)
170-
return 0;
171-
return perf_evlist__enable_event_idx(sper->evlist,
172-
evsel, idx);
173-
}
174-
}
175-
return -EINVAL;
176-
}
177-
178161
struct auxtrace_record *arm_spe_recording_init(int *err,
179162
struct perf_pmu *arm_spe_pmu)
180163
{
@@ -192,12 +175,13 @@ struct auxtrace_record *arm_spe_recording_init(int *err,
192175
}
193176

194177
sper->arm_spe_pmu = arm_spe_pmu;
178+
sper->itr.pmu = arm_spe_pmu;
195179
sper->itr.recording_options = arm_spe_recording_options;
196180
sper->itr.info_priv_size = arm_spe_info_priv_size;
197181
sper->itr.info_fill = arm_spe_info_fill;
198182
sper->itr.free = arm_spe_recording_free;
199183
sper->itr.reference = arm_spe_reference;
200-
sper->itr.read_finish = arm_spe_read_finish;
184+
sper->itr.read_finish = auxtrace_record__read_finish;
201185
sper->itr.alignment = 0;
202186

203187
*err = 0;

tools/perf/arch/x86/util/intel-bts.c

Lines changed: 2 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -413,23 +413,6 @@ static int intel_bts_find_snapshot(struct auxtrace_record *itr, int idx,
413413
return err;
414414
}
415415

416-
static int intel_bts_read_finish(struct auxtrace_record *itr, int idx)
417-
{
418-
struct intel_bts_recording *btsr =
419-
container_of(itr, struct intel_bts_recording, itr);
420-
struct evsel *evsel;
421-
422-
evlist__for_each_entry(btsr->evlist, evsel) {
423-
if (evsel->core.attr.type == btsr->intel_bts_pmu->type) {
424-
if (evsel->disabled)
425-
return 0;
426-
return perf_evlist__enable_event_idx(btsr->evlist,
427-
evsel, idx);
428-
}
429-
}
430-
return -EINVAL;
431-
}
432-
433416
struct auxtrace_record *intel_bts_recording_init(int *err)
434417
{
435418
struct perf_pmu *intel_bts_pmu = perf_pmu__find(INTEL_BTS_PMU_NAME);
@@ -450,6 +433,7 @@ struct auxtrace_record *intel_bts_recording_init(int *err)
450433
}
451434

452435
btsr->intel_bts_pmu = intel_bts_pmu;
436+
btsr->itr.pmu = intel_bts_pmu;
453437
btsr->itr.recording_options = intel_bts_recording_options;
454438
btsr->itr.info_priv_size = intel_bts_info_priv_size;
455439
btsr->itr.info_fill = intel_bts_info_fill;
@@ -459,7 +443,7 @@ struct auxtrace_record *intel_bts_recording_init(int *err)
459443
btsr->itr.find_snapshot = intel_bts_find_snapshot;
460444
btsr->itr.parse_snapshot_options = intel_bts_parse_snapshot_options;
461445
btsr->itr.reference = intel_bts_reference;
462-
btsr->itr.read_finish = intel_bts_read_finish;
446+
btsr->itr.read_finish = auxtrace_record__read_finish;
463447
btsr->itr.alignment = sizeof(struct branch);
464448
return &btsr->itr;
465449
}

tools/perf/arch/x86/util/intel-pt.c

Lines changed: 2 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1166,23 +1166,6 @@ static u64 intel_pt_reference(struct auxtrace_record *itr __maybe_unused)
11661166
return rdtsc();
11671167
}
11681168

1169-
static int intel_pt_read_finish(struct auxtrace_record *itr, int idx)
1170-
{
1171-
struct intel_pt_recording *ptr =
1172-
container_of(itr, struct intel_pt_recording, itr);
1173-
struct evsel *evsel;
1174-
1175-
evlist__for_each_entry(ptr->evlist, evsel) {
1176-
if (evsel->core.attr.type == ptr->intel_pt_pmu->type) {
1177-
if (evsel->disabled)
1178-
return 0;
1179-
return perf_evlist__enable_event_idx(ptr->evlist, evsel,
1180-
idx);
1181-
}
1182-
}
1183-
return -EINVAL;
1184-
}
1185-
11861169
struct auxtrace_record *intel_pt_recording_init(int *err)
11871170
{
11881171
struct perf_pmu *intel_pt_pmu = perf_pmu__find(INTEL_PT_PMU_NAME);
@@ -1203,6 +1186,7 @@ struct auxtrace_record *intel_pt_recording_init(int *err)
12031186
}
12041187

12051188
ptr->intel_pt_pmu = intel_pt_pmu;
1189+
ptr->itr.pmu = intel_pt_pmu;
12061190
ptr->itr.recording_options = intel_pt_recording_options;
12071191
ptr->itr.info_priv_size = intel_pt_info_priv_size;
12081192
ptr->itr.info_fill = intel_pt_info_fill;
@@ -1212,7 +1196,7 @@ struct auxtrace_record *intel_pt_recording_init(int *err)
12121196
ptr->itr.find_snapshot = intel_pt_find_snapshot;
12131197
ptr->itr.parse_snapshot_options = intel_pt_parse_snapshot_options;
12141198
ptr->itr.reference = intel_pt_reference;
1215-
ptr->itr.read_finish = intel_pt_read_finish;
1199+
ptr->itr.read_finish = auxtrace_record__read_finish;
12161200
/*
12171201
* Decoding starts at a PSB packet. Minimum PSB period is 2K so 4K
12181202
* should give at least 1 PSB per sample.

tools/perf/util/auxtrace.c

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -629,8 +629,10 @@ int auxtrace_record__options(struct auxtrace_record *itr,
629629
struct evlist *evlist,
630630
struct record_opts *opts)
631631
{
632-
if (itr)
632+
if (itr) {
633+
itr->evlist = evlist;
633634
return itr->recording_options(itr, evlist, opts);
635+
}
634636
return 0;
635637
}
636638

@@ -664,6 +666,24 @@ int auxtrace_parse_snapshot_options(struct auxtrace_record *itr,
664666
return -EINVAL;
665667
}
666668

669+
int auxtrace_record__read_finish(struct auxtrace_record *itr, int idx)
670+
{
671+
struct evsel *evsel;
672+
673+
if (!itr->evlist || !itr->pmu)
674+
return -EINVAL;
675+
676+
evlist__for_each_entry(itr->evlist, evsel) {
677+
if (evsel->core.attr.type == itr->pmu->type) {
678+
if (evsel->disabled)
679+
return 0;
680+
return perf_evlist__enable_event_idx(itr->evlist, evsel,
681+
idx);
682+
}
683+
}
684+
return -EINVAL;
685+
}
686+
667687
/*
668688
* Event record size is 16-bit which results in a maximum size of about 64KiB.
669689
* Allow about 4KiB for the rest of the sample record, to give a maximum

tools/perf/util/auxtrace.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ struct record_opts;
2929
struct perf_record_auxtrace_error;
3030
struct perf_record_auxtrace_info;
3131
struct events_stats;
32+
struct perf_pmu;
3233

3334
enum auxtrace_error_type {
3435
PERF_AUXTRACE_ERROR_ITRACE = 1,
@@ -322,6 +323,8 @@ struct auxtrace_mmap_params {
322323
* @read_finish: called after reading from an auxtrace mmap
323324
* @alignment: alignment (if any) for AUX area data
324325
* @default_aux_sample_size: default sample size for --aux sample option
326+
* @pmu: associated pmu
327+
* @evlist: selected events list
325328
*/
326329
struct auxtrace_record {
327330
int (*recording_options)(struct auxtrace_record *itr,
@@ -346,6 +349,8 @@ struct auxtrace_record {
346349
int (*read_finish)(struct auxtrace_record *itr, int idx);
347350
unsigned int alignment;
348351
unsigned int default_aux_sample_size;
352+
struct perf_pmu *pmu;
353+
struct evlist *evlist;
349354
};
350355

351356
/**
@@ -537,6 +542,7 @@ int auxtrace_record__find_snapshot(struct auxtrace_record *itr, int idx,
537542
struct auxtrace_mmap *mm,
538543
unsigned char *data, u64 *head, u64 *old);
539544
u64 auxtrace_record__reference(struct auxtrace_record *itr);
545+
int auxtrace_record__read_finish(struct auxtrace_record *itr, int idx);
540546

541547
int auxtrace_index__auxtrace_event(struct list_head *head, union perf_event *event,
542548
off_t file_offset);

0 commit comments

Comments
 (0)