perf tools: Add kernel AUX area sampling definitions
Add kernel AUX area sampling definitions, which brings perf_event.h into line with the kernel version. New sample type PERF_SAMPLE_AUX requests a sample of the AUX area buffer. New perf_event_attr member 'aux_sample_size' specifies the desired size of the sample. Also add support for parsing samples containing AUX area data i.e. PERF_SAMPLE_AUX. Committer notes: I squashed the first two patches in this series to avoid breaking automatic bisection, i.e. after applying only the original first patch in this series we would have: # perf test -v parsing 26: Sample parsing : --- start --- test child forked, pid 17018 sample format has changed, some new PERF_SAMPLE_ bit was introduced - test needs updating test child finished with -1 ---- end ---- Sample parsing: FAILED! # With the two paches combined: # perf test parsing 26: Sample parsing : Ok # Signed-off-by: Adrian Hunter <adrian.hunter@intel.com> Tested-by: Arnaldo Carvalho de Melo <acme@redhat.com> Cc: Jiri Olsa <jolsa@redhat.com> Link: http://lore.kernel.org/lkml/20191115124225.5247-3-adrian.hunter@intel.com Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:

committed by
Arnaldo Carvalho de Melo

parent
848a5e507e
commit
98dcf14d7f
@@ -5,7 +5,7 @@ group_fd=-1
|
||||
flags=0|8
|
||||
cpu=*
|
||||
type=0|1
|
||||
size=112
|
||||
size=120
|
||||
config=0
|
||||
sample_period=*
|
||||
sample_type=263
|
||||
|
@@ -5,7 +5,7 @@ group_fd=-1
|
||||
flags=0|8
|
||||
cpu=*
|
||||
type=0
|
||||
size=112
|
||||
size=120
|
||||
config=0
|
||||
sample_period=0
|
||||
sample_type=65536
|
||||
|
@@ -150,6 +150,15 @@ static bool samples_same(const struct perf_sample *s1,
|
||||
if (type & PERF_SAMPLE_PHYS_ADDR)
|
||||
COMP(phys_addr);
|
||||
|
||||
if (type & PERF_SAMPLE_AUX) {
|
||||
COMP(aux_sample.size);
|
||||
if (memcmp(s1->aux_sample.data, s2->aux_sample.data,
|
||||
s1->aux_sample.size)) {
|
||||
pr_debug("Samples differ at 'aux_sample'\n");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -182,6 +191,7 @@ static int do_test(u64 sample_type, u64 sample_regs, u64 read_format)
|
||||
u64 regs[64];
|
||||
const u64 raw_data[] = {0x123456780a0b0c0dULL, 0x1102030405060708ULL};
|
||||
const u64 data[] = {0x2211443366558877ULL, 0, 0xaabbccddeeff4321ULL};
|
||||
const u64 aux_data[] = {0xa55a, 0, 0xeeddee, 0x0282028202820282};
|
||||
struct perf_sample sample = {
|
||||
.ip = 101,
|
||||
.pid = 102,
|
||||
@@ -218,6 +228,10 @@ static int do_test(u64 sample_type, u64 sample_regs, u64 read_format)
|
||||
.regs = regs,
|
||||
},
|
||||
.phys_addr = 113,
|
||||
.aux_sample = {
|
||||
.size = sizeof(aux_data),
|
||||
.data = (void *)aux_data,
|
||||
},
|
||||
};
|
||||
struct sample_read_value values[] = {{1, 5}, {9, 3}, {2, 7}, {6, 4},};
|
||||
struct perf_sample sample_out;
|
||||
@@ -317,7 +331,7 @@ int test__sample_parsing(struct test *test __maybe_unused, int subtest __maybe_u
|
||||
* were added. Please actually update the test rather than just change
|
||||
* the condition below.
|
||||
*/
|
||||
if (PERF_SAMPLE_MAX > PERF_SAMPLE_PHYS_ADDR << 1) {
|
||||
if (PERF_SAMPLE_MAX > PERF_SAMPLE_AUX << 1) {
|
||||
pr_debug("sample format has changed, some new PERF_SAMPLE_ bit was introduced - test needs updating\n");
|
||||
return -1;
|
||||
}
|
||||
|
Reference in New Issue
Block a user