perf auxtrace: Make auxtrace_queues__add_buffer() return buffer_ptr
authorAdrian Hunter <adrian.hunter@intel.com>
Tue, 6 Mar 2018 09:13:16 +0000 (11:13 +0200)
committerArnaldo Carvalho de Melo <acme@redhat.com>
Wed, 7 Mar 2018 13:22:27 +0000 (10:22 -0300)
In preparation for supporting AUX area sampling buffers,
auxtrace_queues__add_buffer() needs to be more generic. To that end, make
it return buffer_ptr instead of the caller.

Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
Cc: Jiri Olsa <jolsa@redhat.com>
Link: http://lkml.kernel.org/r/1520327598-1317-6-git-send-email-adrian.hunter@intel.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
tools/perf/util/auxtrace.c

index 6ea840e..fb357a0 100644 (file)
@@ -305,8 +305,11 @@ static int auxtrace_queues__split_buffer(struct auxtrace_queues *queues,
 static int auxtrace_queues__add_buffer(struct auxtrace_queues *queues,
                                       struct perf_session *session,
                                       unsigned int idx,
-                                      struct auxtrace_buffer *buffer)
+                                      struct auxtrace_buffer *buffer,
+                                      struct auxtrace_buffer **buffer_ptr)
 {
+       int err;
+
        if (session->one_mmap) {
                buffer->data = buffer->data_offset - session->one_mmap_offset +
                               session->one_mmap_addr;
@@ -317,14 +320,20 @@ static int auxtrace_queues__add_buffer(struct auxtrace_queues *queues,
                buffer->data_needs_freeing = true;
        } else if (BITS_PER_LONG == 32 &&
                   buffer->size > BUFFER_LIMIT_FOR_32_BIT) {
-               int err;
-
                err = auxtrace_queues__split_buffer(queues, idx, buffer);
                if (err)
                        return err;
        }
 
-       return auxtrace_queues__queue_buffer(queues, idx, buffer);
+       err = auxtrace_queues__queue_buffer(queues, idx, buffer);
+       if (err)
+               return err;
+
+       /* FIXME: Doesn't work for split buffer */
+       if (buffer_ptr)
+               *buffer_ptr = buffer;
+
+       return 0;
 }
 
 static bool filter_cpu(struct perf_session *session, int cpu)
@@ -359,13 +368,11 @@ int auxtrace_queues__add_event(struct auxtrace_queues *queues,
        buffer->size = event->auxtrace.size;
        idx = event->auxtrace.idx;
 
-       err = auxtrace_queues__add_buffer(queues, session, idx, buffer);
+       err = auxtrace_queues__add_buffer(queues, session, idx, buffer,
+                                         buffer_ptr);
        if (err)
                goto out_err;
 
-       if (buffer_ptr)
-               *buffer_ptr = buffer;
-
        return 0;
 
 out_err: