Move perf_sample__parse function arguments into
struct parse_args to be able to pass other sample
type than the one in perf_evsel.

Link: http://lkml.kernel.org/n/[email protected]
Signed-off-by: Jiri Olsa <[email protected]>
---
 tools/perf/util/evsel.c | 27 ++++++++++++++++++++-------
 1 file changed, 20 insertions(+), 7 deletions(-)

diff --git a/tools/perf/util/evsel.c b/tools/perf/util/evsel.c
index 5a95839994a1..035da5d1fdd3 100644
--- a/tools/perf/util/evsel.c
+++ b/tools/perf/util/evsel.c
@@ -2045,13 +2045,21 @@ perf_event__check_size(union perf_event *event, 
unsigned int sample_size)
        return 0;
 }
 
+struct parse_args {
+       struct perf_evsel       *evsel;
+       union perf_event        *event;
+       const u64               *array;
+       u64                      type;
+};
+
 static int
-perf_sample__parse(struct perf_sample *data, struct perf_evsel *evsel,
-                  union perf_event *event)
+perf_sample__parse(struct perf_sample *data, struct parse_args *arg)
 {
-       u64 type = evsel->attr.sample_type;
+       struct perf_evsel *evsel = arg->evsel;
+       union  perf_event *event = arg->event;
+       u64 type                 = arg->type;
+       const u64 *array         = arg->array;
        bool swapped = evsel->needs_swap;
-       const u64 *array;
        u16 max_size = event->header.size;
        const void *endp = (void *)event + max_size;
        u64 sz;
@@ -2062,8 +2070,6 @@ perf_sample__parse(struct perf_sample *data, struct 
perf_evsel *evsel,
         */
        union u64_swap u;
 
-       array = event->sample.array;
-
        if (type & PERF_SAMPLE_IDENTIFIER) {
                data->id = *array;
                array++;
@@ -2310,6 +2316,13 @@ perf_sample__parse(struct perf_sample *data, struct 
perf_evsel *evsel,
 int perf_evsel__parse_sample(struct perf_evsel *evsel, union perf_event *event,
                             struct perf_sample *data)
 {
+       struct parse_args arg = {
+               .evsel = evsel,
+               .event = event,
+               .array = event->sample.array,
+               .type  = evsel->attr.sample_type,
+       };
+
        memset(data, 0, sizeof(*data));
        data->cpu = data->pid = data->tid = -1;
        data->stream_id = data->id = data->time = -1ULL;
@@ -2328,7 +2341,7 @@ int perf_evsel__parse_sample(struct perf_evsel *evsel, 
union perf_event *event,
        if (perf_event__check_size(event, evsel->sample_size))
                return -EFAULT;
 
-       return perf_sample__parse(data, evsel, event);
+       return perf_sample__parse(data, &arg);
 }
 
 int perf_evsel__parse_sample_timestamp(struct perf_evsel *evsel,
-- 
2.13.6

Reply via email to