mirror of
https://github.com/linux-msm/laptops-kernel.git
synced 2026-08-13 14:19:53 -07:00
libperf: Move perf_event_attr field from perf's evsel to libperf's perf_evsel
Move the perf_event_attr struct fron 'struct evsel' to 'struct perf_evsel'.
Committer notes:
Fixed up these:
tools/perf/arch/arm/util/auxtrace.c
tools/perf/arch/arm/util/cs-etm.c
tools/perf/arch/arm64/util/arm-spe.c
tools/perf/arch/s390/util/auxtrace.c
tools/perf/util/cs-etm.c
Also
cc1: warnings being treated as errors
tests/sample-parsing.c: In function 'do_test':
tests/sample-parsing.c:162: error: missing initializer
tests/sample-parsing.c:162: error: (near initialization for 'evsel.core.cpus')
struct evsel evsel = {
.needs_swap = false,
- .core.attr = {
- .sample_type = sample_type,
- .read_format = read_format,
+ .core = {
+ . attr = {
+ .sample_type = sample_type,
+ .read_format = read_format,
+ },
[perfbuilder@a70e4eeb5549 /]$ gcc --version |& head -1
gcc (GCC) 4.4.7
Also we don't need to include perf_event.h in
tools/perf/lib/include/perf/evsel.h, forward declaring 'struct
perf_event_attr' is enough. And this even fixes the build in some
systems where things are used somewhere down the include path from
perf_event.h without defining __always_inline.
Signed-off-by: Jiri Olsa <jolsa@kernel.org>
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Cc: Alexey Budankov <alexey.budankov@linux.intel.com>
Cc: Andi Kleen <ak@linux.intel.com>
Cc: Michael Petlan <mpetlan@redhat.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Link: http://lkml.kernel.org/r/20190721112506.12306-43-jolsa@kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
committed by
Arnaldo Carvalho de Melo
parent
6484d2f9dc
commit
1fc632cef4
@@ -70,14 +70,14 @@ struct auxtrace_record
|
||||
|
||||
evlist__for_each_entry(evlist, evsel) {
|
||||
if (cs_etm_pmu &&
|
||||
evsel->attr.type == cs_etm_pmu->type)
|
||||
evsel->core.attr.type == cs_etm_pmu->type)
|
||||
found_etm = true;
|
||||
|
||||
if (!nr_spes)
|
||||
continue;
|
||||
|
||||
for (i = 0; i < nr_spes; i++) {
|
||||
if (evsel->attr.type == arm_spe_pmus[i]->type) {
|
||||
if (evsel->core.attr.type == arm_spe_pmus[i]->type) {
|
||||
found_spe = true;
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -95,7 +95,7 @@ static int cs_etm_set_context_id(struct auxtrace_record *itr,
|
||||
}
|
||||
|
||||
/* All good, let the kernel know */
|
||||
evsel->attr.config |= (1 << ETM_OPT_CTXTID);
|
||||
evsel->core.attr.config |= (1 << ETM_OPT_CTXTID);
|
||||
err = 0;
|
||||
|
||||
out:
|
||||
@@ -144,7 +144,7 @@ static int cs_etm_set_timestamp(struct auxtrace_record *itr,
|
||||
}
|
||||
|
||||
/* All good, let the kernel know */
|
||||
evsel->attr.config |= (1 << ETM_OPT_TS);
|
||||
evsel->core.attr.config |= (1 << ETM_OPT_TS);
|
||||
err = 0;
|
||||
|
||||
out:
|
||||
@@ -215,7 +215,7 @@ static int cs_etm_set_sink_attr(struct perf_pmu *pmu,
|
||||
int ret = -EINVAL;
|
||||
u32 hash;
|
||||
|
||||
if (evsel->attr.config2 & GENMASK(31, 0))
|
||||
if (evsel->core.attr.config2 & GENMASK(31, 0))
|
||||
return 0;
|
||||
|
||||
list_for_each_entry(term, &evsel->config_terms, list) {
|
||||
@@ -233,7 +233,7 @@ static int cs_etm_set_sink_attr(struct perf_pmu *pmu,
|
||||
return ret;
|
||||
}
|
||||
|
||||
evsel->attr.config2 |= hash;
|
||||
evsel->core.attr.config2 |= hash;
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -264,14 +264,14 @@ static int cs_etm_recording_options(struct auxtrace_record *itr,
|
||||
opts->record_switch_events = true;
|
||||
|
||||
evlist__for_each_entry(evlist, evsel) {
|
||||
if (evsel->attr.type == cs_etm_pmu->type) {
|
||||
if (evsel->core.attr.type == cs_etm_pmu->type) {
|
||||
if (cs_etm_evsel) {
|
||||
pr_err("There may be only one %s event\n",
|
||||
CORESIGHT_ETM_PMU_NAME);
|
||||
return -EINVAL;
|
||||
}
|
||||
evsel->attr.freq = 0;
|
||||
evsel->attr.sample_period = 1;
|
||||
evsel->core.attr.freq = 0;
|
||||
evsel->core.attr.sample_period = 1;
|
||||
cs_etm_evsel = evsel;
|
||||
opts->full_auxtrace = true;
|
||||
}
|
||||
@@ -416,8 +416,8 @@ static int cs_etm_recording_options(struct auxtrace_record *itr,
|
||||
tracking_evsel = perf_evlist__last(evlist);
|
||||
perf_evlist__set_tracking_event(evlist, tracking_evsel);
|
||||
|
||||
tracking_evsel->attr.freq = 0;
|
||||
tracking_evsel->attr.sample_period = 1;
|
||||
tracking_evsel->core.attr.freq = 0;
|
||||
tracking_evsel->core.attr.sample_period = 1;
|
||||
|
||||
/* In per-cpu case, always need the time of mmap events etc */
|
||||
if (!cpu_map__empty(cpus))
|
||||
@@ -438,7 +438,7 @@ static u64 cs_etm_get_config(struct auxtrace_record *itr)
|
||||
struct evsel *evsel;
|
||||
|
||||
evlist__for_each_entry(evlist, evsel) {
|
||||
if (evsel->attr.type == cs_etm_pmu->type) {
|
||||
if (evsel->core.attr.type == cs_etm_pmu->type) {
|
||||
/*
|
||||
* Variable perf_event_attr::config is assigned to
|
||||
* ETMv3/PTM. The bit fields have been made to match
|
||||
@@ -447,7 +447,7 @@ static u64 cs_etm_get_config(struct auxtrace_record *itr)
|
||||
* drivers/hwtracing/coresight/coresight-perf.c for
|
||||
* details.
|
||||
*/
|
||||
config = evsel->attr.config;
|
||||
config = evsel->core.attr.config;
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -820,7 +820,7 @@ static int cs_etm_snapshot_start(struct auxtrace_record *itr)
|
||||
struct evsel *evsel;
|
||||
|
||||
evlist__for_each_entry(ptr->evlist, evsel) {
|
||||
if (evsel->attr.type == ptr->cs_etm_pmu->type)
|
||||
if (evsel->core.attr.type == ptr->cs_etm_pmu->type)
|
||||
return evsel__disable(evsel);
|
||||
}
|
||||
return -EINVAL;
|
||||
@@ -833,7 +833,7 @@ static int cs_etm_snapshot_finish(struct auxtrace_record *itr)
|
||||
struct evsel *evsel;
|
||||
|
||||
evlist__for_each_entry(ptr->evlist, evsel) {
|
||||
if (evsel->attr.type == ptr->cs_etm_pmu->type)
|
||||
if (evsel->core.attr.type == ptr->cs_etm_pmu->type)
|
||||
return evsel__enable(evsel);
|
||||
}
|
||||
return -EINVAL;
|
||||
@@ -861,7 +861,7 @@ static int cs_etm_read_finish(struct auxtrace_record *itr, int idx)
|
||||
struct evsel *evsel;
|
||||
|
||||
evlist__for_each_entry(ptr->evlist, evsel) {
|
||||
if (evsel->attr.type == ptr->cs_etm_pmu->type)
|
||||
if (evsel->core.attr.type == ptr->cs_etm_pmu->type)
|
||||
return perf_evlist__enable_event_idx(ptr->evlist,
|
||||
evsel, idx);
|
||||
}
|
||||
|
||||
@@ -73,13 +73,13 @@ static int arm_spe_recording_options(struct auxtrace_record *itr,
|
||||
sper->evlist = evlist;
|
||||
|
||||
evlist__for_each_entry(evlist, evsel) {
|
||||
if (evsel->attr.type == arm_spe_pmu->type) {
|
||||
if (evsel->core.attr.type == arm_spe_pmu->type) {
|
||||
if (arm_spe_evsel) {
|
||||
pr_err("There may be only one " ARM_SPE_PMU_NAME "x event\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
evsel->attr.freq = 0;
|
||||
evsel->attr.sample_period = 1;
|
||||
evsel->core.attr.freq = 0;
|
||||
evsel->core.attr.sample_period = 1;
|
||||
arm_spe_evsel = evsel;
|
||||
opts->full_auxtrace = true;
|
||||
}
|
||||
@@ -130,8 +130,8 @@ static int arm_spe_recording_options(struct auxtrace_record *itr,
|
||||
tracking_evsel = perf_evlist__last(evlist);
|
||||
perf_evlist__set_tracking_event(evlist, tracking_evsel);
|
||||
|
||||
tracking_evsel->attr.freq = 0;
|
||||
tracking_evsel->attr.sample_period = 1;
|
||||
tracking_evsel->core.attr.freq = 0;
|
||||
tracking_evsel->core.attr.sample_period = 1;
|
||||
perf_evsel__set_sample_bit(tracking_evsel, TIME);
|
||||
perf_evsel__set_sample_bit(tracking_evsel, CPU);
|
||||
perf_evsel__reset_sample_bit(tracking_evsel, BRANCH_STACK);
|
||||
@@ -163,7 +163,7 @@ static int arm_spe_read_finish(struct auxtrace_record *itr, int idx)
|
||||
struct evsel *evsel;
|
||||
|
||||
evlist__for_each_entry(sper->evlist, evsel) {
|
||||
if (evsel->attr.type == sper->arm_spe_pmu->type)
|
||||
if (evsel->core.attr.type == sper->arm_spe_pmu->type)
|
||||
return perf_evlist__enable_event_idx(sper->evlist,
|
||||
evsel, idx);
|
||||
}
|
||||
|
||||
@@ -94,7 +94,7 @@ struct auxtrace_record *auxtrace_record__init(struct evlist *evlist,
|
||||
return NULL;
|
||||
|
||||
evlist__for_each_entry(evlist, pos) {
|
||||
if (pos->attr.config == PERF_EVENT_CPUM_SF_DIAG) {
|
||||
if (pos->core.attr.config == PERF_EVENT_CPUM_SF_DIAG) {
|
||||
diagnose = 1;
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -79,9 +79,9 @@ int test__perf_time_to_tsc(struct test *test __maybe_unused, int subtest __maybe
|
||||
|
||||
evsel = perf_evlist__first(evlist);
|
||||
|
||||
evsel->attr.comm = 1;
|
||||
evsel->attr.disabled = 1;
|
||||
evsel->attr.enable_on_exec = 0;
|
||||
evsel->core.attr.comm = 1;
|
||||
evsel->core.attr.disabled = 1;
|
||||
evsel->core.attr.enable_on_exec = 0;
|
||||
|
||||
CHECK__(evlist__open(evlist));
|
||||
|
||||
|
||||
@@ -29,9 +29,9 @@ struct auxtrace_record *auxtrace_record__init_intel(struct evlist *evlist,
|
||||
intel_bts_pmu = perf_pmu__find(INTEL_BTS_PMU_NAME);
|
||||
|
||||
evlist__for_each_entry(evlist, evsel) {
|
||||
if (intel_pt_pmu && evsel->attr.type == intel_pt_pmu->type)
|
||||
if (intel_pt_pmu && evsel->core.attr.type == intel_pt_pmu->type)
|
||||
found_pt = true;
|
||||
if (intel_bts_pmu && evsel->attr.type == intel_bts_pmu->type)
|
||||
if (intel_bts_pmu && evsel->core.attr.type == intel_bts_pmu->type)
|
||||
found_bts = true;
|
||||
}
|
||||
|
||||
|
||||
@@ -113,13 +113,13 @@ static int intel_bts_recording_options(struct auxtrace_record *itr,
|
||||
btsr->snapshot_mode = opts->auxtrace_snapshot_mode;
|
||||
|
||||
evlist__for_each_entry(evlist, evsel) {
|
||||
if (evsel->attr.type == intel_bts_pmu->type) {
|
||||
if (evsel->core.attr.type == intel_bts_pmu->type) {
|
||||
if (intel_bts_evsel) {
|
||||
pr_err("There may be only one " INTEL_BTS_PMU_NAME " event\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
evsel->attr.freq = 0;
|
||||
evsel->attr.sample_period = 1;
|
||||
evsel->core.attr.freq = 0;
|
||||
evsel->core.attr.sample_period = 1;
|
||||
intel_bts_evsel = evsel;
|
||||
opts->full_auxtrace = true;
|
||||
}
|
||||
@@ -231,8 +231,8 @@ static int intel_bts_recording_options(struct auxtrace_record *itr,
|
||||
|
||||
perf_evlist__set_tracking_event(evlist, tracking_evsel);
|
||||
|
||||
tracking_evsel->attr.freq = 0;
|
||||
tracking_evsel->attr.sample_period = 1;
|
||||
tracking_evsel->core.attr.freq = 0;
|
||||
tracking_evsel->core.attr.sample_period = 1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
@@ -316,7 +316,7 @@ static int intel_bts_snapshot_start(struct auxtrace_record *itr)
|
||||
struct evsel *evsel;
|
||||
|
||||
evlist__for_each_entry(btsr->evlist, evsel) {
|
||||
if (evsel->attr.type == btsr->intel_bts_pmu->type)
|
||||
if (evsel->core.attr.type == btsr->intel_bts_pmu->type)
|
||||
return evsel__disable(evsel);
|
||||
}
|
||||
return -EINVAL;
|
||||
@@ -329,7 +329,7 @@ static int intel_bts_snapshot_finish(struct auxtrace_record *itr)
|
||||
struct evsel *evsel;
|
||||
|
||||
evlist__for_each_entry(btsr->evlist, evsel) {
|
||||
if (evsel->attr.type == btsr->intel_bts_pmu->type)
|
||||
if (evsel->core.attr.type == btsr->intel_bts_pmu->type)
|
||||
return evsel__enable(evsel);
|
||||
}
|
||||
return -EINVAL;
|
||||
@@ -411,7 +411,7 @@ static int intel_bts_read_finish(struct auxtrace_record *itr, int idx)
|
||||
struct evsel *evsel;
|
||||
|
||||
evlist__for_each_entry(btsr->evlist, evsel) {
|
||||
if (evsel->attr.type == btsr->intel_bts_pmu->type)
|
||||
if (evsel->core.attr.type == btsr->intel_bts_pmu->type)
|
||||
return perf_evlist__enable_event_idx(btsr->evlist,
|
||||
evsel, idx);
|
||||
}
|
||||
|
||||
@@ -122,8 +122,8 @@ static int intel_pt_read_config(struct perf_pmu *intel_pt_pmu, const char *str,
|
||||
return -EINVAL;
|
||||
|
||||
evlist__for_each_entry(evlist, evsel) {
|
||||
if (evsel->attr.type == intel_pt_pmu->type) {
|
||||
*res = intel_pt_masked_bits(mask, evsel->attr.config);
|
||||
if (evsel->core.attr.type == intel_pt_pmu->type) {
|
||||
*res = intel_pt_masked_bits(mask, evsel->core.attr.config);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
@@ -274,7 +274,7 @@ static const char *intel_pt_find_filter(struct evlist *evlist,
|
||||
struct evsel *evsel;
|
||||
|
||||
evlist__for_each_entry(evlist, evsel) {
|
||||
if (evsel->attr.type == intel_pt_pmu->type)
|
||||
if (evsel->core.attr.type == intel_pt_pmu->type)
|
||||
return evsel->filter;
|
||||
}
|
||||
|
||||
@@ -526,26 +526,26 @@ static int intel_pt_validate_config(struct perf_pmu *intel_pt_pmu,
|
||||
* sets pt=0, which avoids senseless kernel errors.
|
||||
*/
|
||||
if (perf_pmu__scan_file(intel_pt_pmu, "format/pt", "%c", &c) == 1 &&
|
||||
!(evsel->attr.config & 1)) {
|
||||
!(evsel->core.attr.config & 1)) {
|
||||
pr_warning("pt=0 doesn't make sense, forcing pt=1\n");
|
||||
evsel->attr.config |= 1;
|
||||
evsel->core.attr.config |= 1;
|
||||
}
|
||||
|
||||
err = intel_pt_val_config_term(intel_pt_pmu, "caps/cycle_thresholds",
|
||||
"cyc_thresh", "caps/psb_cyc",
|
||||
evsel->attr.config);
|
||||
evsel->core.attr.config);
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
err = intel_pt_val_config_term(intel_pt_pmu, "caps/mtc_periods",
|
||||
"mtc_period", "caps/mtc",
|
||||
evsel->attr.config);
|
||||
evsel->core.attr.config);
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
return intel_pt_val_config_term(intel_pt_pmu, "caps/psb_periods",
|
||||
"psb_period", "caps/psb_cyc",
|
||||
evsel->attr.config);
|
||||
evsel->core.attr.config);
|
||||
}
|
||||
|
||||
static int intel_pt_recording_options(struct auxtrace_record *itr,
|
||||
@@ -566,13 +566,13 @@ static int intel_pt_recording_options(struct auxtrace_record *itr,
|
||||
ptr->snapshot_mode = opts->auxtrace_snapshot_mode;
|
||||
|
||||
evlist__for_each_entry(evlist, evsel) {
|
||||
if (evsel->attr.type == intel_pt_pmu->type) {
|
||||
if (evsel->core.attr.type == intel_pt_pmu->type) {
|
||||
if (intel_pt_evsel) {
|
||||
pr_err("There may be only one " INTEL_PT_PMU_NAME " event\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
evsel->attr.freq = 0;
|
||||
evsel->attr.sample_period = 1;
|
||||
evsel->core.attr.freq = 0;
|
||||
evsel->core.attr.sample_period = 1;
|
||||
intel_pt_evsel = evsel;
|
||||
opts->full_auxtrace = true;
|
||||
}
|
||||
@@ -670,7 +670,7 @@ static int intel_pt_recording_options(struct auxtrace_record *itr,
|
||||
|
||||
intel_pt_parse_terms(&intel_pt_pmu->format, "tsc", &tsc_bit);
|
||||
|
||||
if (opts->full_auxtrace && (intel_pt_evsel->attr.config & tsc_bit))
|
||||
if (opts->full_auxtrace && (intel_pt_evsel->core.attr.config & tsc_bit))
|
||||
have_timing_info = true;
|
||||
else
|
||||
have_timing_info = false;
|
||||
@@ -693,9 +693,9 @@ static int intel_pt_recording_options(struct auxtrace_record *itr,
|
||||
|
||||
switch_evsel = perf_evlist__last(evlist);
|
||||
|
||||
switch_evsel->attr.freq = 0;
|
||||
switch_evsel->attr.sample_period = 1;
|
||||
switch_evsel->attr.context_switch = 1;
|
||||
switch_evsel->core.attr.freq = 0;
|
||||
switch_evsel->core.attr.sample_period = 1;
|
||||
switch_evsel->core.attr.context_switch = 1;
|
||||
|
||||
switch_evsel->system_wide = true;
|
||||
switch_evsel->no_aux_samples = true;
|
||||
@@ -753,8 +753,8 @@ static int intel_pt_recording_options(struct auxtrace_record *itr,
|
||||
|
||||
perf_evlist__set_tracking_event(evlist, tracking_evsel);
|
||||
|
||||
tracking_evsel->attr.freq = 0;
|
||||
tracking_evsel->attr.sample_period = 1;
|
||||
tracking_evsel->core.attr.freq = 0;
|
||||
tracking_evsel->core.attr.sample_period = 1;
|
||||
|
||||
tracking_evsel->no_aux_samples = true;
|
||||
if (need_immediate)
|
||||
@@ -787,7 +787,7 @@ static int intel_pt_snapshot_start(struct auxtrace_record *itr)
|
||||
struct evsel *evsel;
|
||||
|
||||
evlist__for_each_entry(ptr->evlist, evsel) {
|
||||
if (evsel->attr.type == ptr->intel_pt_pmu->type)
|
||||
if (evsel->core.attr.type == ptr->intel_pt_pmu->type)
|
||||
return evsel__disable(evsel);
|
||||
}
|
||||
return -EINVAL;
|
||||
@@ -800,7 +800,7 @@ static int intel_pt_snapshot_finish(struct auxtrace_record *itr)
|
||||
struct evsel *evsel;
|
||||
|
||||
evlist__for_each_entry(ptr->evlist, evsel) {
|
||||
if (evsel->attr.type == ptr->intel_pt_pmu->type)
|
||||
if (evsel->core.attr.type == ptr->intel_pt_pmu->type)
|
||||
return evsel__enable(evsel);
|
||||
}
|
||||
return -EINVAL;
|
||||
@@ -1073,7 +1073,7 @@ static int intel_pt_read_finish(struct auxtrace_record *itr, int idx)
|
||||
struct evsel *evsel;
|
||||
|
||||
evlist__for_each_entry(ptr->evlist, evsel) {
|
||||
if (evsel->attr.type == ptr->intel_pt_pmu->type)
|
||||
if (evsel->core.attr.type == ptr->intel_pt_pmu->type)
|
||||
return perf_evlist__enable_event_idx(ptr->evlist, evsel,
|
||||
idx);
|
||||
}
|
||||
|
||||
@@ -36,7 +36,7 @@ static int __cmd_evlist(const char *file_name, struct perf_attr_details *details
|
||||
evlist__for_each_entry(session->evlist, pos) {
|
||||
perf_evsel__fprintf(pos, details, stdout);
|
||||
|
||||
if (pos->attr.type == PERF_TYPE_TRACEPOINT)
|
||||
if (pos->core.attr.type == PERF_TYPE_TRACEPOINT)
|
||||
has_tracepoint = true;
|
||||
}
|
||||
|
||||
|
||||
@@ -530,8 +530,8 @@ found:
|
||||
|
||||
sample_sw.period = sample->period;
|
||||
sample_sw.time = sample->time;
|
||||
perf_event__synthesize_sample(event_sw, evsel->attr.sample_type,
|
||||
evsel->attr.read_format, &sample_sw);
|
||||
perf_event__synthesize_sample(event_sw, evsel->core.attr.sample_type,
|
||||
evsel->core.attr.read_format, &sample_sw);
|
||||
build_id__mark_dso_hit(tool, event_sw, &sample_sw, evsel, machine);
|
||||
return perf_event__repipe(tool, event_sw, &sample_sw, machine);
|
||||
}
|
||||
@@ -544,7 +544,7 @@ static void sig_handler(int sig __maybe_unused)
|
||||
static int perf_evsel__check_stype(struct evsel *evsel,
|
||||
u64 sample_type, const char *sample_msg)
|
||||
{
|
||||
struct perf_event_attr *attr = &evsel->attr;
|
||||
struct perf_event_attr *attr = &evsel->core.attr;
|
||||
const char *name = perf_evsel__name(evsel);
|
||||
|
||||
if (!(attr->sample_type & sample_type)) {
|
||||
@@ -578,8 +578,8 @@ static void strip_init(struct perf_inject *inject)
|
||||
|
||||
static bool has_tracking(struct evsel *evsel)
|
||||
{
|
||||
return evsel->attr.mmap || evsel->attr.mmap2 || evsel->attr.comm ||
|
||||
evsel->attr.task;
|
||||
return evsel->core.attr.mmap || evsel->core.attr.mmap2 || evsel->core.attr.comm ||
|
||||
evsel->core.attr.task;
|
||||
}
|
||||
|
||||
#define COMPAT_MASK (PERF_SAMPLE_ID | PERF_SAMPLE_TID | PERF_SAMPLE_TIME | \
|
||||
@@ -603,8 +603,8 @@ static bool ok_to_remove(struct evlist *evlist,
|
||||
evlist__for_each_entry(evlist, evsel) {
|
||||
if (evsel->handler != drop_sample) {
|
||||
cnt += 1;
|
||||
if ((evsel->attr.sample_type & COMPAT_MASK) ==
|
||||
(evsel_to_remove->attr.sample_type & COMPAT_MASK))
|
||||
if ((evsel->core.attr.sample_type & COMPAT_MASK) ==
|
||||
(evsel_to_remove->core.attr.sample_type & COMPAT_MASK))
|
||||
ok = true;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1022,7 +1022,7 @@ static int kvm_live_open_events(struct perf_kvm_stat *kvm)
|
||||
* This command processes KVM tracepoints from host only
|
||||
*/
|
||||
evlist__for_each_entry(evlist, pos) {
|
||||
struct perf_event_attr *attr = &pos->attr;
|
||||
struct perf_event_attr *attr = &pos->core.attr;
|
||||
|
||||
/* make sure these *are* set */
|
||||
perf_evsel__set_sample_bit(pos, TID);
|
||||
|
||||
@@ -732,7 +732,7 @@ static int record__open(struct record *rec)
|
||||
pos->tracking = 0;
|
||||
pos = perf_evlist__last(evlist);
|
||||
pos->tracking = 1;
|
||||
pos->attr.enable_on_exec = 1;
|
||||
pos->core.attr.enable_on_exec = 1;
|
||||
}
|
||||
|
||||
perf_evlist__config(evlist, opts, &callchain_param);
|
||||
|
||||
+26
-26
@@ -345,7 +345,7 @@ static int perf_evsel__do_check_stype(struct evsel *evsel,
|
||||
enum perf_output_field field,
|
||||
bool allow_user_set)
|
||||
{
|
||||
struct perf_event_attr *attr = &evsel->attr;
|
||||
struct perf_event_attr *attr = &evsel->core.attr;
|
||||
int type = output_type(attr->type);
|
||||
const char *evname;
|
||||
|
||||
@@ -383,7 +383,7 @@ static int perf_evsel__check_stype(struct evsel *evsel,
|
||||
static int perf_evsel__check_attr(struct evsel *evsel,
|
||||
struct perf_session *session)
|
||||
{
|
||||
struct perf_event_attr *attr = &evsel->attr;
|
||||
struct perf_event_attr *attr = &evsel->core.attr;
|
||||
bool allow_user_set;
|
||||
|
||||
if (perf_header__has_feat(&session->header, HEADER_STAT))
|
||||
@@ -418,7 +418,7 @@ static int perf_evsel__check_attr(struct evsel *evsel,
|
||||
return -EINVAL;
|
||||
|
||||
if (PRINT_FIELD(SYM) &&
|
||||
!(evsel->attr.sample_type & (PERF_SAMPLE_IP|PERF_SAMPLE_ADDR))) {
|
||||
!(evsel->core.attr.sample_type & (PERF_SAMPLE_IP|PERF_SAMPLE_ADDR))) {
|
||||
pr_err("Display of symbols requested but neither sample IP nor "
|
||||
"sample address\navailable. Hence, no addresses to convert "
|
||||
"to symbols.\n");
|
||||
@@ -430,7 +430,7 @@ static int perf_evsel__check_attr(struct evsel *evsel,
|
||||
return -EINVAL;
|
||||
}
|
||||
if (PRINT_FIELD(DSO) &&
|
||||
!(evsel->attr.sample_type & (PERF_SAMPLE_IP|PERF_SAMPLE_ADDR))) {
|
||||
!(evsel->core.attr.sample_type & (PERF_SAMPLE_IP|PERF_SAMPLE_ADDR))) {
|
||||
pr_err("Display of DSO requested but no address to convert.\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
@@ -531,7 +531,7 @@ static int perf_session__check_output_opt(struct perf_session *session)
|
||||
if (evsel == NULL)
|
||||
continue;
|
||||
|
||||
set_print_ip_opts(&evsel->attr);
|
||||
set_print_ip_opts(&evsel->core.attr);
|
||||
}
|
||||
|
||||
if (!no_callchain) {
|
||||
@@ -558,7 +558,7 @@ static int perf_session__check_output_opt(struct perf_session *session)
|
||||
j = PERF_TYPE_TRACEPOINT;
|
||||
|
||||
evlist__for_each_entry(session->evlist, evsel) {
|
||||
if (evsel->attr.type != j)
|
||||
if (evsel->core.attr.type != j)
|
||||
continue;
|
||||
|
||||
if (evsel__has_callchain(evsel)) {
|
||||
@@ -566,7 +566,7 @@ static int perf_session__check_output_opt(struct perf_session *session)
|
||||
output[j].fields |= PERF_OUTPUT_SYM;
|
||||
output[j].fields |= PERF_OUTPUT_SYMOFFSET;
|
||||
output[j].fields |= PERF_OUTPUT_DSO;
|
||||
set_print_ip_opts(&evsel->attr);
|
||||
set_print_ip_opts(&evsel->core.attr);
|
||||
goto out;
|
||||
}
|
||||
}
|
||||
@@ -617,7 +617,7 @@ static int perf_sample__fprintf_start(struct perf_sample *sample,
|
||||
struct evsel *evsel,
|
||||
u32 type, FILE *fp)
|
||||
{
|
||||
struct perf_event_attr *attr = &evsel->attr;
|
||||
struct perf_event_attr *attr = &evsel->core.attr;
|
||||
unsigned long secs;
|
||||
unsigned long long nsecs;
|
||||
int printed = 0;
|
||||
@@ -1168,7 +1168,7 @@ static const char *resolve_branch_sym(struct perf_sample *sample,
|
||||
u64 *ip)
|
||||
{
|
||||
struct addr_location addr_al;
|
||||
struct perf_event_attr *attr = &evsel->attr;
|
||||
struct perf_event_attr *attr = &evsel->core.attr;
|
||||
const char *name = NULL;
|
||||
|
||||
if (sample->flags & (PERF_IP_FLAG_CALL | PERF_IP_FLAG_TRACE_BEGIN)) {
|
||||
@@ -1195,7 +1195,7 @@ static int perf_sample__fprintf_callindent(struct perf_sample *sample,
|
||||
struct thread *thread,
|
||||
struct addr_location *al, FILE *fp)
|
||||
{
|
||||
struct perf_event_attr *attr = &evsel->attr;
|
||||
struct perf_event_attr *attr = &evsel->core.attr;
|
||||
size_t depth = thread_stack__depth(thread, sample->cpu);
|
||||
const char *name = NULL;
|
||||
static int spacing;
|
||||
@@ -1290,7 +1290,7 @@ static int perf_sample__fprintf_bts(struct perf_sample *sample,
|
||||
struct addr_location *al,
|
||||
struct machine *machine, FILE *fp)
|
||||
{
|
||||
struct perf_event_attr *attr = &evsel->attr;
|
||||
struct perf_event_attr *attr = &evsel->core.attr;
|
||||
unsigned int type = output_type(attr->type);
|
||||
bool print_srcline_last = false;
|
||||
int printed = 0;
|
||||
@@ -1322,7 +1322,7 @@ static int perf_sample__fprintf_bts(struct perf_sample *sample,
|
||||
|
||||
/* print branch_to information */
|
||||
if (PRINT_FIELD(ADDR) ||
|
||||
((evsel->attr.sample_type & PERF_SAMPLE_ADDR) &&
|
||||
((evsel->core.attr.sample_type & PERF_SAMPLE_ADDR) &&
|
||||
!output[type].user_set)) {
|
||||
printed += fprintf(fp, " => ");
|
||||
printed += perf_sample__fprintf_addr(sample, thread, attr, fp);
|
||||
@@ -1595,7 +1595,7 @@ static int perf_sample__fprintf_synth_cbr(struct perf_sample *sample, FILE *fp)
|
||||
static int perf_sample__fprintf_synth(struct perf_sample *sample,
|
||||
struct evsel *evsel, FILE *fp)
|
||||
{
|
||||
switch (evsel->attr.config) {
|
||||
switch (evsel->core.attr.config) {
|
||||
case PERF_SYNTH_INTEL_PTWRITE:
|
||||
return perf_sample__fprintf_synth_ptwrite(sample, fp);
|
||||
case PERF_SYNTH_INTEL_MWAIT:
|
||||
@@ -1793,7 +1793,7 @@ static void process_event(struct perf_script *script,
|
||||
struct machine *machine)
|
||||
{
|
||||
struct thread *thread = al->thread;
|
||||
struct perf_event_attr *attr = &evsel->attr;
|
||||
struct perf_event_attr *attr = &evsel->core.attr;
|
||||
unsigned int type = output_type(attr->type);
|
||||
struct evsel_script *es = evsel->priv;
|
||||
FILE *fp = es->fp;
|
||||
@@ -2046,18 +2046,18 @@ static int process_attr(struct perf_tool *tool, union perf_event *event,
|
||||
}
|
||||
}
|
||||
|
||||
if (evsel->attr.type >= PERF_TYPE_MAX &&
|
||||
evsel->attr.type != PERF_TYPE_SYNTH)
|
||||
if (evsel->core.attr.type >= PERF_TYPE_MAX &&
|
||||
evsel->core.attr.type != PERF_TYPE_SYNTH)
|
||||
return 0;
|
||||
|
||||
evlist__for_each_entry(evlist, pos) {
|
||||
if (pos->attr.type == evsel->attr.type && pos != evsel)
|
||||
if (pos->core.attr.type == evsel->core.attr.type && pos != evsel)
|
||||
return 0;
|
||||
}
|
||||
|
||||
set_print_ip_opts(&evsel->attr);
|
||||
set_print_ip_opts(&evsel->core.attr);
|
||||
|
||||
if (evsel->attr.sample_type)
|
||||
if (evsel->core.attr.sample_type)
|
||||
err = perf_evsel__check_attr(evsel, scr->session);
|
||||
|
||||
return err;
|
||||
@@ -2083,7 +2083,7 @@ static int process_comm_event(struct perf_tool *tool,
|
||||
if (perf_event__process_comm(tool, event, sample, machine) < 0)
|
||||
goto out;
|
||||
|
||||
if (!evsel->attr.sample_id_all) {
|
||||
if (!evsel->core.attr.sample_id_all) {
|
||||
sample->cpu = 0;
|
||||
sample->time = 0;
|
||||
sample->tid = event->comm.tid;
|
||||
@@ -2121,7 +2121,7 @@ static int process_namespaces_event(struct perf_tool *tool,
|
||||
if (perf_event__process_namespaces(tool, event, sample, machine) < 0)
|
||||
goto out;
|
||||
|
||||
if (!evsel->attr.sample_id_all) {
|
||||
if (!evsel->core.attr.sample_id_all) {
|
||||
sample->cpu = 0;
|
||||
sample->time = 0;
|
||||
sample->tid = event->namespaces.tid;
|
||||
@@ -2157,7 +2157,7 @@ static int process_fork_event(struct perf_tool *tool,
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (!evsel->attr.sample_id_all) {
|
||||
if (!evsel->core.attr.sample_id_all) {
|
||||
sample->cpu = 0;
|
||||
sample->time = event->fork.time;
|
||||
sample->tid = event->fork.tid;
|
||||
@@ -2189,7 +2189,7 @@ static int process_exit_event(struct perf_tool *tool,
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (!evsel->attr.sample_id_all) {
|
||||
if (!evsel->core.attr.sample_id_all) {
|
||||
sample->cpu = 0;
|
||||
sample->time = 0;
|
||||
sample->tid = event->fork.tid;
|
||||
@@ -2227,7 +2227,7 @@ static int process_mmap_event(struct perf_tool *tool,
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (!evsel->attr.sample_id_all) {
|
||||
if (!evsel->core.attr.sample_id_all) {
|
||||
sample->cpu = 0;
|
||||
sample->time = 0;
|
||||
sample->tid = event->mmap.tid;
|
||||
@@ -2261,7 +2261,7 @@ static int process_mmap2_event(struct perf_tool *tool,
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (!evsel->attr.sample_id_all) {
|
||||
if (!evsel->core.attr.sample_id_all) {
|
||||
sample->cpu = 0;
|
||||
sample->time = 0;
|
||||
sample->tid = event->mmap2.tid;
|
||||
@@ -2360,7 +2360,7 @@ process_bpf_events(struct perf_tool *tool __maybe_unused,
|
||||
if (machine__process_ksymbol(machine, event, sample) < 0)
|
||||
return -1;
|
||||
|
||||
if (!evsel->attr.sample_id_all) {
|
||||
if (!evsel->core.attr.sample_id_all) {
|
||||
perf_event__fprintf(event, stdout);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -391,7 +391,7 @@ static void workload_exec_failed_signal(int signo __maybe_unused, siginfo_t *inf
|
||||
|
||||
static bool perf_evsel__should_store_id(struct evsel *counter)
|
||||
{
|
||||
return STAT_RECORD || counter->attr.read_format & PERF_FORMAT_ID;
|
||||
return STAT_RECORD || counter->core.attr.read_format & PERF_FORMAT_ID;
|
||||
}
|
||||
|
||||
static bool is_target_alive(struct target *_target,
|
||||
|
||||
@@ -557,7 +557,7 @@ static int process_sample_event(struct perf_tool *tool,
|
||||
{
|
||||
struct timechart *tchart = container_of(tool, struct timechart, tool);
|
||||
|
||||
if (evsel->attr.sample_type & PERF_SAMPLE_TIME) {
|
||||
if (evsel->core.attr.sample_type & PERF_SAMPLE_TIME) {
|
||||
if (!tchart->first_time || tchart->first_time > sample->time)
|
||||
tchart->first_time = sample->time;
|
||||
if (tchart->last_time < sample->time)
|
||||
|
||||
@@ -966,7 +966,7 @@ static int perf_top_overwrite_fallback(struct perf_top *top,
|
||||
return 0;
|
||||
|
||||
evlist__for_each_entry(evlist, counter)
|
||||
counter->attr.write_backward = false;
|
||||
counter->core.attr.write_backward = false;
|
||||
opts->overwrite = false;
|
||||
pr_debug2("fall back to non-overwrite mode\n");
|
||||
return 1;
|
||||
|
||||
+16
-16
@@ -2046,8 +2046,8 @@ static int trace__resolve_callchain(struct trace *trace, struct evsel *evsel,
|
||||
struct callchain_cursor *cursor)
|
||||
{
|
||||
struct addr_location al;
|
||||
int max_stack = evsel->attr.sample_max_stack ?
|
||||
evsel->attr.sample_max_stack :
|
||||
int max_stack = evsel->core.attr.sample_max_stack ?
|
||||
evsel->core.attr.sample_max_stack :
|
||||
trace->max_stack;
|
||||
int err;
|
||||
|
||||
@@ -2462,7 +2462,7 @@ static int trace__pgfault(struct trace *trace,
|
||||
if (ttrace == NULL)
|
||||
goto out_put;
|
||||
|
||||
if (evsel->attr.config == PERF_COUNT_SW_PAGE_FAULTS_MAJ)
|
||||
if (evsel->core.attr.config == PERF_COUNT_SW_PAGE_FAULTS_MAJ)
|
||||
ttrace->pfmaj++;
|
||||
else
|
||||
ttrace->pfmin++;
|
||||
@@ -2475,7 +2475,7 @@ static int trace__pgfault(struct trace *trace,
|
||||
trace__fprintf_entry_head(trace, thread, 0, true, sample->time, trace->output);
|
||||
|
||||
fprintf(trace->output, "%sfault [",
|
||||
evsel->attr.config == PERF_COUNT_SW_PAGE_FAULTS_MAJ ?
|
||||
evsel->core.attr.config == PERF_COUNT_SW_PAGE_FAULTS_MAJ ?
|
||||
"maj" : "min");
|
||||
|
||||
print_location(trace->output, sample, &al, false, true);
|
||||
@@ -2523,7 +2523,7 @@ static void trace__set_base_time(struct trace *trace,
|
||||
* appears in our event stream (vfs_getname comes to mind).
|
||||
*/
|
||||
if (trace->base_time == 0 && !trace->full_time &&
|
||||
(evsel->attr.sample_type & PERF_SAMPLE_TIME))
|
||||
(evsel->core.attr.sample_type & PERF_SAMPLE_TIME))
|
||||
trace->base_time = sample->time;
|
||||
}
|
||||
|
||||
@@ -2682,7 +2682,7 @@ static void trace__handle_event(struct trace *trace, union perf_event *event, st
|
||||
|
||||
trace__set_base_time(trace, evsel, sample);
|
||||
|
||||
if (evsel->attr.type == PERF_TYPE_TRACEPOINT &&
|
||||
if (evsel->core.attr.type == PERF_TYPE_TRACEPOINT &&
|
||||
sample->raw_data == NULL) {
|
||||
fprintf(trace->output, "%s sample with no payload for tid: %d, cpu %d, raw_size=%d, skipping...\n",
|
||||
perf_evsel__name(evsel), sample->tid,
|
||||
@@ -2728,7 +2728,7 @@ static int trace__add_syscall_newtp(struct trace *trace)
|
||||
* leading to the syscall, allow overriding that for
|
||||
* debugging reasons using --kernel_syscall_callchains
|
||||
*/
|
||||
sys_exit->attr.exclude_callchain_kernel = 1;
|
||||
sys_exit->core.attr.exclude_callchain_kernel = 1;
|
||||
}
|
||||
|
||||
trace->syscalls.events.sys_enter = sys_enter;
|
||||
@@ -3414,18 +3414,18 @@ static int trace__run(struct trace *trace, int argc, const char **argv)
|
||||
|
||||
trace->multiple_threads = thread_map__pid(evlist->threads, 0) == -1 ||
|
||||
evlist->threads->nr > 1 ||
|
||||
perf_evlist__first(evlist)->attr.inherit;
|
||||
perf_evlist__first(evlist)->core.attr.inherit;
|
||||
|
||||
/*
|
||||
* Now that we already used evsel->attr to ask the kernel to setup the
|
||||
* events, lets reuse evsel->attr.sample_max_stack as the limit in
|
||||
* Now that we already used evsel->core.attr to ask the kernel to setup the
|
||||
* events, lets reuse evsel->core.attr.sample_max_stack as the limit in
|
||||
* trace__resolve_callchain(), allowing per-event max-stack settings
|
||||
* to override an explicitly set --max-stack global setting.
|
||||
*/
|
||||
evlist__for_each_entry(evlist, evsel) {
|
||||
if (evsel__has_callchain(evsel) &&
|
||||
evsel->attr.sample_max_stack == 0)
|
||||
evsel->attr.sample_max_stack = trace->max_stack;
|
||||
evsel->core.attr.sample_max_stack == 0)
|
||||
evsel->core.attr.sample_max_stack = trace->max_stack;
|
||||
}
|
||||
again:
|
||||
before = trace->nr_events;
|
||||
@@ -3618,10 +3618,10 @@ static int trace__replay(struct trace *trace)
|
||||
}
|
||||
|
||||
evlist__for_each_entry(session->evlist, evsel) {
|
||||
if (evsel->attr.type == PERF_TYPE_SOFTWARE &&
|
||||
(evsel->attr.config == PERF_COUNT_SW_PAGE_FAULTS_MAJ ||
|
||||
evsel->attr.config == PERF_COUNT_SW_PAGE_FAULTS_MIN ||
|
||||
evsel->attr.config == PERF_COUNT_SW_PAGE_FAULTS))
|
||||
if (evsel->core.attr.type == PERF_TYPE_SOFTWARE &&
|
||||
(evsel->core.attr.config == PERF_COUNT_SW_PAGE_FAULTS_MAJ ||
|
||||
evsel->core.attr.config == PERF_COUNT_SW_PAGE_FAULTS_MIN ||
|
||||
evsel->core.attr.config == PERF_COUNT_SW_PAGE_FAULTS))
|
||||
evsel->handler = trace__pgfault;
|
||||
}
|
||||
|
||||
|
||||
@@ -3,7 +3,8 @@
|
||||
#include <linux/list.h>
|
||||
#include <internal/evsel.h>
|
||||
|
||||
void perf_evsel__init(struct perf_evsel *evsel)
|
||||
void perf_evsel__init(struct perf_evsel *evsel, struct perf_event_attr *attr)
|
||||
{
|
||||
INIT_LIST_HEAD(&evsel->node);
|
||||
evsel->attr = *attr;
|
||||
}
|
||||
|
||||
@@ -2,8 +2,12 @@
|
||||
#ifndef __LIBPERF_INTERNAL_EVSEL_H
|
||||
#define __LIBPERF_INTERNAL_EVSEL_H
|
||||
|
||||
#include <linux/types.h>
|
||||
#include <linux/perf_event.h>
|
||||
|
||||
struct perf_evsel {
|
||||
struct list_head node;
|
||||
struct perf_event_attr attr;
|
||||
};
|
||||
|
||||
#endif /* __LIBPERF_INTERNAL_EVSEL_H */
|
||||
|
||||
@@ -5,7 +5,9 @@
|
||||
#include <perf/core.h>
|
||||
|
||||
struct perf_evsel;
|
||||
struct perf_event_attr;
|
||||
|
||||
LIBPERF_API void perf_evsel__init(struct perf_evsel *evsel);
|
||||
LIBPERF_API void perf_evsel__init(struct perf_evsel *evsel,
|
||||
struct perf_event_attr *attr);
|
||||
|
||||
#endif /* __LIBPERF_EVSEL_H */
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user