@@ -19,6 +19,7 @@
#include <ctype.h>
#include <errno.h>
+#include "list.h"
#include "trace-local.h"
static unsigned int page_size;
@@ -49,6 +50,26 @@ struct cpu_data {
char *file;
};
+struct handle_list {
+ struct list_head list;
+ const char *name;
+ struct tracecmd_input *handle;
+};
+
+static struct list_head handle_list;
+
+static void add_handle(struct tracecmd_input *handle, const char *name)
+{
+ struct handle_list *item;
+
+ item = calloc(1, sizeof(*item));
+ if (!item)
+ die("Failed ot allocate");
+ item->handle = handle;
+ item->name = name;
+ list_add_tail(&item->list, &handle_list);
+}
+
static int create_type_len(struct tep_handle *pevent, int time, int len)
{
static int bigendian = -1;
@@ -450,6 +471,7 @@ void trace_split (int argc, char **argv)
char *output_file;
enum split_types split_type = SPLIT_NONE;
enum split_types type = SPLIT_NONE;
+ int instances;
int count;
int repeat = 0;
int percpu = 0;
@@ -457,6 +479,8 @@ void trace_split (int argc, char **argv)
int ac;
int c;
+ list_head_init(&handle_list);
+
if (strcmp(argv[1], "split") != 0)
usage(argv);
@@ -561,6 +585,26 @@ void trace_split (int argc, char **argv)
die("Failed to allocate for %s", output);
c = 1;
+ add_handle(handle, NULL);
+ instances = tracecmd_buffer_instances(handle);
+ if (instances) {
+ struct tracecmd_input *new_handle;
+ const char *name;
+ int i;
+
+ for (i = 0; i < instances; i++) {
+ name = tracecmd_buffer_instance_name(handle, i);
+ if (!name)
+ die("error in reading buffer instance");
+ new_handle = tracecmd_buffer_instance_handle(handle, i);
+ if (!new_handle) {
+ warning("could not retrieve handle %s", name);
+ continue;
+ }
+ add_handle(new_handle, name);
+ }
+ }
+
do {
if (repeat)
sprintf(output_file, "%s.%04d", output, c++);
To prepare handling of multiple instances, store instance handles in a local list, similarly to what is currently done in tracecmd/trace-read.c. To help achieve this goal, add a 'struct handle_list' and a add_handle() function. Signed-off-by: Pierre Gondois <pierre.gondois@arm.com> --- tracecmd/trace-split.c | 44 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+)