Message ID | 20210912232056.1420052-1-giulio.benetti@benettiengineering.com |
---|---|
State | Accepted |
Headers | show |
Series | [1/2] package/trace-cmd: bump to version 2.9.5 | expand |
Giulio, All, On 2021-09-13 01:20 +0200, Giulio Benetti spake thusly: > Update to version 2.9.5 and remove local patches that have been upstreamed. > > Signed-off-by: Giulio Benetti <giulio.benetti@benettiengineering.com> Series of two patches applied to master, thanks. Regards, Yann E. MORIN. > --- > ...01-trace-cmd-libtracecmd-API-cleanup.patch | 1486 ----------------- > ...make-it-build-against-musl-C-library.patch | 140 -- > ...dd_event_pid-out-of-ifndef-NO_PTRACE.patch | 51 - > package/trace-cmd/trace-cmd.hash | 2 +- > package/trace-cmd/trace-cmd.mk | 2 +- > 5 files changed, 2 insertions(+), 1679 deletions(-) > delete mode 100644 package/trace-cmd/0001-trace-cmd-libtracecmd-API-cleanup.patch > delete mode 100644 package/trace-cmd/0002-trace-cmd-make-it-build-against-musl-C-library.patch > delete mode 100644 package/trace-cmd/0003-trace-cmd-Move-add_event_pid-out-of-ifndef-NO_PTRACE.patch > > diff --git a/package/trace-cmd/0001-trace-cmd-libtracecmd-API-cleanup.patch b/package/trace-cmd/0001-trace-cmd-libtracecmd-API-cleanup.patch > deleted file mode 100644 > index a0dee21020..0000000000 > --- a/package/trace-cmd/0001-trace-cmd-libtracecmd-API-cleanup.patch > +++ /dev/null > @@ -1,1486 +0,0 @@ > -From 4b6e124d8b5a0dfd21aedf21d2c347fc5f0705a2 Mon Sep 17 00:00:00 2001 > -From: "Tzvetomir Stoyanov (VMware)" <tz.stoyanov@gmail.com> > -Date: Thu, 12 Nov 2020 13:52:08 +0200 > -Subject: [PATCH] trace-cmd: libtracecmd API cleanup > - > -The tracecmd library is used by trace-cmd and KernelShark applications. > -All APIs, that are not used by KernelShark are removed from trace-cmd.h. > -This is the first step to cleanup the library APIs and dependencies. > - > -Link: https://lore.kernel.org/linux-trace-devel/20201112115208.1250789-3-tz.stoyanov@gmail.com > - > -Signed-off-by: Tzvetomir Stoyanov (VMware) <tz.stoyanov@gmail.com> > -Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org> > -[Retrieved from: > -https://git.kernel.org/pub/scm/utils/trace-cmd/trace-cmd.git/commit/?id=4b6e124d8b5a0dfd21aedf21d2c347fc5f0705a2] > -Signed-off-by: Fabrice Fontaine <fontaine.fabrice@gmail.com> > ---- > - Makefile | 2 +- > - include/trace-cmd/trace-cmd.h | 488 +----------------- > - include/trace-cmd/trace-filter-hash.h | 64 --- > - include/trace-cmd/trace-hash.h | 55 -- > - include/trace-cmd/trace-msg.h | 15 - > - .../include/private/trace-cmd-private.h | 480 +++++++++++++++++ > - .../include/private/trace-filter-hash.h | 64 +++ > - lib/trace-cmd/include/private/trace-hash.h | 55 ++ > - lib/trace-cmd/include/private/trace-msg.h | 15 + > - lib/trace-cmd/include/trace-cmd-local.h | 2 + > - lib/trace-cmd/trace-ftrace.c | 2 +- > - lib/trace-cmd/trace-hooks.c | 2 +- > - lib/trace-cmd/trace-recorder.c | 2 +- > - lib/trace-cmd/trace-timesync.c | 2 +- > - lib/trace-cmd/trace-util.c | 2 +- > - lib/traceevent/plugins/plugin_python_loader.c | 3 +- > - python/ctracecmd.i | 1 + > - tracecmd/include/trace-local.h | 2 +- > - 18 files changed, 637 insertions(+), 619 deletions(-) > - delete mode 100644 include/trace-cmd/trace-filter-hash.h > - delete mode 100644 include/trace-cmd/trace-hash.h > - delete mode 100644 include/trace-cmd/trace-msg.h > - create mode 100644 lib/trace-cmd/include/private/trace-cmd-private.h > - create mode 100644 lib/trace-cmd/include/private/trace-filter-hash.h > - create mode 100644 lib/trace-cmd/include/private/trace-hash.h > - create mode 100644 lib/trace-cmd/include/private/trace-msg.h > - > -diff --git a/Makefile b/Makefile > -index b034042..6ef6936 100644 > ---- a/Makefile > -+++ b/Makefile > -@@ -224,6 +224,7 @@ INCLUDES += -I$(src)/include/trace-cmd > - INCLUDES += -I$(src)/include/tracefs > - INCLUDES += -I$(src)/lib/traceevent/include > - INCLUDES += -I$(src)/lib/trace-cmd/include > -+INCLUDES += -I$(src)/lib/trace-cmd/include/private > - INCLUDES += -I$(src)/lib/tracefs/include > - INCLUDES += -I$(src)/tracecmd/include > - INCLUDES += -I$(obj)/tracecmd/include > -@@ -417,7 +418,6 @@ install_libs: libs > - $(Q)$(call do_install,$(src)/include/traceevent/event-parse.h,$(includedir_SQ)/traceevent) > - $(Q)$(call do_install,$(src)/include/traceevent/trace-seq.h,$(includedir_SQ)/traceevent) > - $(Q)$(call do_install,$(src)/include/trace-cmd/trace-cmd.h,$(includedir_SQ)/trace-cmd) > -- $(Q)$(call do_install,$(src)/include/trace-cmd/trace-filter-hash.h,$(includedir_SQ)/trace-cmd) > - $(Q)$(call do_install,$(src)/include/tracefs/tracefs.h,$(includedir_SQ)/tracefs) > - $(Q)$(call do_install_ld,$(TRACE_LD_FILE),$(LD_SO_CONF_DIR),$(libdir_SQ)/trace-cmd) > - $(Q)$(call do_install_ld,$(TRACE_LD_FILE),$(LD_SO_CONF_DIR),$(libdir_SQ)/traceevent) > -diff --git a/include/trace-cmd/trace-cmd.h b/include/trace-cmd/trace-cmd.h > -index 3c2b474..9751ac3 100644 > ---- a/include/trace-cmd/trace-cmd.h > -+++ b/include/trace-cmd/trace-cmd.h > -@@ -9,497 +9,31 @@ > - #include "traceevent/event-parse.h" > - #include "tracefs/tracefs.h" > - > --#define TRACECMD_MAGIC { 23, 8, 68 } > -- > --#define ARRAY_SIZE(_a) (sizeof(_a) / sizeof((_a)[0])) > --#define __weak __attribute__((weak)) > --#define __noreturn __attribute__((noreturn)) > -- > --#define TRACECMD_ERR_MSK ((unsigned long)(-1) & ~((1UL << 14) - 1)) > --#define TRACECMD_ISERR(ptr) ((unsigned long)(ptr) > TRACECMD_ERR_MSK) > --#define TRACECMD_ERROR(ret) ((void *)((unsigned long)(ret) | TRACECMD_ERR_MSK)) > --#define TRACECMD_PTR2ERR(ptr) ((unisgned long)(ptr) & ~TRACECMD_ERR_MSK) > -- > --void tracecmd_parse_cmdlines(struct tep_handle *pevent, char *file, int size); > --void tracecmd_parse_proc_kallsyms(struct tep_handle *pevent, char *file, unsigned int size); > --void tracecmd_parse_ftrace_printk(struct tep_handle *pevent, char *file, unsigned int size); > --struct tep_plugin_list *trace_load_plugins(struct tep_handle *tep); > -- > --int *tracecmd_add_id(int *list, int id, int len); > -- > --enum { > -- RINGBUF_TYPE_PADDING = 29, > -- RINGBUF_TYPE_TIME_EXTEND = 30, > -- RINGBUF_TYPE_TIME_STAMP = 31, > --}; > -- > --void tracecmd_record_ref(struct tep_record *record); > --void free_record(struct tep_record *record); > -- > --void tracecmd_set_debug(bool set_debug); > --bool tracecmd_get_debug(void); > -- > - struct tracecmd_input; > --struct tracecmd_output; > --struct tracecmd_recorder; > --struct hook_list; > -- > --/* --- tracecmd plugins --- */ > -- > --extern int tracecmd_disable_sys_plugins; > --extern int tracecmd_disable_plugins; > -- > --enum tracecmd_context { > -- TRACECMD_INPUT, > -- TRACECMD_OUTPUT, > --}; > -- > --enum tracecmd_plugin_flag { > -- TRACECMD_DISABLE_SYS_PLUGINS = 1, > -- TRACECMD_DISABLE_PLUGINS = 1 << 1, > --}; > -- > --struct trace_plugin_context; > -- > --struct trace_plugin_context * > --tracecmd_plugin_context_create(enum tracecmd_context context, void *data); > -- > --void tracecmd_plugin_set_flag(struct trace_plugin_context *context, > -- enum tracecmd_plugin_flag flag); > -- > --#define TRACECMD_PLUGIN_LOADER tracecmd_plugin_loader > --#define TRACECMD_PLUGIN_UNLOADER tracecmd_plugin_unloader > --#define TRACECMD_PLUGIN_ALIAS tracecmd_plugin_alias > --#define _MAKE_STR(x) #x > --#define MAKE_STR(x) _MAKE_STR(x) > --#define TRACECMD_PLUGIN_LOADER_NAME MAKE_STR(TRACECMD_PLUGIN_LOADER) > --#define TRACECMD_PLUGIN_UNLOADER_NAME MAKE_STR(TRACECMD_PLUGIN_UNLOADER) > --#define TRACECMD_PLUGIN_ALIAS_NAME MAKE_STR(TRACECMD_PLUGIN_ALIAS) > -- > --typedef int (*tracecmd_plugin_load_func)(struct trace_plugin_context *trace); > --typedef int (*tracecmd_plugin_unload_func)(struct trace_plugin_context *trace); > -- > --struct tracecmd_input * > --tracecmd_plugin_context_input(struct trace_plugin_context *trace_context); > --struct tracecmd_output * > --tracecmd_plugin_context_output(struct trace_plugin_context *trace_context); > -- > --void tracecmd_set_quiet(struct tracecmd_output *handle, bool set_quiet); > --bool tracecmd_get_quiet(struct tracecmd_output *handle); > -- > --static inline int tracecmd_host_bigendian(void) > --{ > -- unsigned char str[] = { 0x1, 0x2, 0x3, 0x4 }; > -- unsigned int *ptr; > -- > -- ptr = (unsigned int *)str; > -- return *ptr == 0x01020304; > --} > -- > --/* --- Opening and Reading the trace.dat file --- */ > -- > --enum { > -- TRACECMD_OPTION_DONE, > -- TRACECMD_OPTION_DATE, > -- TRACECMD_OPTION_CPUSTAT, > -- TRACECMD_OPTION_BUFFER, > -- TRACECMD_OPTION_TRACECLOCK, > -- TRACECMD_OPTION_UNAME, > -- TRACECMD_OPTION_HOOK, > -- TRACECMD_OPTION_OFFSET, > -- TRACECMD_OPTION_CPUCOUNT, > -- TRACECMD_OPTION_VERSION, > -- TRACECMD_OPTION_PROCMAPS, > -- TRACECMD_OPTION_TRACEID, > -- TRACECMD_OPTION_TIME_SHIFT, > -- TRACECMD_OPTION_GUEST, > --}; > -- > --enum { > -- TRACECMD_FL_IGNORE_DATE = (1 << 0), > -- TRACECMD_FL_BUFFER_INSTANCE = (1 << 1), > -- TRACECMD_FL_LATENCY = (1 << 2), > -- TRACECMD_FL_IN_USECS = (1 << 3), > -- TRACECMD_FL_FLYRECORD = (1 << 4), > --}; > -- > --struct tracecmd_ftrace { > -- struct tracecmd_input *handle; > -- struct tep_event *fgraph_ret_event; > -- int fgraph_ret_id; > -- int long_size; > --}; > -- > --struct tracecmd_proc_addr_map { > -- unsigned long long start; > -- unsigned long long end; > -- char *lib_name; > --}; > -- > --typedef void (*tracecmd_show_data_func)(struct tracecmd_input *handle, > -- struct tep_record *record); > --typedef void (*tracecmd_handle_init_func)(struct tracecmd_input *handle, > -- struct hook_list *hook, int global); > - > --struct tracecmd_input *tracecmd_alloc(const char *file); > --struct tracecmd_input *tracecmd_alloc_fd(int fd); > --struct tracecmd_input *tracecmd_open(const char *file); > - struct tracecmd_input *tracecmd_open_head(const char *file); > --struct tracecmd_input *tracecmd_open_fd(int fd); > -+void tracecmd_close(struct tracecmd_input *handle); > - int tracecmd_pair_peer(struct tracecmd_input *handle, > - struct tracecmd_input *peer); > --void tracecmd_unpair_peer(struct tracecmd_input *handle); > --void tracecmd_ref(struct tracecmd_input *handle); > --void tracecmd_close(struct tracecmd_input *handle); > --int tracecmd_read_headers(struct tracecmd_input *handle); > --int tracecmd_get_parsing_failures(struct tracecmd_input *handle); > --int tracecmd_long_size(struct tracecmd_input *handle); > --int tracecmd_page_size(struct tracecmd_input *handle); > --int tracecmd_cpus(struct tracecmd_input *handle); > --int tracecmd_copy_headers(struct tracecmd_input *handle, int fd); > --void tracecmd_set_flag(struct tracecmd_input *handle, int flag); > --void tracecmd_clear_flag(struct tracecmd_input *handle, int flag); > --unsigned long tracecmd_get_flags(struct tracecmd_input *handle); > --unsigned long long tracecmd_get_traceid(struct tracecmd_input *handle); > --int tracecmd_get_guest_cpumap(struct tracecmd_input *handle, > -- unsigned long long trace_id, > -- const char **name, > -- int *vcpu_count, const int **cpu_pid); > --unsigned long long tracecmd_get_tsync_peer(struct tracecmd_input *handle); > --int tracecmd_enable_tsync(struct tracecmd_input *handle, bool enable); > -- > --void tracecmd_parse_trace_clock(struct tracecmd_input *handle, char *file, int size); > -- > --int tracecmd_make_pipe(struct tracecmd_input *handle, int cpu, int fd, int cpus); > -- > --int tracecmd_buffer_instances(struct tracecmd_input *handle); > --const char *tracecmd_buffer_instance_name(struct tracecmd_input *handle, int indx); > --struct tracecmd_input *tracecmd_buffer_instance_handle(struct tracecmd_input *handle, int indx); > --int tracecmd_is_buffer_instance(struct tracecmd_input *handle); > -- > --void tracecmd_set_ts_offset(struct tracecmd_input *handle, long long offset); > --void tracecmd_set_ts2secs(struct tracecmd_input *handle, unsigned long long hz); > -- > --void tracecmd_print_events(struct tracecmd_input *handle, const char *regex); > -- > --struct hook_list *tracecmd_hooks(struct tracecmd_input *handle); > - > - int tracecmd_init_data(struct tracecmd_input *handle); > -- > --void tracecmd_print_stats(struct tracecmd_input *handle); > --void tracecmd_print_uname(struct tracecmd_input *handle); > --void tracecmd_print_version(struct tracecmd_input *handle); > -- > - struct tep_record * > --tracecmd_peek_data(struct tracecmd_input *handle, int cpu); > -- > --static inline struct tep_record * > --tracecmd_peek_data_ref(struct tracecmd_input *handle, int cpu) > --{ > -- struct tep_record *rec = tracecmd_peek_data(handle, cpu); > -- if (rec) > -- rec->ref_count++; > -- return rec; > --} > -- > -+tracecmd_read_cpu_first(struct tracecmd_input *handle, int cpu); > - struct tep_record * > - tracecmd_read_data(struct tracecmd_input *handle, int cpu); > -- > --struct tep_record * > --tracecmd_read_prev(struct tracecmd_input *handle, struct tep_record *record); > -- > --struct tep_record * > --tracecmd_read_next_data(struct tracecmd_input *handle, int *rec_cpu); > -- > --struct tep_record * > --tracecmd_peek_next_data(struct tracecmd_input *handle, int *rec_cpu); > -- > - struct tep_record * > - tracecmd_read_at(struct tracecmd_input *handle, unsigned long long offset, > - int *cpu); > --struct tep_record * > --tracecmd_translate_data(struct tracecmd_input *handle, > -- void *ptr, int size); > --struct tep_record * > --tracecmd_read_cpu_first(struct tracecmd_input *handle, int cpu); > --struct tep_record * > --tracecmd_read_cpu_last(struct tracecmd_input *handle, int cpu); > --int tracecmd_refresh_record(struct tracecmd_input *handle, > -- struct tep_record *record); > -- > --int tracecmd_set_cpu_to_timestamp(struct tracecmd_input *handle, > -- int cpu, unsigned long long ts); > --void > --tracecmd_set_all_cpus_to_timestamp(struct tracecmd_input *handle, > -- unsigned long long time); > -- > --int tracecmd_set_cursor(struct tracecmd_input *handle, > -- int cpu, unsigned long long offset); > --unsigned long long > --tracecmd_get_cursor(struct tracecmd_input *handle, int cpu); > -+void free_record(struct tep_record *record); > - > --int tracecmd_ftrace_overrides(struct tracecmd_input *handle, struct tracecmd_ftrace *finfo); > - struct tep_handle *tracecmd_get_pevent(struct tracecmd_input *handle); > --bool tracecmd_get_use_trace_clock(struct tracecmd_input *handle); > --tracecmd_show_data_func > --tracecmd_get_show_data_func(struct tracecmd_input *handle); > --void tracecmd_set_show_data_func(struct tracecmd_input *handle, > -- tracecmd_show_data_func func); > -- > --int tracecmd_record_at_buffer_start(struct tracecmd_input *handle, struct tep_record *record); > --unsigned long long tracecmd_page_ts(struct tracecmd_input *handle, > -- struct tep_record *record); > --unsigned int tracecmd_record_ts_delta(struct tracecmd_input *handle, > -- struct tep_record *record); > -- > --struct tracecmd_proc_addr_map * > --tracecmd_search_task_map(struct tracecmd_input *handle, > -- int pid, unsigned long long addr); > --#ifndef SWIG > --/* hack for function graph work around */ > --extern __thread struct tracecmd_input *tracecmd_curr_thread_handle; > --#endif > -- > -- > --/* --- Creating and Writing the trace.dat file --- */ > -- > --struct tracecmd_event_list { > -- struct tracecmd_event_list *next; > -- const char *glob; > --}; > -- > --struct tracecmd_option; > --struct tracecmd_msg_handle; > -- > --struct tracecmd_output *tracecmd_create_file_latency(const char *output_file, int cpus); > --struct tracecmd_output *tracecmd_create_file(const char *output_file, > -- int cpus, char * const *cpu_data_files); > --struct tracecmd_output * > --tracecmd_create_file_glob(const char *output_file, > -- int cpus, char * const *cpu_data_files, > -- struct tracecmd_event_list *event_globs); > --struct tracecmd_output * > --tracecmd_create_init_file_glob(const char *output_file, > -- struct tracecmd_event_list *list); > --struct tracecmd_output *tracecmd_create_init_fd(int fd); > --struct tracecmd_output * > --tracecmd_create_init_fd_glob(int fd, struct tracecmd_event_list *list); > --struct tracecmd_output * > --tracecmd_create_init_fd_msg(struct tracecmd_msg_handle *msg_handle, > -- struct tracecmd_event_list *list); > --struct tracecmd_output *tracecmd_create_init_file(const char *output_file); > --struct tracecmd_output *tracecmd_create_init_file_override(const char *output_file, > -- const char *tracing_dir, > -- const char *kallsyms); > --struct tracecmd_option *tracecmd_add_option(struct tracecmd_output *handle, > -- unsigned short id, int size, > -- const void *data); > --struct tracecmd_option * > --tracecmd_add_option_v(struct tracecmd_output *handle, > -- unsigned short id, const struct iovec *vector, int count); > -- > --struct tracecmd_option *tracecmd_add_buffer_option(struct tracecmd_output *handle, > -- const char *name, int cpus); > -- > --int tracecmd_write_cpus(struct tracecmd_output *handle, int cpus); > --int tracecmd_write_options(struct tracecmd_output *handle); > --int tracecmd_append_options(struct tracecmd_output *handle); > --int tracecmd_update_option(struct tracecmd_output *handle, > -- struct tracecmd_option *option, int size, > -- const void *data); > --void tracecmd_output_close(struct tracecmd_output *handle); > --void tracecmd_output_free(struct tracecmd_output *handle); > --struct tracecmd_output *tracecmd_copy(struct tracecmd_input *ihandle, > -- const char *file); > -- > --int tracecmd_write_cpu_data(struct tracecmd_output *handle, > -- int cpus, char * const *cpu_data_files); > --int tracecmd_append_cpu_data(struct tracecmd_output *handle, > -- int cpus, char * const *cpu_data_files); > --int tracecmd_append_buffer_cpu_data(struct tracecmd_output *handle, > -- struct tracecmd_option *option, > -- int cpus, char * const *cpu_data_files); > -- > --struct tracecmd_output *tracecmd_get_output_handle_fd(int fd); > -- > --/* --- Reading the Fly Recorder Trace --- */ > -- > --enum { > -- TRACECMD_RECORD_NOSPLICE = (1 << 0), /* Use read instead of splice */ > -- TRACECMD_RECORD_SNAPSHOT = (1 << 1), /* Extract from snapshot */ > -- TRACECMD_RECORD_BLOCK = (1 << 2), /* Block on splice write */ > -- TRACECMD_RECORD_NOBRASS = (1 << 3), /* Splice directly without a brass pipe */ > --}; > -- > --void tracecmd_free_recorder(struct tracecmd_recorder *recorder); > --struct tracecmd_recorder *tracecmd_create_recorder(const char *file, int cpu, unsigned flags); > --struct tracecmd_recorder *tracecmd_create_recorder_fd(int fd, int cpu, unsigned flags); > --struct tracecmd_recorder *tracecmd_create_recorder_virt(const char *file, int cpu, unsigned flags, int trace_fd); > --struct tracecmd_recorder *tracecmd_create_recorder_maxkb(const char *file, int cpu, unsigned flags, int maxkb); > --struct tracecmd_recorder *tracecmd_create_buffer_recorder_fd(int fd, int cpu, unsigned flags, const char *buffer); > --struct tracecmd_recorder *tracecmd_create_buffer_recorder(const char *file, int cpu, unsigned flags, const char *buffer); > --struct tracecmd_recorder *tracecmd_create_buffer_recorder_maxkb(const char *file, int cpu, unsigned flags, const char *buffer, int maxkb); > -- > --int tracecmd_start_recording(struct tracecmd_recorder *recorder, unsigned long sleep); > --void tracecmd_stop_recording(struct tracecmd_recorder *recorder); > --long tracecmd_flush_recording(struct tracecmd_recorder *recorder); > -- > --enum tracecmd_msg_flags { > -- TRACECMD_MSG_FL_USE_TCP = 1 << 0, > --}; > -- > --/* for both client and server */ > --struct tracecmd_msg_handle { > -- int fd; > -- short cpu_count; > -- short version; /* Current protocol version */ > -- unsigned long flags; > -- bool done; > --}; > -- > --struct tracecmd_msg_handle * > -- tracecmd_msg_handle_alloc(int fd, unsigned long flags); > -- > --/* Closes the socket and frees the handle */ > --void tracecmd_msg_handle_close(struct tracecmd_msg_handle *msg_handle); > -- > --/* for clients */ > --int tracecmd_msg_send_init_data(struct tracecmd_msg_handle *msg_handle, > -- unsigned int **client_ports); > --int tracecmd_msg_data_send(struct tracecmd_msg_handle *msg_handle, > -- const char *buf, int size); > --int tracecmd_msg_finish_sending_data(struct tracecmd_msg_handle *msg_handle); > --int tracecmd_msg_send_close_msg(struct tracecmd_msg_handle *msg_handle); > --int tracecmd_msg_send_close_resp_msg(struct tracecmd_msg_handle *msg_handle); > --int tracecmd_msg_wait_close(struct tracecmd_msg_handle *msg_handle); > --int tracecmd_msg_wait_close_resp(struct tracecmd_msg_handle *msg_handle); > -- > --/* for server */ > --int tracecmd_msg_initial_setting(struct tracecmd_msg_handle *msg_handle); > --int tracecmd_msg_send_port_array(struct tracecmd_msg_handle *msg_handle, > -- unsigned *ports); > --int tracecmd_msg_read_data(struct tracecmd_msg_handle *msg_handle, int ofd); > --int tracecmd_msg_collect_data(struct tracecmd_msg_handle *msg_handle, int ofd); > --bool tracecmd_msg_done(struct tracecmd_msg_handle *msg_handle); > --void tracecmd_msg_set_done(struct tracecmd_msg_handle *msg_handle); > -- > --int tracecmd_msg_send_trace_req(struct tracecmd_msg_handle *msg_handle, > -- int argc, char **argv, bool use_fifos, > -- unsigned long long trace_id, > -- char *tsync_protos, > -- int tsync_protos_size); > --int tracecmd_msg_recv_trace_req(struct tracecmd_msg_handle *msg_handle, > -- int *argc, char ***argv, bool *use_fifos, > -- unsigned long long *trace_id, > -- char **tsync_protos, > -- unsigned int *tsync_protos_size); > -- > --int tracecmd_msg_send_trace_resp(struct tracecmd_msg_handle *msg_handle, > -- int nr_cpus, int page_size, > -- unsigned int *ports, bool use_fifos, > -- unsigned long long trace_id, > -- unsigned int tsync_proto, > -- unsigned int tsync_port); > --int tracecmd_msg_recv_trace_resp(struct tracecmd_msg_handle *msg_handle, > -- int *nr_cpus, int *page_size, > -- unsigned int **ports, bool *use_fifos, > -- unsigned long long *trace_id, > -- unsigned int *tsync_proto, > -- unsigned int *tsync_port); > -- > --int tracecmd_msg_send_time_sync(struct tracecmd_msg_handle *msg_handle, > -- unsigned int sync_protocol, > -- unsigned int sync_msg_id, > -- unsigned int payload_size, char *payload); > --int tracecmd_msg_recv_time_sync(struct tracecmd_msg_handle *msg_handle, > -- unsigned int *sync_protocol, > -- unsigned int *sync_msg_id, > -- unsigned int *payload_size, char **payload); > -- > --/* --- Timestamp synchronization --- */ > -- > --enum{ > -- TRACECMD_TIME_SYNC_PROTO_NONE = 0, > --}; > --enum{ > -- TRACECMD_TIME_SYNC_CMD_PROBE = 1, > -- TRACECMD_TIME_SYNC_CMD_STOP = 2, > --}; > -- > --#define TRACECMD_TIME_SYNC_PROTO_PTP_WEIGHT 10 > -- > --struct tracecmd_time_sync { > -- unsigned int sync_proto; > -- int loop_interval; > -- pthread_mutex_t lock; > -- pthread_cond_t cond; > -- char *clock_str; > -- struct tracecmd_msg_handle *msg_handle; > -- void *context; > --}; > -- > --void tracecmd_tsync_init(void); > --int tracecmd_tsync_proto_getall(char **proto_mask, int *words); > --unsigned int tracecmd_tsync_proto_select(char *proto_mask, int words); > --bool tsync_proto_is_supported(unsigned int proto_id); > --void tracecmd_tsync_with_host(struct tracecmd_time_sync *tsync); > --void tracecmd_tsync_with_guest(struct tracecmd_time_sync *tsync); > --int tracecmd_tsync_get_offsets(struct tracecmd_time_sync *tsync, > -- int *count, > -- long long **ts, long long **offsets); > --void tracecmd_tsync_free(struct tracecmd_time_sync *tsync); > -- > --/* --- Plugin handling --- */ > --extern struct tep_plugin_option trace_ftrace_options[]; > -- > --char **trace_util_find_plugin_files(const char *suffix); > --void trace_util_free_plugin_files(char **files); > -- > --/* Used for trace-cmd list */ > --void tracecmd_ftrace_load_options(void); > -- > --/* event hooks */ > -- > --struct hook_list { > -- struct hook_list *next; > -- struct buffer_instance *instance; > -- const char *hook; > -- char *str; > -- char *start_system; > -- char *start_event; > -- char *start_match; > -- char *end_system; > -- char *end_event; > -- char *end_match; > -- char *pid; > -- int migrate; > -- int global; > -- int stack; > --}; > -- > --struct hook_list *tracecmd_create_event_hook(const char *arg); > --void tracecmd_free_hooks(struct hook_list *hooks); > -- > --void tracecmd_plog(const char *fmt, ...); > --void tracecmd_plog_error(const char *fmt, ...); > --int tracecmd_set_logfile(char *logfile); > -- > --/* --- System --- */ > --unsigned long long tracecmd_generate_traceid(void); > --int tracecmd_count_cpus(void); > -- > --/* --- Hack! --- */ > --int tracecmd_blk_hack(struct tracecmd_input *handle); > -- > --/* --- Stack tracer functions --- */ > --int tracecmd_stack_tracer_status(int *status); > -- > --/* --- Debugging --- */ > --struct kbuffer *tracecmd_record_kbuf(struct tracecmd_input *handle, > -- struct tep_record *record); > --void *tracecmd_record_page(struct tracecmd_input *handle, > -- struct tep_record *record); > --void *tracecmd_record_offset(struct tracecmd_input *handle, > -- struct tep_record *record); > -+unsigned long long tracecmd_get_traceid(struct tracecmd_input *handle); > -+int tracecmd_get_guest_cpumap(struct tracecmd_input *handle, > -+ unsigned long long trace_id, > -+ const char **name, > -+ int *vcpu_count, const int **cpu_pid); > -+int tracecmd_buffer_instances(struct tracecmd_input *handle); > -+const char *tracecmd_buffer_instance_name(struct tracecmd_input *handle, int indx); > -+struct tracecmd_input *tracecmd_buffer_instance_handle(struct tracecmd_input *handle, int indx); > - > - #endif /* _TRACE_CMD_H */ > -diff --git a/include/trace-cmd/trace-filter-hash.h b/include/trace-cmd/trace-filter-hash.h > -deleted file mode 100644 > -index 4111c41..0000000 > ---- a/include/trace-cmd/trace-filter-hash.h > -+++ /dev/null > -@@ -1,64 +0,0 @@ > --/* SPDX-License-Identifier: LGPL-2.1 */ > --/* > -- * Copyright (C) 2009, 2010 Red Hat Inc, Steven Rostedt <srostedt@redhat.com> > -- * Copyright (C) 2018 VMware Inc, Steven Rostedt <rostedt@goodmis.org> > -- * > -- */ > --#ifndef _TRACE_FILTER_HASH_H > --#define _TRACE_FILTER_HASH_H > -- > --#include <stdint.h> > -- > --struct tracecmd_filter_id_item { > -- struct tracecmd_filter_id_item *next; > -- int id; > --}; > -- > --struct tracecmd_filter_id { > -- struct tracecmd_filter_id_item **hash; > -- int count; > --}; > -- > --/** > -- * tracecmd_quick_hash - A quick (non secured) hash alogirthm > -- * @val: The value to perform the hash on > -- * @bits: The size in bits you need to return > -- * > -- * This is a quick hashing function adapted from Donald E. Knuth's 32 > -- * bit multiplicative hash. See The Art of Computer Programming (TAOCP). > -- * Multiplication by the Prime number, closest to the golden ratio of > -- * 2^32. > -- * > -- * @bits is used to max the result for use cases that require > -- * a power of 2 return value that is less than 32 bits. Any value > -- * of @bits greater than 31 (or zero), will simply return the full hash on @val. > -- */ > --static inline uint32_t tracecmd_quick_hash(uint32_t val, unsigned int bits) > --{ > -- val *= UINT32_C(2654435761); > -- > -- if (!bits || bits > 31) > -- return val; > -- > -- return val & ((1 << bits) - 1); > --} > -- > --struct tracecmd_filter_id_item * > -- tracecmd_filter_id_find(struct tracecmd_filter_id *hash, int id); > --void tracecmd_filter_id_add(struct tracecmd_filter_id *hash, int id); > --void tracecmd_filter_id_remove(struct tracecmd_filter_id *hash, int id); > --void tracecmd_filter_id_clear(struct tracecmd_filter_id *hash); > --struct tracecmd_filter_id *tracecmd_filter_id_hash_alloc(void); > --void tracecmd_filter_id_hash_free(struct tracecmd_filter_id *hash); > --struct tracecmd_filter_id * > -- tracecmd_filter_id_hash_copy(struct tracecmd_filter_id *hash); > --int *tracecmd_filter_ids(struct tracecmd_filter_id *hash); > --int tracecmd_filter_id_compare(struct tracecmd_filter_id *hash1, > -- struct tracecmd_filter_id *hash2); > -- > --static inline int tracecmd_filter_task_count(struct tracecmd_filter_id *hash) > --{ > -- return hash->count; > --} > -- > --#endif /* _TRACE_FILTER_HASH_H */ > -diff --git a/include/trace-cmd/trace-hash.h b/include/trace-cmd/trace-hash.h > -deleted file mode 100644 > -index aa92cdf..0000000 > ---- a/include/trace-cmd/trace-hash.h > -+++ /dev/null > -@@ -1,55 +0,0 @@ > --/* SPDX-License-Identifier: GPL-2.0 */ > --/* > -- * Copyright (C) 2014 Red Hat Inc, Steven Rostedt <srostedt@redhat.com> > -- * > -- */ > --#ifndef _TRACE_HASH_H > --#define _TRACE_HASH_H > -- > --struct trace_hash_item { > -- struct trace_hash_item *next; > -- struct trace_hash_item *prev; > -- unsigned long long key; > --}; > -- > --struct trace_hash { > -- struct trace_hash_item **buckets; > -- int nr_buckets; > -- int power; > --}; > -- > --int trace_hash_init(struct trace_hash *hash, int buckets); > --void trace_hash_free(struct trace_hash *hash); > --int trace_hash_add(struct trace_hash *hash, struct trace_hash_item *item); > --int trace_hash_empty(struct trace_hash *hash); > -- > --static inline void trace_hash_del(struct trace_hash_item *item) > --{ > -- struct trace_hash_item *prev = item->prev; > -- > -- prev->next = item->next; > -- if (item->next) > -- item->next->prev = prev; > --} > -- > --#define trace_hash_for_each_bucket(bucket, hash) \ > -- for (bucket = (hash)->buckets; \ > -- (bucket) < (hash)->buckets + (hash)->nr_buckets; (bucket)++) > -- > --#define trace_hash_for_each_item(item, bucket) \ > -- for ((item = *(bucket)); item; item = (item)->next) > -- > --#define trace_hash_for_each_item_safe(item, n, bucket) \ > -- for ((item = *(bucket)), n = item ? item->next : NULL; item; \ > -- item = n, n = item ? (item)->next : NULL) > -- > --#define trace_hash_while_item(item, bucket) \ > -- while ((item = *(bucket))) > -- > --typedef int (*trace_hash_func)(struct trace_hash_item *item, void *data); > -- > --struct trace_hash_item * > --trace_hash_find(struct trace_hash *hash, unsigned long long key, > -- trace_hash_func match, void *data); > -- > --#endif /* _TRACE_HASH_H */ > -diff --git a/include/trace-cmd/trace-msg.h b/include/trace-cmd/trace-msg.h > -deleted file mode 100644 > -index aab8a69..0000000 > ---- a/include/trace-cmd/trace-msg.h > -+++ /dev/null > -@@ -1,15 +0,0 @@ > --#ifndef _TRACE_MSG_H_ > --#define _TRACE_MSG_H_ > -- > --#include <stdbool.h> > -- > --#define UDP_MAX_PACKET (65536 - 20) > --#define V3_MAGIC "766679\0" > --#define V3_CPU "-1V3" > -- > --#define V1_PROTOCOL 1 > --#define V3_PROTOCOL 3 > -- > --extern unsigned int page_size; > -- > --#endif /* _TRACE_MSG_H_ */ > -diff --git a/lib/trace-cmd/include/private/trace-cmd-private.h b/lib/trace-cmd/include/private/trace-cmd-private.h > -new file mode 100644 > -index 0000000..458760e > ---- /dev/null > -+++ b/lib/trace-cmd/include/private/trace-cmd-private.h > -@@ -0,0 +1,480 @@ > -+/* SPDX-License-Identifier: LGPL-2.1 */ > -+/* > -+ * Copyright (C) 2008, 2009, 2010 Red Hat Inc, Steven Rostedt <srostedt@redhat.com> > -+ * > -+ */ > -+#ifndef _TRACE_CMD_PRIVATE_H > -+#define _TRACE_CMD_PRIVATE_H > -+ > -+#include "traceevent/event-parse.h" > -+#include "trace-cmd/trace-cmd.h" > -+ > -+#define TRACECMD_MAGIC { 23, 8, 68 } > -+ > -+#define ARRAY_SIZE(_a) (sizeof(_a) / sizeof((_a)[0])) > -+#define __weak __attribute__((weak)) > -+#define __noreturn __attribute__((noreturn)) > -+ > -+#define TRACECMD_ERR_MSK ((unsigned long)(-1) & ~((1UL << 14) - 1)) > -+#define TRACECMD_ISERR(ptr) ((unsigned long)(ptr) > TRACECMD_ERR_MSK) > -+#define TRACECMD_ERROR(ret) ((void *)((unsigned long)(ret) | TRACECMD_ERR_MSK)) > -+#define TRACECMD_PTR2ERR(ptr) ((unisgned long)(ptr) & ~TRACECMD_ERR_MSK) > -+ > -+void tracecmd_parse_cmdlines(struct tep_handle *pevent, char *file, int size); > -+void tracecmd_parse_proc_kallsyms(struct tep_handle *pevent, char *file, unsigned int size); > -+void tracecmd_parse_ftrace_printk(struct tep_handle *pevent, char *file, unsigned int size); > -+struct tep_plugin_list *trace_load_plugins(struct tep_handle *tep); > -+ > -+int *tracecmd_add_id(int *list, int id, int len); > -+ > -+enum { > -+ RINGBUF_TYPE_PADDING = 29, > -+ RINGBUF_TYPE_TIME_EXTEND = 30, > -+ RINGBUF_TYPE_TIME_STAMP = 31, > -+}; > -+ > -+void tracecmd_record_ref(struct tep_record *record); > -+ > -+void tracecmd_set_debug(bool set_debug); > -+bool tracecmd_get_debug(void); > -+ > -+struct tracecmd_output; > -+struct tracecmd_recorder; > -+struct hook_list; > -+ > -+/* --- tracecmd plugins --- */ > -+ > -+extern int tracecmd_disable_sys_plugins; > -+extern int tracecmd_disable_plugins; > -+ > -+enum tracecmd_context { > -+ TRACECMD_INPUT, > -+ TRACECMD_OUTPUT, > -+}; > -+ > -+enum tracecmd_plugin_flag { > -+ TRACECMD_DISABLE_SYS_PLUGINS = 1, > -+ TRACECMD_DISABLE_PLUGINS = 1 << 1, > -+}; > -+ > -+struct trace_plugin_context; > -+ > -+struct trace_plugin_context * > -+tracecmd_plugin_context_create(enum tracecmd_context context, void *data); > -+ > -+void tracecmd_plugin_set_flag(struct trace_plugin_context *context, > -+ enum tracecmd_plugin_flag flag); > -+ > -+#define TRACECMD_PLUGIN_LOADER tracecmd_plugin_loader > -+#define TRACECMD_PLUGIN_UNLOADER tracecmd_plugin_unloader > -+#define TRACECMD_PLUGIN_ALIAS tracecmd_plugin_alias > -+#define _MAKE_STR(x) #x > -+#define MAKE_STR(x) _MAKE_STR(x) > -+#define TRACECMD_PLUGIN_LOADER_NAME MAKE_STR(TRACECMD_PLUGIN_LOADER) > -+#define TRACECMD_PLUGIN_UNLOADER_NAME MAKE_STR(TRACECMD_PLUGIN_UNLOADER) > -+#define TRACECMD_PLUGIN_ALIAS_NAME MAKE_STR(TRACECMD_PLUGIN_ALIAS) > -+ > -+typedef int (*tracecmd_plugin_load_func)(struct trace_plugin_context *trace); > -+typedef int (*tracecmd_plugin_unload_func)(struct trace_plugin_context *trace); > -+ > -+struct tracecmd_input * > -+tracecmd_plugin_context_input(struct trace_plugin_context *trace_context); > -+struct tracecmd_output * > -+tracecmd_plugin_context_output(struct trace_plugin_context *trace_context); > -+ > -+void tracecmd_set_quiet(struct tracecmd_output *handle, bool set_quiet); > -+bool tracecmd_get_quiet(struct tracecmd_output *handle); > -+ > -+static inline int tracecmd_host_bigendian(void) > -+{ > -+ unsigned char str[] = { 0x1, 0x2, 0x3, 0x4 }; > -+ unsigned int *ptr; > -+ > -+ ptr = (unsigned int *)str; > -+ return *ptr == 0x01020304; > -+} > -+ > -+/* --- Opening and Reading the trace.dat file --- */ > -+ > -+enum { > -+ TRACECMD_OPTION_DONE, > -+ TRACECMD_OPTION_DATE, > -+ TRACECMD_OPTION_CPUSTAT, > -+ TRACECMD_OPTION_BUFFER, > -+ TRACECMD_OPTION_TRACECLOCK, > -+ TRACECMD_OPTION_UNAME, > -+ TRACECMD_OPTION_HOOK, > -+ TRACECMD_OPTION_OFFSET, > -+ TRACECMD_OPTION_CPUCOUNT, > -+ TRACECMD_OPTION_VERSION, > -+ TRACECMD_OPTION_PROCMAPS, > -+ TRACECMD_OPTION_TRACEID, > -+ TRACECMD_OPTION_TIME_SHIFT, > -+ TRACECMD_OPTION_GUEST, > -+}; > -+ > -+enum { > -+ TRACECMD_FL_IGNORE_DATE = (1 << 0), > -+ TRACECMD_FL_BUFFER_INSTANCE = (1 << 1), > -+ TRACECMD_FL_LATENCY = (1 << 2), > -+ TRACECMD_FL_IN_USECS = (1 << 3), > -+ TRACECMD_FL_FLYRECORD = (1 << 4), > -+}; > -+ > -+struct tracecmd_ftrace { > -+ struct tracecmd_input *handle; > -+ struct tep_event *fgraph_ret_event; > -+ int fgraph_ret_id; > -+ int long_size; > -+}; > -+ > -+struct tracecmd_proc_addr_map { > -+ unsigned long long start; > -+ unsigned long long end; > -+ char *lib_name; > -+}; > -+ > -+typedef void (*tracecmd_show_data_func)(struct tracecmd_input *handle, > -+ struct tep_record *record); > -+typedef void (*tracecmd_handle_init_func)(struct tracecmd_input *handle, > -+ struct hook_list *hook, int global); > -+ > -+struct tracecmd_input *tracecmd_alloc(const char *file); > -+struct tracecmd_input *tracecmd_alloc_fd(int fd); > -+struct tracecmd_input *tracecmd_open(const char *file); > -+struct tracecmd_input *tracecmd_open_fd(int fd); > -+void tracecmd_unpair_peer(struct tracecmd_input *handle); > -+void tracecmd_ref(struct tracecmd_input *handle); > -+int tracecmd_read_headers(struct tracecmd_input *handle); > -+int tracecmd_get_parsing_failures(struct tracecmd_input *handle); > -+int tracecmd_long_size(struct tracecmd_input *handle); > -+int tracecmd_page_size(struct tracecmd_input *handle); > -+int tracecmd_cpus(struct tracecmd_input *handle); > -+int tracecmd_copy_headers(struct tracecmd_input *handle, int fd); > -+void tracecmd_set_flag(struct tracecmd_input *handle, int flag); > -+void tracecmd_clear_flag(struct tracecmd_input *handle, int flag); > -+unsigned long tracecmd_get_flags(struct tracecmd_input *handle); > -+unsigned long long tracecmd_get_tsync_peer(struct tracecmd_input *handle); > -+int tracecmd_enable_tsync(struct tracecmd_input *handle, bool enable); > -+ > -+void tracecmd_parse_trace_clock(struct tracecmd_input *handle, char *file, int size); > -+ > -+int tracecmd_make_pipe(struct tracecmd_input *handle, int cpu, int fd, int cpus); > -+ > -+int tracecmd_is_buffer_instance(struct tracecmd_input *handle); > -+ > -+void tracecmd_set_ts_offset(struct tracecmd_input *handle, long long offset); > -+void tracecmd_set_ts2secs(struct tracecmd_input *handle, unsigned long long hz); > -+ > -+void tracecmd_print_events(struct tracecmd_input *handle, const char *regex); > -+ > -+struct hook_list *tracecmd_hooks(struct tracecmd_input *handle); > -+ > -+void tracecmd_print_stats(struct tracecmd_input *handle); > -+void tracecmd_print_uname(struct tracecmd_input *handle); > -+void tracecmd_print_version(struct tracecmd_input *handle); > -+ > -+struct tep_record * > -+tracecmd_peek_data(struct tracecmd_input *handle, int cpu); > -+ > -+static inline struct tep_record * > -+tracecmd_peek_data_ref(struct tracecmd_input *handle, int cpu) > -+{ > -+ struct tep_record *rec = tracecmd_peek_data(handle, cpu); > -+ if (rec) > -+ rec->ref_count++; > -+ return rec; > -+} > -+ > -+struct tep_record * > -+tracecmd_read_prev(struct tracecmd_input *handle, struct tep_record *record); > -+ > -+struct tep_record * > -+tracecmd_read_next_data(struct tracecmd_input *handle, int *rec_cpu); > -+ > -+struct tep_record * > -+tracecmd_peek_next_data(struct tracecmd_input *handle, int *rec_cpu); > -+ > -+struct tep_record * > -+tracecmd_translate_data(struct tracecmd_input *handle, > -+ void *ptr, int size); > -+struct tep_record * > -+tracecmd_read_cpu_last(struct tracecmd_input *handle, int cpu); > -+int tracecmd_refresh_record(struct tracecmd_input *handle, > -+ struct tep_record *record); > -+ > -+int tracecmd_set_cpu_to_timestamp(struct tracecmd_input *handle, > -+ int cpu, unsigned long long ts); > -+void > -+tracecmd_set_all_cpus_to_timestamp(struct tracecmd_input *handle, > -+ unsigned long long time); > -+ > -+int tracecmd_set_cursor(struct tracecmd_input *handle, > -+ int cpu, unsigned long long offset); > -+unsigned long long > -+tracecmd_get_cursor(struct tracecmd_input *handle, int cpu); > -+ > -+int tracecmd_ftrace_overrides(struct tracecmd_input *handle, struct tracecmd_ftrace *finfo); > -+bool tracecmd_get_use_trace_clock(struct tracecmd_input *handle); > -+tracecmd_show_data_func > -+tracecmd_get_show_data_func(struct tracecmd_input *handle); > -+void tracecmd_set_show_data_func(struct tracecmd_input *handle, > -+ tracecmd_show_data_func func); > -+ > -+int tracecmd_record_at_buffer_start(struct tracecmd_input *handle, struct tep_record *record); > -+unsigned long long tracecmd_page_ts(struct tracecmd_input *handle, > -+ struct tep_record *record); > -+unsigned int tracecmd_record_ts_delta(struct tracecmd_input *handle, > -+ struct tep_record *record); > -+ > -+struct tracecmd_proc_addr_map * > -+tracecmd_search_task_map(struct tracecmd_input *handle, > -+ int pid, unsigned long long addr); > -+#ifndef SWIG > -+/* hack for function graph work around */ > -+extern __thread struct tracecmd_input *tracecmd_curr_thread_handle; > -+#endif > -+ > -+ > -+/* --- Creating and Writing the trace.dat file --- */ > -+ > -+struct tracecmd_event_list { > -+ struct tracecmd_event_list *next; > -+ const char *glob; > -+}; > -+ > -+struct tracecmd_option; > -+struct tracecmd_msg_handle; > -+ > -+struct tracecmd_output *tracecmd_create_file_latency(const char *output_file, int cpus); > -+struct tracecmd_output *tracecmd_create_file(const char *output_file, > -+ int cpus, char * const *cpu_data_files); > -+struct tracecmd_output * > -+tracecmd_create_file_glob(const char *output_file, > -+ int cpus, char * const *cpu_data_files, > -+ struct tracecmd_event_list *event_globs); > -+struct tracecmd_output * > -+tracecmd_create_init_file_glob(const char *output_file, > -+ struct tracecmd_event_list *list); > -+struct tracecmd_output *tracecmd_create_init_fd(int fd); > -+struct tracecmd_output * > -+tracecmd_create_init_fd_glob(int fd, struct tracecmd_event_list *list); > -+struct tracecmd_output * > -+tracecmd_create_init_fd_msg(struct tracecmd_msg_handle *msg_handle, > -+ struct tracecmd_event_list *list); > -+struct tracecmd_output *tracecmd_create_init_file(const char *output_file); > -+struct tracecmd_output *tracecmd_create_init_file_override(const char *output_file, > -+ const char *tracing_dir, > -+ const char *kallsyms); > -+struct tracecmd_option *tracecmd_add_option(struct tracecmd_output *handle, > -+ unsigned short id, int size, > -+ const void *data); > -+struct tracecmd_option * > -+tracecmd_add_option_v(struct tracecmd_output *handle, > -+ unsigned short id, const struct iovec *vector, int count); > -+ > -+struct tracecmd_option *tracecmd_add_buffer_option(struct tracecmd_output *handle, > -+ const char *name, int cpus); > -+ > -+int tracecmd_write_cpus(struct tracecmd_output *handle, int cpus); > -+int tracecmd_write_options(struct tracecmd_output *handle); > -+int tracecmd_append_options(struct tracecmd_output *handle); > -+int tracecmd_update_option(struct tracecmd_output *handle, > -+ struct tracecmd_option *option, int size, > -+ const void *data); > -+void tracecmd_output_close(struct tracecmd_output *handle); > -+void tracecmd_output_free(struct tracecmd_output *handle); > -+struct tracecmd_output *tracecmd_copy(struct tracecmd_input *ihandle, > -+ const char *file); > -+ > -+int tracecmd_write_cpu_data(struct tracecmd_output *handle, > -+ int cpus, char * const *cpu_data_files); > -+int tracecmd_append_cpu_data(struct tracecmd_output *handle, > -+ int cpus, char * const *cpu_data_files); > -+int tracecmd_append_buffer_cpu_data(struct tracecmd_output *handle, > -+ struct tracecmd_option *option, > -+ int cpus, char * const *cpu_data_files); > -+ > -+struct tracecmd_output *tracecmd_get_output_handle_fd(int fd); > -+ > -+/* --- Reading the Fly Recorder Trace --- */ > -+ > -+enum { > -+ TRACECMD_RECORD_NOSPLICE = (1 << 0), /* Use read instead of splice */ > -+ TRACECMD_RECORD_SNAPSHOT = (1 << 1), /* Extract from snapshot */ > -+ TRACECMD_RECORD_BLOCK = (1 << 2), /* Block on splice write */ > -+ TRACECMD_RECORD_NOBRASS = (1 << 3), /* Splice directly without a brass pipe */ > -+}; > -+ > -+void tracecmd_free_recorder(struct tracecmd_recorder *recorder); > -+struct tracecmd_recorder *tracecmd_create_recorder(const char *file, int cpu, unsigned flags); > -+struct tracecmd_recorder *tracecmd_create_recorder_fd(int fd, int cpu, unsigned flags); > -+struct tracecmd_recorder *tracecmd_create_recorder_virt(const char *file, int cpu, unsigned flags, int trace_fd); > -+struct tracecmd_recorder *tracecmd_create_recorder_maxkb(const char *file, int cpu, unsigned flags, int maxkb); > -+struct tracecmd_recorder *tracecmd_create_buffer_recorder_fd(int fd, int cpu, unsigned flags, const char *buffer); > -+struct tracecmd_recorder *tracecmd_create_buffer_recorder(const char *file, int cpu, unsigned flags, const char *buffer); > -+struct tracecmd_recorder *tracecmd_create_buffer_recorder_maxkb(const char *file, int cpu, unsigned flags, const char *buffer, int maxkb); > -+ > -+int tracecmd_start_recording(struct tracecmd_recorder *recorder, unsigned long sleep); > -+void tracecmd_stop_recording(struct tracecmd_recorder *recorder); > -+long tracecmd_flush_recording(struct tracecmd_recorder *recorder); > -+ > -+enum tracecmd_msg_flags { > -+ TRACECMD_MSG_FL_USE_TCP = 1 << 0, > -+}; > -+ > -+/* for both client and server */ > -+struct tracecmd_msg_handle { > -+ int fd; > -+ short cpu_count; > -+ short version; /* Current protocol version */ > -+ unsigned long flags; > -+ bool done; > -+}; > -+ > -+struct tracecmd_msg_handle * > -+tracecmd_msg_handle_alloc(int fd, unsigned long flags); > -+ > -+/* Closes the socket and frees the handle */ > -+void tracecmd_msg_handle_close(struct tracecmd_msg_handle *msg_handle); > -+ > -+/* for clients */ > -+int tracecmd_msg_send_init_data(struct tracecmd_msg_handle *msg_handle, > -+ unsigned int **client_ports); > -+int tracecmd_msg_data_send(struct tracecmd_msg_handle *msg_handle, > -+ const char *buf, int size); > -+int tracecmd_msg_finish_sending_data(struct tracecmd_msg_handle *msg_handle); > -+int tracecmd_msg_send_close_msg(struct tracecmd_msg_handle *msg_handle); > -+int tracecmd_msg_send_close_resp_msg(struct tracecmd_msg_handle *msg_handle); > -+int tracecmd_msg_wait_close(struct tracecmd_msg_handle *msg_handle); > -+int tracecmd_msg_wait_close_resp(struct tracecmd_msg_handle *msg_handle); > -+ > -+/* for server */ > -+int tracecmd_msg_initial_setting(struct tracecmd_msg_handle *msg_handle); > -+int tracecmd_msg_send_port_array(struct tracecmd_msg_handle *msg_handle, > -+ unsigned *ports); > -+int tracecmd_msg_read_data(struct tracecmd_msg_handle *msg_handle, int ofd); > -+int tracecmd_msg_collect_data(struct tracecmd_msg_handle *msg_handle, int ofd); > -+bool tracecmd_msg_done(struct tracecmd_msg_handle *msg_handle); > -+void tracecmd_msg_set_done(struct tracecmd_msg_handle *msg_handle); > -+ > -+int tracecmd_msg_send_trace_req(struct tracecmd_msg_handle *msg_handle, > -+ int argc, char **argv, bool use_fifos, > -+ unsigned long long trace_id, > -+ char *tsync_protos, > -+ int tsync_protos_size); > -+int tracecmd_msg_recv_trace_req(struct tracecmd_msg_handle *msg_handle, > -+ int *argc, char ***argv, bool *use_fifos, > -+ unsigned long long *trace_id, > -+ char **tsync_protos, > -+ unsigned int *tsync_protos_size); > -+ > -+int tracecmd_msg_send_trace_resp(struct tracecmd_msg_handle *msg_handle, > -+ int nr_cpus, int page_size, > -+ unsigned int *ports, bool use_fifos, > -+ unsigned long long trace_id, > -+ unsigned int tsync_proto, > -+ unsigned int tsync_port); > -+int tracecmd_msg_recv_trace_resp(struct tracecmd_msg_handle *msg_handle, > -+ int *nr_cpus, int *page_size, > -+ unsigned int **ports, bool *use_fifos, > -+ unsigned long long *trace_id, > -+ unsigned int *tsync_proto, > -+ unsigned int *tsync_port); > -+ > -+int tracecmd_msg_send_time_sync(struct tracecmd_msg_handle *msg_handle, > -+ unsigned int sync_protocol, > -+ unsigned int sync_msg_id, > -+ unsigned int payload_size, char *payload); > -+int tracecmd_msg_recv_time_sync(struct tracecmd_msg_handle *msg_handle, > -+ unsigned int *sync_protocol, > -+ unsigned int *sync_msg_id, > -+ unsigned int *payload_size, char **payload); > -+ > -+/* --- Timestamp synchronization --- */ > -+ > -+enum{ > -+ TRACECMD_TIME_SYNC_PROTO_NONE = 0, > -+}; > -+enum{ > -+ TRACECMD_TIME_SYNC_CMD_PROBE = 1, > -+ TRACECMD_TIME_SYNC_CMD_STOP = 2, > -+}; > -+ > -+#define TRACECMD_TIME_SYNC_PROTO_PTP_WEIGHT 10 > -+ > -+struct tracecmd_time_sync { > -+ unsigned int sync_proto; > -+ int loop_interval; > -+ pthread_mutex_t lock; > -+ pthread_cond_t cond; > -+ char *clock_str; > -+ struct tracecmd_msg_handle *msg_handle; > -+ void *context; > -+}; > -+ > -+void tracecmd_tsync_init(void); > -+int tracecmd_tsync_proto_getall(char **proto_mask, int *words); > -+unsigned int tracecmd_tsync_proto_select(char *proto_mask, int words); > -+bool tsync_proto_is_supported(unsigned int proto_id); > -+void tracecmd_tsync_with_host(struct tracecmd_time_sync *tsync); > -+void tracecmd_tsync_with_guest(struct tracecmd_time_sync *tsync); > -+int tracecmd_tsync_get_offsets(struct tracecmd_time_sync *tsync, > -+ int *count, > -+ long long **ts, long long **offsets); > -+void tracecmd_tsync_free(struct tracecmd_time_sync *tsync); > -+ > -+/* --- Plugin handling --- */ > -+extern struct tep_plugin_option trace_ftrace_options[]; > -+ > -+char **trace_util_find_plugin_files(const char *suffix); > -+void trace_util_free_plugin_files(char **files); > -+ > -+/* Used for trace-cmd list */ > -+void tracecmd_ftrace_load_options(void); > -+ > -+/* event hooks */ > -+ > -+struct hook_list { > -+ struct hook_list *next; > -+ struct buffer_instance *instance; > -+ const char *hook; > -+ char *str; > -+ char *start_system; > -+ char *start_event; > -+ char *start_match; > -+ char *end_system; > -+ char *end_event; > -+ char *end_match; > -+ char *pid; > -+ int migrate; > -+ int global; > -+ int stack; > -+}; > -+ > -+struct hook_list *tracecmd_create_event_hook(const char *arg); > -+void tracecmd_free_hooks(struct hook_list *hooks); > -+ > -+void tracecmd_plog(const char *fmt, ...); > -+void tracecmd_plog_error(const char *fmt, ...); > -+int tracecmd_set_logfile(char *logfile); > -+ > -+/* --- System --- */ > -+unsigned long long tracecmd_generate_traceid(void); > -+int tracecmd_count_cpus(void); > -+ > -+/* --- Hack! --- */ > -+int tracecmd_blk_hack(struct tracecmd_input *handle); > -+ > -+/* --- Stack tracer functions --- */ > -+int tracecmd_stack_tracer_status(int *status); > -+ > -+/* --- Debugging --- */ > -+struct kbuffer *tracecmd_record_kbuf(struct tracecmd_input *handle, > -+ struct tep_record *record); > -+void *tracecmd_record_page(struct tracecmd_input *handle, > -+ struct tep_record *record); > -+void *tracecmd_record_offset(struct tracecmd_input *handle, > -+ struct tep_record *record); > -+ > -+#endif /* _TRACE_CMD_PRIVATE_H */ > -diff --git a/lib/trace-cmd/include/private/trace-filter-hash.h b/lib/trace-cmd/include/private/trace-filter-hash.h > -new file mode 100644 > -index 0000000..4111c41 > ---- /dev/null > -+++ b/lib/trace-cmd/include/private/trace-filter-hash.h > -@@ -0,0 +1,64 @@ > -+/* SPDX-License-Identifier: LGPL-2.1 */ > -+/* > -+ * Copyright (C) 2009, 2010 Red Hat Inc, Steven Rostedt <srostedt@redhat.com> > -+ * Copyright (C) 2018 VMware Inc, Steven Rostedt <rostedt@goodmis.org> > -+ * > -+ */ > -+#ifndef _TRACE_FILTER_HASH_H > -+#define _TRACE_FILTER_HASH_H > -+ > -+#include <stdint.h> > -+ > -+struct tracecmd_filter_id_item { > -+ struct tracecmd_filter_id_item *next; > -+ int id; > -+}; > -+ > -+struct tracecmd_filter_id { > -+ struct tracecmd_filter_id_item **hash; > -+ int count; > -+}; > -+ > -+/** > -+ * tracecmd_quick_hash - A quick (non secured) hash alogirthm > -+ * @val: The value to perform the hash on > -+ * @bits: The size in bits you need to return > -+ * > -+ * This is a quick hashing function adapted from Donald E. Knuth's 32 > -+ * bit multiplicative hash. See The Art of Computer Programming (TAOCP). > -+ * Multiplication by the Prime number, closest to the golden ratio of > -+ * 2^32. > -+ * > -+ * @bits is used to max the result for use cases that require > -+ * a power of 2 return value that is less than 32 bits. Any value > -+ * of @bits greater than 31 (or zero), will simply return the full hash on @val. > -+ */ > -+static inline uint32_t tracecmd_quick_hash(uint32_t val, unsigned int bits) > -+{ > -+ val *= UINT32_C(2654435761); > -+ > -+ if (!bits || bits > 31) > -+ return val; > -+ > -+ return val & ((1 << bits) - 1); > -+} > -+ > -+struct tracecmd_filter_id_item * > -+ tracecmd_filter_id_find(struct tracecmd_filter_id *hash, int id); > -+void tracecmd_filter_id_add(struct tracecmd_filter_id *hash, int id); > -+void tracecmd_filter_id_remove(struct tracecmd_filter_id *hash, int id); > -+void tracecmd_filter_id_clear(struct tracecmd_filter_id *hash); > -+struct tracecmd_filter_id *tracecmd_filter_id_hash_alloc(void); > -+void tracecmd_filter_id_hash_free(struct tracecmd_filter_id *hash); > -+struct tracecmd_filter_id * > -+ tracecmd_filter_id_hash_copy(struct tracecmd_filter_id *hash); > -+int *tracecmd_filter_ids(struct tracecmd_filter_id *hash); > -+int tracecmd_filter_id_compare(struct tracecmd_filter_id *hash1, > -+ struct tracecmd_filter_id *hash2); > -+ > -+static inline int tracecmd_filter_task_count(struct tracecmd_filter_id *hash) > -+{ > -+ return hash->count; > -+} > -+ > -+#endif /* _TRACE_FILTER_HASH_H */ > -diff --git a/lib/trace-cmd/include/private/trace-hash.h b/lib/trace-cmd/include/private/trace-hash.h > -new file mode 100644 > -index 0000000..aa92cdf > ---- /dev/null > -+++ b/lib/trace-cmd/include/private/trace-hash.h > -@@ -0,0 +1,55 @@ > -+/* SPDX-License-Identifier: GPL-2.0 */ > -+/* > -+ * Copyright (C) 2014 Red Hat Inc, Steven Rostedt <srostedt@redhat.com> > -+ * > -+ */ > -+#ifndef _TRACE_HASH_H > -+#define _TRACE_HASH_H > -+ > -+struct trace_hash_item { > -+ struct trace_hash_item *next; > -+ struct trace_hash_item *prev; > -+ unsigned long long key; > -+}; > -+ > -+struct trace_hash { > -+ struct trace_hash_item **buckets; > -+ int nr_buckets; > -+ int power; > -+}; > -+ > -+int trace_hash_init(struct trace_hash *hash, int buckets); > -+void trace_hash_free(struct trace_hash *hash); > -+int trace_hash_add(struct trace_hash *hash, struct trace_hash_item *item); > -+int trace_hash_empty(struct trace_hash *hash); > -+ > -+static inline void trace_hash_del(struct trace_hash_item *item) > -+{ > -+ struct trace_hash_item *prev = item->prev; > -+ > -+ prev->next = item->next; > -+ if (item->next) > -+ item->next->prev = prev; > -+} > -+ > -+#define trace_hash_for_each_bucket(bucket, hash) \ > -+ for (bucket = (hash)->buckets; \ > -+ (bucket) < (hash)->buckets + (hash)->nr_buckets; (bucket)++) > -+ > -+#define trace_hash_for_each_item(item, bucket) \ > -+ for ((item = *(bucket)); item; item = (item)->next) > -+ > -+#define trace_hash_for_each_item_safe(item, n, bucket) \ > -+ for ((item = *(bucket)), n = item ? item->next : NULL; item; \ > -+ item = n, n = item ? (item)->next : NULL) > -+ > -+#define trace_hash_while_item(item, bucket) \ > -+ while ((item = *(bucket))) > -+ > -+typedef int (*trace_hash_func)(struct trace_hash_item *item, void *data); > -+ > -+struct trace_hash_item * > -+trace_hash_find(struct trace_hash *hash, unsigned long long key, > -+ trace_hash_func match, void *data); > -+ > -+#endif /* _TRACE_HASH_H */ > -diff --git a/lib/trace-cmd/include/private/trace-msg.h b/lib/trace-cmd/include/private/trace-msg.h > -new file mode 100644 > -index 0000000..aab8a69 > ---- /dev/null > -+++ b/lib/trace-cmd/include/private/trace-msg.h > -@@ -0,0 +1,15 @@ > -+#ifndef _TRACE_MSG_H_ > -+#define _TRACE_MSG_H_ > -+ > -+#include <stdbool.h> > -+ > -+#define UDP_MAX_PACKET (65536 - 20) > -+#define V3_MAGIC "766679\0" > -+#define V3_CPU "-1V3" > -+ > -+#define V1_PROTOCOL 1 > -+#define V3_PROTOCOL 3 > -+ > -+extern unsigned int page_size; > -+ > -+#endif /* _TRACE_MSG_H_ */ > -diff --git a/lib/trace-cmd/include/trace-cmd-local.h b/lib/trace-cmd/include/trace-cmd-local.h > -index 95dce66..d0a7365 100644 > ---- a/lib/trace-cmd/include/trace-cmd-local.h > -+++ b/lib/trace-cmd/include/trace-cmd-local.h > -@@ -6,6 +6,8 @@ > - #ifndef _TRACE_CMD_LOCAL_H > - #define _TRACE_CMD_LOCAL_H > - > -+#include "trace-cmd-private.h" > -+ > - /* Can be overridden */ > - void warning(const char *fmt, ...); > - > -diff --git a/lib/trace-cmd/trace-ftrace.c b/lib/trace-cmd/trace-ftrace.c > -index 20bf71f..df7335f 100644 > ---- a/lib/trace-cmd/trace-ftrace.c > -+++ b/lib/trace-cmd/trace-ftrace.c > -@@ -8,7 +8,7 @@ > - #include <string.h> > - #include <sys/param.h> > - > --#include "trace-cmd.h" > -+#include "trace-cmd-private.h" > - > - struct tep_plugin_option trace_ftrace_options[] = { > - { > -diff --git a/lib/trace-cmd/trace-hooks.c b/lib/trace-cmd/trace-hooks.c > -index 8c969a6..2dadf61 100644 > ---- a/lib/trace-cmd/trace-hooks.c > -+++ b/lib/trace-cmd/trace-hooks.c > -@@ -8,7 +8,7 @@ > - #include <stdlib.h> > - #include <ctype.h> > - > --#include "trace-cmd.h" > -+#include "trace-cmd-private.h" > - #include "event-utils.h" > - > - struct hook_list *tracecmd_create_event_hook(const char *arg) > -diff --git a/lib/trace-cmd/trace-recorder.c b/lib/trace-cmd/trace-recorder.c > -index 2a6e2b6..6b647d6 100644 > ---- a/lib/trace-cmd/trace-recorder.c > -+++ b/lib/trace-cmd/trace-recorder.c > -@@ -13,7 +13,7 @@ > - #include <errno.h> > - > - #include "tracefs.h" > --#include "trace-cmd.h" > -+#include "trace-cmd-private.h" > - #include "event-utils.h" > - > - /* F_GETPIPE_SZ was introduced in 2.6.35, older systems don't have it */ > -diff --git a/lib/trace-cmd/trace-timesync.c b/lib/trace-cmd/trace-timesync.c > -index 7a6a7eb..390e9d9 100644 > ---- a/lib/trace-cmd/trace-timesync.c > -+++ b/lib/trace-cmd/trace-timesync.c > -@@ -17,7 +17,7 @@ > - #include <errno.h> > - #include <pthread.h> > - > --#include "trace-cmd.h" > -+#include "trace-cmd-private.h" > - #include "tracefs.h" > - #include "event-utils.h" > - #include "trace-tsync-local.h" > -diff --git a/lib/trace-cmd/trace-util.c b/lib/trace-cmd/trace-util.c > -index 0ead96e..6b5d872 100644 > ---- a/lib/trace-cmd/trace-util.c > -+++ b/lib/trace-cmd/trace-util.c > -@@ -21,7 +21,7 @@ > - #include <sys/sysinfo.h> > - #include <time.h> > - > --#include "trace-cmd.h" > -+#include "trace-cmd-private.h" > - #include "event-utils.h" > - > - #define LOCAL_PLUGIN_DIR ".trace-cmd/plugins" > -diff --git a/lib/traceevent/plugins/plugin_python_loader.c b/lib/traceevent/plugins/plugin_python_loader.c > -index 776bf12..01bdfad 100644 > ---- a/lib/traceevent/plugins/plugin_python_loader.c > -+++ b/lib/traceevent/plugins/plugin_python_loader.c > -@@ -1,6 +1,7 @@ > - #include <Python.h> > - #include <stdio.h> > --#include "trace-cmd.h" > -+#include "event-parse.h" > -+#include "trace-cmd-private.h" > - > - #ifndef PYTHON_DIR > - #define PYTHON_DIR "." > -diff --git a/python/ctracecmd.i b/python/ctracecmd.i > -index 01cd0d5..5f7181c 100644 > ---- a/python/ctracecmd.i > -+++ b/python/ctracecmd.i > -@@ -15,6 +15,7 @@ > - > - %{ > - #include "trace-cmd.h" > -+#include "event-parse.h" > - #include "event-utils.h" > - #include <Python.h> > - %} > -diff --git a/tracecmd/include/trace-local.h b/tracecmd/include/trace-local.h > -index 207aa68..28d1b4e 100644 > ---- a/tracecmd/include/trace-local.h > -+++ b/tracecmd/include/trace-local.h > -@@ -9,7 +9,7 @@ > - #include <sys/types.h> > - #include <dirent.h> /* for DIR */ > - > --#include "trace-cmd.h" > -+#include "trace-cmd-private.h" > - #include "event-utils.h" > - > - #define TRACE_AGENT_DEFAULT_PORT 823 > --- > -2.29.2 > - > diff --git a/package/trace-cmd/0002-trace-cmd-make-it-build-against-musl-C-library.patch b/package/trace-cmd/0002-trace-cmd-make-it-build-against-musl-C-library.patch > deleted file mode 100644 > index 64021245dc..0000000000 > --- a/package/trace-cmd/0002-trace-cmd-make-it-build-against-musl-C-library.patch > +++ /dev/null > @@ -1,140 +0,0 @@ > -From 1a000636c1828eecdcec5360a51623ef4ffbff04 Mon Sep 17 00:00:00 2001 > -From: Beniamin Sandu <beniaminsandu@gmail.com> > -Date: Mon, 30 Nov 2020 14:27:55 +0200 > -Subject: [PATCH] trace-cmd: make it build against musl C library > - > -* add some missing headers and macros > -* set pthread affinity using pthread_setaffinity_np after creating the thread > -instead of pthread_attr_setaffinity_np (which seems to not be implemented > -in musl) > - > -Tested using https://musl.cc/x86_64-linux-musl-native.tgz > - > -Link: https://lore.kernel.org/linux-trace-devel/20201130122755.31000-1-beniaminsandu@gmail.com > - > -Reviewed-by: Tzvetomir Stoyanov (VMware) <tz.stoyanov@gmail.com> > -Signed-off-by: Beniamin Sandu <beniaminsandu@gmail.com> > -[ Fixed a whitespace issue ] > -Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org> > -[Retrieved from: > -https://git.kernel.org/pub/scm/utils/trace-cmd/trace-cmd.git/commit/?id=1a000636c1828eecdcec5360a51623ef4ffbff04] > -Signed-off-by: Fabrice Fontaine <fontaine.fabrice@gmail.com> > ---- > - .../include/private/trace-cmd-private.h | 1 + > - lib/trace-cmd/include/trace-cmd-local.h | 1 + > - lib/tracefs/include/tracefs-local.h | 12 ++++++++++++ > - lib/tracefs/tracefs-events.c | 1 + > - tracecmd/include/trace-local.h | 1 + > - tracecmd/trace-tsync.c | 16 +++++++++++----- > - 6 files changed, 27 insertions(+), 5 deletions(-) > - > -diff --git a/lib/trace-cmd/include/private/trace-cmd-private.h b/lib/trace-cmd/include/private/trace-cmd-private.h > -index 458760e5..a0dac5da 100644 > ---- a/lib/trace-cmd/include/private/trace-cmd-private.h > -+++ b/lib/trace-cmd/include/private/trace-cmd-private.h > -@@ -6,6 +6,7 @@ > - #ifndef _TRACE_CMD_PRIVATE_H > - #define _TRACE_CMD_PRIVATE_H > - > -+#include <sys/types.h> > - #include "traceevent/event-parse.h" > - #include "trace-cmd/trace-cmd.h" > - > -diff --git a/lib/trace-cmd/include/trace-cmd-local.h b/lib/trace-cmd/include/trace-cmd-local.h > -index d0a7365a..0cd27441 100644 > ---- a/lib/trace-cmd/include/trace-cmd-local.h > -+++ b/lib/trace-cmd/include/trace-cmd-local.h > -@@ -6,6 +6,7 @@ > - #ifndef _TRACE_CMD_LOCAL_H > - #define _TRACE_CMD_LOCAL_H > - > -+#include <byteswap.h> > - #include "trace-cmd-private.h" > - > - /* Can be overridden */ > -diff --git a/lib/tracefs/include/tracefs-local.h b/lib/tracefs/include/tracefs-local.h > -index 9cc371b4..bdbf89e8 100644 > ---- a/lib/tracefs/include/tracefs-local.h > -+++ b/lib/tracefs/include/tracefs-local.h > -@@ -13,4 +13,16 @@ void warning(const char *fmt, ...); > - int str_read_file(const char *file, char **buffer); > - char *trace_append_file(const char *dir, const char *name); > - > -+#ifndef ACCESSPERMS > -+#define ACCESSPERMS (S_IRWXU|S_IRWXG|S_IRWXO) /* 0777 */ > -+#endif > -+ > -+#ifndef ALLPERMS > -+#define ALLPERMS (S_ISUID|S_ISGID|S_ISVTX|S_IRWXU|S_IRWXG|S_IRWXO) /* 07777 */ > -+#endif > -+ > -+#ifndef DEFFILEMODE > -+#define DEFFILEMODE (S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH) /* 0666*/ > -+#endif > -+ > - #endif /* _TRACE_FS_LOCAL_H */ > -diff --git a/lib/tracefs/tracefs-events.c b/lib/tracefs/tracefs-events.c > -index 80a25ee5..a4e5215f 100644 > ---- a/lib/tracefs/tracefs-events.c > -+++ b/lib/tracefs/tracefs-events.c > -@@ -13,6 +13,7 @@ > - #include <errno.h> > - #include <sys/stat.h> > - #include <fcntl.h> > -+#include <limits.h> > - > - #include "kbuffer.h" > - #include "tracefs.h" > -diff --git a/tracecmd/include/trace-local.h b/tracecmd/include/trace-local.h > -index 28d1b4e0..85c7e03e 100644 > ---- a/tracecmd/include/trace-local.h > -+++ b/tracecmd/include/trace-local.h > -@@ -8,6 +8,7 @@ > - > - #include <sys/types.h> > - #include <dirent.h> /* for DIR */ > -+#include <limits.h> > - > - #include "trace-cmd-private.h" > - #include "event-utils.h" > -diff --git a/tracecmd/trace-tsync.c b/tracecmd/trace-tsync.c > -index e639788d..8b9083ae 100644 > ---- a/tracecmd/trace-tsync.c > -+++ b/tracecmd/trace-tsync.c > -@@ -104,13 +104,16 @@ int tracecmd_host_tsync(struct buffer_instance *instance, > - > - pthread_attr_init(&attrib); > - pthread_attr_setdetachstate(&attrib, PTHREAD_CREATE_JOINABLE); > -- if (!get_first_cpu(&pin_mask, &mask_size)) > -- pthread_attr_setaffinity_np(&attrib, mask_size, pin_mask); > - > - ret = pthread_create(&instance->tsync_thread, &attrib, > - tsync_host_thread, &instance->tsync); > -- if (!ret) > -+ > -+ if (!ret) { > -+ if (!get_first_cpu(&pin_mask, &mask_size)) > -+ pthread_setaffinity_np(instance->tsync_thread, mask_size, pin_mask); > - instance->tsync_thread_running = true; > -+ } > -+ > - if (pin_mask) > - CPU_FREE(pin_mask); > - pthread_attr_destroy(&attrib); > -@@ -243,11 +246,14 @@ unsigned int tracecmd_guest_tsync(char *tsync_protos, > - pthread_attr_init(&attrib); > - tsync->sync_proto = proto; > - pthread_attr_setdetachstate(&attrib, PTHREAD_CREATE_JOINABLE); > -- if (!get_first_cpu(&pin_mask, &mask_size)) > -- pthread_attr_setaffinity_np(&attrib, mask_size, pin_mask); > - > - ret = pthread_create(thr_id, &attrib, tsync_agent_thread, tsync); > - > -+ if (!ret) { > -+ if (!get_first_cpu(&pin_mask, &mask_size)) > -+ pthread_setaffinity_np(*thr_id, mask_size, pin_mask); > -+ } > -+ > - if (pin_mask) > - CPU_FREE(pin_mask); > - pthread_attr_destroy(&attrib); > diff --git a/package/trace-cmd/0003-trace-cmd-Move-add_event_pid-out-of-ifndef-NO_PTRACE.patch b/package/trace-cmd/0003-trace-cmd-Move-add_event_pid-out-of-ifndef-NO_PTRACE.patch > deleted file mode 100644 > index ca32e69ab1..0000000000 > --- a/package/trace-cmd/0003-trace-cmd-Move-add_event_pid-out-of-ifndef-NO_PTRACE.patch > +++ /dev/null > @@ -1,51 +0,0 @@ > -From 2f55ded528cfd8ef468bdd1f8bb82dcf1cfae04a Mon Sep 17 00:00:00 2001 > -From: "Steven Rostedt (VMware)" <rostedt@goodmis.org> > -Date: Wed, 16 Dec 2020 18:19:43 -0500 > -Subject: [PATCH] trace-cmd: Move add_event_pid() out of #ifndef NO_PTRACE > - > -When NO_PTRACE is defined, add_event_pid() is also not defined, but it is > -used outside of NO_PTRACE pre processor block. And this causes a > -"add_event_pid" not defined build failure. > - > -Link: https://lore.kernel.org/linux-trace-devel/20201216232145.010165486@goodmis.org > - > -Fixes: 0844cff1c ("trace-cmd: Fix "trace-cmd reset" command to restore the default value of set_event_pid") > -Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org> > -[Retrieved from: > -https://git.kernel.org/pub/scm/utils/trace-cmd/trace-cmd.git/commit/?id=2f55ded528cfd8ef468bdd1f8bb82dcf1cfae04a] > -Signed-off-by: Fabrice Fontaine <fontaine.fabrice@gmail.com> > ---- > - tracecmd/trace-record.c | 12 ++++++------ > - 1 file changed, 6 insertions(+), 6 deletions(-) > - > -diff --git a/tracecmd/trace-record.c b/tracecmd/trace-record.c > -index f8baed7d..e2d1cedf 100644 > ---- a/tracecmd/trace-record.c > -+++ b/tracecmd/trace-record.c > -@@ -1312,8 +1312,13 @@ static int trace_wait_for_processes(struct buffer_instance *instance) { > - free(pidfds); > - return ret; > - } > --#ifndef NO_PTRACE > - > -+static void add_event_pid(struct buffer_instance *instance, const char *buf) > -+{ > -+ tracefs_instance_file_write(instance->tracefs, "set_event_pid", buf); > -+} > -+ > -+#ifndef NO_PTRACE > - /** > - * append_pid_filter - add a new pid to an existing filter > - * @curr_filter: the filter to append to. If NULL, then allocate one > -@@ -1369,11 +1374,6 @@ static void update_sched_events(struct buffer_instance *instance, int pid) > - static int open_instance_fd(struct buffer_instance *instance, > - const char *file, int flags); > - > --static void add_event_pid(struct buffer_instance *instance, const char *buf) > --{ > -- tracefs_instance_file_write(instance->tracefs, "set_event_pid", buf); > --} > -- > - static void add_new_filter_child_pid(int pid, int child) > - { > - struct buffer_instance *instance; > diff --git a/package/trace-cmd/trace-cmd.hash b/package/trace-cmd/trace-cmd.hash > index 0afde6705e..78ff3472c3 100644 > --- a/package/trace-cmd/trace-cmd.hash > +++ b/package/trace-cmd/trace-cmd.hash > @@ -1,5 +1,5 @@ > # Locally computed > -sha256 8bab29530cd05272dccab48c9780644758e71ed990ce65c701b9095f7beae417 trace-cmd-trace-cmd-v2.9.1-br1.tar.gz > +sha256 026cce03b4ae61f19848646acecf151dd7dd62617859edcf73ae954eb65b2653 trace-cmd-trace-cmd-v2.9.5-br1.tar.gz > sha256 b1d04b850c1c7471b0f0896f6c6f0fcfc9f07e2dd183a5f5826af269fe9e88fb COPYING > sha256 70f297763149e72306919c924e164f83041d5e512868d4c8c1826c171b3e49f9 COPYING.LIB > sha256 f6b78c087c3ebdf0f3c13415070dd480a3f35d8fc76f3d02180a407c1c812f79 LICENSES/GPL-2.0 > diff --git a/package/trace-cmd/trace-cmd.mk b/package/trace-cmd/trace-cmd.mk > index bc431e5dd2..f9b54ed765 100644 > --- a/package/trace-cmd/trace-cmd.mk > +++ b/package/trace-cmd/trace-cmd.mk > @@ -4,7 +4,7 @@ > # > ################################################################################ > > -TRACE_CMD_VERSION = trace-cmd-v2.9.1 > +TRACE_CMD_VERSION = trace-cmd-v2.9.5 > TRACE_CMD_SITE = https://git.kernel.org/pub/scm/utils/trace-cmd/trace-cmd.git > TRACE_CMD_SITE_METHOD = git > TRACE_CMD_LICENSE = GPL-2.0, LGPL-2.1 > -- > 2.25.1 > > _______________________________________________ > buildroot mailing list > buildroot@lists.buildroot.org > https://lists.buildroot.org/mailman/listinfo/buildroot
diff --git a/package/trace-cmd/0001-trace-cmd-libtracecmd-API-cleanup.patch b/package/trace-cmd/0001-trace-cmd-libtracecmd-API-cleanup.patch deleted file mode 100644 index a0dee21020..0000000000 --- a/package/trace-cmd/0001-trace-cmd-libtracecmd-API-cleanup.patch +++ /dev/null @@ -1,1486 +0,0 @@ -From 4b6e124d8b5a0dfd21aedf21d2c347fc5f0705a2 Mon Sep 17 00:00:00 2001 -From: "Tzvetomir Stoyanov (VMware)" <tz.stoyanov@gmail.com> -Date: Thu, 12 Nov 2020 13:52:08 +0200 -Subject: [PATCH] trace-cmd: libtracecmd API cleanup - -The tracecmd library is used by trace-cmd and KernelShark applications. -All APIs, that are not used by KernelShark are removed from trace-cmd.h. -This is the first step to cleanup the library APIs and dependencies. - -Link: https://lore.kernel.org/linux-trace-devel/20201112115208.1250789-3-tz.stoyanov@gmail.com - -Signed-off-by: Tzvetomir Stoyanov (VMware) <tz.stoyanov@gmail.com> -Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org> -[Retrieved from: -https://git.kernel.org/pub/scm/utils/trace-cmd/trace-cmd.git/commit/?id=4b6e124d8b5a0dfd21aedf21d2c347fc5f0705a2] -Signed-off-by: Fabrice Fontaine <fontaine.fabrice@gmail.com> ---- - Makefile | 2 +- - include/trace-cmd/trace-cmd.h | 488 +----------------- - include/trace-cmd/trace-filter-hash.h | 64 --- - include/trace-cmd/trace-hash.h | 55 -- - include/trace-cmd/trace-msg.h | 15 - - .../include/private/trace-cmd-private.h | 480 +++++++++++++++++ - .../include/private/trace-filter-hash.h | 64 +++ - lib/trace-cmd/include/private/trace-hash.h | 55 ++ - lib/trace-cmd/include/private/trace-msg.h | 15 + - lib/trace-cmd/include/trace-cmd-local.h | 2 + - lib/trace-cmd/trace-ftrace.c | 2 +- - lib/trace-cmd/trace-hooks.c | 2 +- - lib/trace-cmd/trace-recorder.c | 2 +- - lib/trace-cmd/trace-timesync.c | 2 +- - lib/trace-cmd/trace-util.c | 2 +- - lib/traceevent/plugins/plugin_python_loader.c | 3 +- - python/ctracecmd.i | 1 + - tracecmd/include/trace-local.h | 2 +- - 18 files changed, 637 insertions(+), 619 deletions(-) - delete mode 100644 include/trace-cmd/trace-filter-hash.h - delete mode 100644 include/trace-cmd/trace-hash.h - delete mode 100644 include/trace-cmd/trace-msg.h - create mode 100644 lib/trace-cmd/include/private/trace-cmd-private.h - create mode 100644 lib/trace-cmd/include/private/trace-filter-hash.h - create mode 100644 lib/trace-cmd/include/private/trace-hash.h - create mode 100644 lib/trace-cmd/include/private/trace-msg.h - -diff --git a/Makefile b/Makefile -index b034042..6ef6936 100644 ---- a/Makefile -+++ b/Makefile -@@ -224,6 +224,7 @@ INCLUDES += -I$(src)/include/trace-cmd - INCLUDES += -I$(src)/include/tracefs - INCLUDES += -I$(src)/lib/traceevent/include - INCLUDES += -I$(src)/lib/trace-cmd/include -+INCLUDES += -I$(src)/lib/trace-cmd/include/private - INCLUDES += -I$(src)/lib/tracefs/include - INCLUDES += -I$(src)/tracecmd/include - INCLUDES += -I$(obj)/tracecmd/include -@@ -417,7 +418,6 @@ install_libs: libs - $(Q)$(call do_install,$(src)/include/traceevent/event-parse.h,$(includedir_SQ)/traceevent) - $(Q)$(call do_install,$(src)/include/traceevent/trace-seq.h,$(includedir_SQ)/traceevent) - $(Q)$(call do_install,$(src)/include/trace-cmd/trace-cmd.h,$(includedir_SQ)/trace-cmd) -- $(Q)$(call do_install,$(src)/include/trace-cmd/trace-filter-hash.h,$(includedir_SQ)/trace-cmd) - $(Q)$(call do_install,$(src)/include/tracefs/tracefs.h,$(includedir_SQ)/tracefs) - $(Q)$(call do_install_ld,$(TRACE_LD_FILE),$(LD_SO_CONF_DIR),$(libdir_SQ)/trace-cmd) - $(Q)$(call do_install_ld,$(TRACE_LD_FILE),$(LD_SO_CONF_DIR),$(libdir_SQ)/traceevent) -diff --git a/include/trace-cmd/trace-cmd.h b/include/trace-cmd/trace-cmd.h -index 3c2b474..9751ac3 100644 ---- a/include/trace-cmd/trace-cmd.h -+++ b/include/trace-cmd/trace-cmd.h -@@ -9,497 +9,31 @@ - #include "traceevent/event-parse.h" - #include "tracefs/tracefs.h" - --#define TRACECMD_MAGIC { 23, 8, 68 } -- --#define ARRAY_SIZE(_a) (sizeof(_a) / sizeof((_a)[0])) --#define __weak __attribute__((weak)) --#define __noreturn __attribute__((noreturn)) -- --#define TRACECMD_ERR_MSK ((unsigned long)(-1) & ~((1UL << 14) - 1)) --#define TRACECMD_ISERR(ptr) ((unsigned long)(ptr) > TRACECMD_ERR_MSK) --#define TRACECMD_ERROR(ret) ((void *)((unsigned long)(ret) | TRACECMD_ERR_MSK)) --#define TRACECMD_PTR2ERR(ptr) ((unisgned long)(ptr) & ~TRACECMD_ERR_MSK) -- --void tracecmd_parse_cmdlines(struct tep_handle *pevent, char *file, int size); --void tracecmd_parse_proc_kallsyms(struct tep_handle *pevent, char *file, unsigned int size); --void tracecmd_parse_ftrace_printk(struct tep_handle *pevent, char *file, unsigned int size); --struct tep_plugin_list *trace_load_plugins(struct tep_handle *tep); -- --int *tracecmd_add_id(int *list, int id, int len); -- --enum { -- RINGBUF_TYPE_PADDING = 29, -- RINGBUF_TYPE_TIME_EXTEND = 30, -- RINGBUF_TYPE_TIME_STAMP = 31, --}; -- --void tracecmd_record_ref(struct tep_record *record); --void free_record(struct tep_record *record); -- --void tracecmd_set_debug(bool set_debug); --bool tracecmd_get_debug(void); -- - struct tracecmd_input; --struct tracecmd_output; --struct tracecmd_recorder; --struct hook_list; -- --/* --- tracecmd plugins --- */ -- --extern int tracecmd_disable_sys_plugins; --extern int tracecmd_disable_plugins; -- --enum tracecmd_context { -- TRACECMD_INPUT, -- TRACECMD_OUTPUT, --}; -- --enum tracecmd_plugin_flag { -- TRACECMD_DISABLE_SYS_PLUGINS = 1, -- TRACECMD_DISABLE_PLUGINS = 1 << 1, --}; -- --struct trace_plugin_context; -- --struct trace_plugin_context * --tracecmd_plugin_context_create(enum tracecmd_context context, void *data); -- --void tracecmd_plugin_set_flag(struct trace_plugin_context *context, -- enum tracecmd_plugin_flag flag); -- --#define TRACECMD_PLUGIN_LOADER tracecmd_plugin_loader --#define TRACECMD_PLUGIN_UNLOADER tracecmd_plugin_unloader --#define TRACECMD_PLUGIN_ALIAS tracecmd_plugin_alias --#define _MAKE_STR(x) #x --#define MAKE_STR(x) _MAKE_STR(x) --#define TRACECMD_PLUGIN_LOADER_NAME MAKE_STR(TRACECMD_PLUGIN_LOADER) --#define TRACECMD_PLUGIN_UNLOADER_NAME MAKE_STR(TRACECMD_PLUGIN_UNLOADER) --#define TRACECMD_PLUGIN_ALIAS_NAME MAKE_STR(TRACECMD_PLUGIN_ALIAS) -- --typedef int (*tracecmd_plugin_load_func)(struct trace_plugin_context *trace); --typedef int (*tracecmd_plugin_unload_func)(struct trace_plugin_context *trace); -- --struct tracecmd_input * --tracecmd_plugin_context_input(struct trace_plugin_context *trace_context); --struct tracecmd_output * --tracecmd_plugin_context_output(struct trace_plugin_context *trace_context); -- --void tracecmd_set_quiet(struct tracecmd_output *handle, bool set_quiet); --bool tracecmd_get_quiet(struct tracecmd_output *handle); -- --static inline int tracecmd_host_bigendian(void) --{ -- unsigned char str[] = { 0x1, 0x2, 0x3, 0x4 }; -- unsigned int *ptr; -- -- ptr = (unsigned int *)str; -- return *ptr == 0x01020304; --} -- --/* --- Opening and Reading the trace.dat file --- */ -- --enum { -- TRACECMD_OPTION_DONE, -- TRACECMD_OPTION_DATE, -- TRACECMD_OPTION_CPUSTAT, -- TRACECMD_OPTION_BUFFER, -- TRACECMD_OPTION_TRACECLOCK, -- TRACECMD_OPTION_UNAME, -- TRACECMD_OPTION_HOOK, -- TRACECMD_OPTION_OFFSET, -- TRACECMD_OPTION_CPUCOUNT, -- TRACECMD_OPTION_VERSION, -- TRACECMD_OPTION_PROCMAPS, -- TRACECMD_OPTION_TRACEID, -- TRACECMD_OPTION_TIME_SHIFT, -- TRACECMD_OPTION_GUEST, --}; -- --enum { -- TRACECMD_FL_IGNORE_DATE = (1 << 0), -- TRACECMD_FL_BUFFER_INSTANCE = (1 << 1), -- TRACECMD_FL_LATENCY = (1 << 2), -- TRACECMD_FL_IN_USECS = (1 << 3), -- TRACECMD_FL_FLYRECORD = (1 << 4), --}; -- --struct tracecmd_ftrace { -- struct tracecmd_input *handle; -- struct tep_event *fgraph_ret_event; -- int fgraph_ret_id; -- int long_size; --}; -- --struct tracecmd_proc_addr_map { -- unsigned long long start; -- unsigned long long end; -- char *lib_name; --}; -- --typedef void (*tracecmd_show_data_func)(struct tracecmd_input *handle, -- struct tep_record *record); --typedef void (*tracecmd_handle_init_func)(struct tracecmd_input *handle, -- struct hook_list *hook, int global); - --struct tracecmd_input *tracecmd_alloc(const char *file); --struct tracecmd_input *tracecmd_alloc_fd(int fd); --struct tracecmd_input *tracecmd_open(const char *file); - struct tracecmd_input *tracecmd_open_head(const char *file); --struct tracecmd_input *tracecmd_open_fd(int fd); -+void tracecmd_close(struct tracecmd_input *handle); - int tracecmd_pair_peer(struct tracecmd_input *handle, - struct tracecmd_input *peer); --void tracecmd_unpair_peer(struct tracecmd_input *handle); --void tracecmd_ref(struct tracecmd_input *handle); --void tracecmd_close(struct tracecmd_input *handle); --int tracecmd_read_headers(struct tracecmd_input *handle); --int tracecmd_get_parsing_failures(struct tracecmd_input *handle); --int tracecmd_long_size(struct tracecmd_input *handle); --int tracecmd_page_size(struct tracecmd_input *handle); --int tracecmd_cpus(struct tracecmd_input *handle); --int tracecmd_copy_headers(struct tracecmd_input *handle, int fd); --void tracecmd_set_flag(struct tracecmd_input *handle, int flag); --void tracecmd_clear_flag(struct tracecmd_input *handle, int flag); --unsigned long tracecmd_get_flags(struct tracecmd_input *handle); --unsigned long long tracecmd_get_traceid(struct tracecmd_input *handle); --int tracecmd_get_guest_cpumap(struct tracecmd_input *handle, -- unsigned long long trace_id, -- const char **name, -- int *vcpu_count, const int **cpu_pid); --unsigned long long tracecmd_get_tsync_peer(struct tracecmd_input *handle); --int tracecmd_enable_tsync(struct tracecmd_input *handle, bool enable); -- --void tracecmd_parse_trace_clock(struct tracecmd_input *handle, char *file, int size); -- --int tracecmd_make_pipe(struct tracecmd_input *handle, int cpu, int fd, int cpus); -- --int tracecmd_buffer_instances(struct tracecmd_input *handle); --const char *tracecmd_buffer_instance_name(struct tracecmd_input *handle, int indx); --struct tracecmd_input *tracecmd_buffer_instance_handle(struct tracecmd_input *handle, int indx); --int tracecmd_is_buffer_instance(struct tracecmd_input *handle); -- --void tracecmd_set_ts_offset(struct tracecmd_input *handle, long long offset); --void tracecmd_set_ts2secs(struct tracecmd_input *handle, unsigned long long hz); -- --void tracecmd_print_events(struct tracecmd_input *handle, const char *regex); -- --struct hook_list *tracecmd_hooks(struct tracecmd_input *handle); - - int tracecmd_init_data(struct tracecmd_input *handle); -- --void tracecmd_print_stats(struct tracecmd_input *handle); --void tracecmd_print_uname(struct tracecmd_input *handle); --void tracecmd_print_version(struct tracecmd_input *handle); -- - struct tep_record * --tracecmd_peek_data(struct tracecmd_input *handle, int cpu); -- --static inline struct tep_record * --tracecmd_peek_data_ref(struct tracecmd_input *handle, int cpu) --{ -- struct tep_record *rec = tracecmd_peek_data(handle, cpu); -- if (rec) -- rec->ref_count++; -- return rec; --} -- -+tracecmd_read_cpu_first(struct tracecmd_input *handle, int cpu); - struct tep_record * - tracecmd_read_data(struct tracecmd_input *handle, int cpu); -- --struct tep_record * --tracecmd_read_prev(struct tracecmd_input *handle, struct tep_record *record); -- --struct tep_record * --tracecmd_read_next_data(struct tracecmd_input *handle, int *rec_cpu); -- --struct tep_record * --tracecmd_peek_next_data(struct tracecmd_input *handle, int *rec_cpu); -- - struct tep_record * - tracecmd_read_at(struct tracecmd_input *handle, unsigned long long offset, - int *cpu); --struct tep_record * --tracecmd_translate_data(struct tracecmd_input *handle, -- void *ptr, int size); --struct tep_record * --tracecmd_read_cpu_first(struct tracecmd_input *handle, int cpu); --struct tep_record * --tracecmd_read_cpu_last(struct tracecmd_input *handle, int cpu); --int tracecmd_refresh_record(struct tracecmd_input *handle, -- struct tep_record *record); -- --int tracecmd_set_cpu_to_timestamp(struct tracecmd_input *handle, -- int cpu, unsigned long long ts); --void --tracecmd_set_all_cpus_to_timestamp(struct tracecmd_input *handle, -- unsigned long long time); -- --int tracecmd_set_cursor(struct tracecmd_input *handle, -- int cpu, unsigned long long offset); --unsigned long long --tracecmd_get_cursor(struct tracecmd_input *handle, int cpu); -+void free_record(struct tep_record *record); - --int tracecmd_ftrace_overrides(struct tracecmd_input *handle, struct tracecmd_ftrace *finfo); - struct tep_handle *tracecmd_get_pevent(struct tracecmd_input *handle); --bool tracecmd_get_use_trace_clock(struct tracecmd_input *handle); --tracecmd_show_data_func --tracecmd_get_show_data_func(struct tracecmd_input *handle); --void tracecmd_set_show_data_func(struct tracecmd_input *handle, -- tracecmd_show_data_func func); -- --int tracecmd_record_at_buffer_start(struct tracecmd_input *handle, struct tep_record *record); --unsigned long long tracecmd_page_ts(struct tracecmd_input *handle, -- struct tep_record *record); --unsigned int tracecmd_record_ts_delta(struct tracecmd_input *handle, -- struct tep_record *record); -- --struct tracecmd_proc_addr_map * --tracecmd_search_task_map(struct tracecmd_input *handle, -- int pid, unsigned long long addr); --#ifndef SWIG --/* hack for function graph work around */ --extern __thread struct tracecmd_input *tracecmd_curr_thread_handle; --#endif -- -- --/* --- Creating and Writing the trace.dat file --- */ -- --struct tracecmd_event_list { -- struct tracecmd_event_list *next; -- const char *glob; --}; -- --struct tracecmd_option; --struct tracecmd_msg_handle; -- --struct tracecmd_output *tracecmd_create_file_latency(const char *output_file, int cpus); --struct tracecmd_output *tracecmd_create_file(const char *output_file, -- int cpus, char * const *cpu_data_files); --struct tracecmd_output * --tracecmd_create_file_glob(const char *output_file, -- int cpus, char * const *cpu_data_files, -- struct tracecmd_event_list *event_globs); --struct tracecmd_output * --tracecmd_create_init_file_glob(const char *output_file, -- struct tracecmd_event_list *list); --struct tracecmd_output *tracecmd_create_init_fd(int fd); --struct tracecmd_output * --tracecmd_create_init_fd_glob(int fd, struct tracecmd_event_list *list); --struct tracecmd_output * --tracecmd_create_init_fd_msg(struct tracecmd_msg_handle *msg_handle, -- struct tracecmd_event_list *list); --struct tracecmd_output *tracecmd_create_init_file(const char *output_file); --struct tracecmd_output *tracecmd_create_init_file_override(const char *output_file, -- const char *tracing_dir, -- const char *kallsyms); --struct tracecmd_option *tracecmd_add_option(struct tracecmd_output *handle, -- unsigned short id, int size, -- const void *data); --struct tracecmd_option * --tracecmd_add_option_v(struct tracecmd_output *handle, -- unsigned short id, const struct iovec *vector, int count); -- --struct tracecmd_option *tracecmd_add_buffer_option(struct tracecmd_output *handle, -- const char *name, int cpus); -- --int tracecmd_write_cpus(struct tracecmd_output *handle, int cpus); --int tracecmd_write_options(struct tracecmd_output *handle); --int tracecmd_append_options(struct tracecmd_output *handle); --int tracecmd_update_option(struct tracecmd_output *handle, -- struct tracecmd_option *option, int size, -- const void *data); --void tracecmd_output_close(struct tracecmd_output *handle); --void tracecmd_output_free(struct tracecmd_output *handle); --struct tracecmd_output *tracecmd_copy(struct tracecmd_input *ihandle, -- const char *file); -- --int tracecmd_write_cpu_data(struct tracecmd_output *handle, -- int cpus, char * const *cpu_data_files); --int tracecmd_append_cpu_data(struct tracecmd_output *handle, -- int cpus, char * const *cpu_data_files); --int tracecmd_append_buffer_cpu_data(struct tracecmd_output *handle, -- struct tracecmd_option *option, -- int cpus, char * const *cpu_data_files); -- --struct tracecmd_output *tracecmd_get_output_handle_fd(int fd); -- --/* --- Reading the Fly Recorder Trace --- */ -- --enum { -- TRACECMD_RECORD_NOSPLICE = (1 << 0), /* Use read instead of splice */ -- TRACECMD_RECORD_SNAPSHOT = (1 << 1), /* Extract from snapshot */ -- TRACECMD_RECORD_BLOCK = (1 << 2), /* Block on splice write */ -- TRACECMD_RECORD_NOBRASS = (1 << 3), /* Splice directly without a brass pipe */ --}; -- --void tracecmd_free_recorder(struct tracecmd_recorder *recorder); --struct tracecmd_recorder *tracecmd_create_recorder(const char *file, int cpu, unsigned flags); --struct tracecmd_recorder *tracecmd_create_recorder_fd(int fd, int cpu, unsigned flags); --struct tracecmd_recorder *tracecmd_create_recorder_virt(const char *file, int cpu, unsigned flags, int trace_fd); --struct tracecmd_recorder *tracecmd_create_recorder_maxkb(const char *file, int cpu, unsigned flags, int maxkb); --struct tracecmd_recorder *tracecmd_create_buffer_recorder_fd(int fd, int cpu, unsigned flags, const char *buffer); --struct tracecmd_recorder *tracecmd_create_buffer_recorder(const char *file, int cpu, unsigned flags, const char *buffer); --struct tracecmd_recorder *tracecmd_create_buffer_recorder_maxkb(const char *file, int cpu, unsigned flags, const char *buffer, int maxkb); -- --int tracecmd_start_recording(struct tracecmd_recorder *recorder, unsigned long sleep); --void tracecmd_stop_recording(struct tracecmd_recorder *recorder); --long tracecmd_flush_recording(struct tracecmd_recorder *recorder); -- --enum tracecmd_msg_flags { -- TRACECMD_MSG_FL_USE_TCP = 1 << 0, --}; -- --/* for both client and server */ --struct tracecmd_msg_handle { -- int fd; -- short cpu_count; -- short version; /* Current protocol version */ -- unsigned long flags; -- bool done; --}; -- --struct tracecmd_msg_handle * -- tracecmd_msg_handle_alloc(int fd, unsigned long flags); -- --/* Closes the socket and frees the handle */ --void tracecmd_msg_handle_close(struct tracecmd_msg_handle *msg_handle); -- --/* for clients */ --int tracecmd_msg_send_init_data(struct tracecmd_msg_handle *msg_handle, -- unsigned int **client_ports); --int tracecmd_msg_data_send(struct tracecmd_msg_handle *msg_handle, -- const char *buf, int size); --int tracecmd_msg_finish_sending_data(struct tracecmd_msg_handle *msg_handle); --int tracecmd_msg_send_close_msg(struct tracecmd_msg_handle *msg_handle); --int tracecmd_msg_send_close_resp_msg(struct tracecmd_msg_handle *msg_handle); --int tracecmd_msg_wait_close(struct tracecmd_msg_handle *msg_handle); --int tracecmd_msg_wait_close_resp(struct tracecmd_msg_handle *msg_handle); -- --/* for server */ --int tracecmd_msg_initial_setting(struct tracecmd_msg_handle *msg_handle); --int tracecmd_msg_send_port_array(struct tracecmd_msg_handle *msg_handle, -- unsigned *ports); --int tracecmd_msg_read_data(struct tracecmd_msg_handle *msg_handle, int ofd); --int tracecmd_msg_collect_data(struct tracecmd_msg_handle *msg_handle, int ofd); --bool tracecmd_msg_done(struct tracecmd_msg_handle *msg_handle); --void tracecmd_msg_set_done(struct tracecmd_msg_handle *msg_handle); -- --int tracecmd_msg_send_trace_req(struct tracecmd_msg_handle *msg_handle, -- int argc, char **argv, bool use_fifos, -- unsigned long long trace_id, -- char *tsync_protos, -- int tsync_protos_size); --int tracecmd_msg_recv_trace_req(struct tracecmd_msg_handle *msg_handle, -- int *argc, char ***argv, bool *use_fifos, -- unsigned long long *trace_id, -- char **tsync_protos, -- unsigned int *tsync_protos_size); -- --int tracecmd_msg_send_trace_resp(struct tracecmd_msg_handle *msg_handle, -- int nr_cpus, int page_size, -- unsigned int *ports, bool use_fifos, -- unsigned long long trace_id, -- unsigned int tsync_proto, -- unsigned int tsync_port); --int tracecmd_msg_recv_trace_resp(struct tracecmd_msg_handle *msg_handle, -- int *nr_cpus, int *page_size, -- unsigned int **ports, bool *use_fifos, -- unsigned long long *trace_id, -- unsigned int *tsync_proto, -- unsigned int *tsync_port); -- --int tracecmd_msg_send_time_sync(struct tracecmd_msg_handle *msg_handle, -- unsigned int sync_protocol, -- unsigned int sync_msg_id, -- unsigned int payload_size, char *payload); --int tracecmd_msg_recv_time_sync(struct tracecmd_msg_handle *msg_handle, -- unsigned int *sync_protocol, -- unsigned int *sync_msg_id, -- unsigned int *payload_size, char **payload); -- --/* --- Timestamp synchronization --- */ -- --enum{ -- TRACECMD_TIME_SYNC_PROTO_NONE = 0, --}; --enum{ -- TRACECMD_TIME_SYNC_CMD_PROBE = 1, -- TRACECMD_TIME_SYNC_CMD_STOP = 2, --}; -- --#define TRACECMD_TIME_SYNC_PROTO_PTP_WEIGHT 10 -- --struct tracecmd_time_sync { -- unsigned int sync_proto; -- int loop_interval; -- pthread_mutex_t lock; -- pthread_cond_t cond; -- char *clock_str; -- struct tracecmd_msg_handle *msg_handle; -- void *context; --}; -- --void tracecmd_tsync_init(void); --int tracecmd_tsync_proto_getall(char **proto_mask, int *words); --unsigned int tracecmd_tsync_proto_select(char *proto_mask, int words); --bool tsync_proto_is_supported(unsigned int proto_id); --void tracecmd_tsync_with_host(struct tracecmd_time_sync *tsync); --void tracecmd_tsync_with_guest(struct tracecmd_time_sync *tsync); --int tracecmd_tsync_get_offsets(struct tracecmd_time_sync *tsync, -- int *count, -- long long **ts, long long **offsets); --void tracecmd_tsync_free(struct tracecmd_time_sync *tsync); -- --/* --- Plugin handling --- */ --extern struct tep_plugin_option trace_ftrace_options[]; -- --char **trace_util_find_plugin_files(const char *suffix); --void trace_util_free_plugin_files(char **files); -- --/* Used for trace-cmd list */ --void tracecmd_ftrace_load_options(void); -- --/* event hooks */ -- --struct hook_list { -- struct hook_list *next; -- struct buffer_instance *instance; -- const char *hook; -- char *str; -- char *start_system; -- char *start_event; -- char *start_match; -- char *end_system; -- char *end_event; -- char *end_match; -- char *pid; -- int migrate; -- int global; -- int stack; --}; -- --struct hook_list *tracecmd_create_event_hook(const char *arg); --void tracecmd_free_hooks(struct hook_list *hooks); -- --void tracecmd_plog(const char *fmt, ...); --void tracecmd_plog_error(const char *fmt, ...); --int tracecmd_set_logfile(char *logfile); -- --/* --- System --- */ --unsigned long long tracecmd_generate_traceid(void); --int tracecmd_count_cpus(void); -- --/* --- Hack! --- */ --int tracecmd_blk_hack(struct tracecmd_input *handle); -- --/* --- Stack tracer functions --- */ --int tracecmd_stack_tracer_status(int *status); -- --/* --- Debugging --- */ --struct kbuffer *tracecmd_record_kbuf(struct tracecmd_input *handle, -- struct tep_record *record); --void *tracecmd_record_page(struct tracecmd_input *handle, -- struct tep_record *record); --void *tracecmd_record_offset(struct tracecmd_input *handle, -- struct tep_record *record); -+unsigned long long tracecmd_get_traceid(struct tracecmd_input *handle); -+int tracecmd_get_guest_cpumap(struct tracecmd_input *handle, -+ unsigned long long trace_id, -+ const char **name, -+ int *vcpu_count, const int **cpu_pid); -+int tracecmd_buffer_instances(struct tracecmd_input *handle); -+const char *tracecmd_buffer_instance_name(struct tracecmd_input *handle, int indx); -+struct tracecmd_input *tracecmd_buffer_instance_handle(struct tracecmd_input *handle, int indx); - - #endif /* _TRACE_CMD_H */ -diff --git a/include/trace-cmd/trace-filter-hash.h b/include/trace-cmd/trace-filter-hash.h -deleted file mode 100644 -index 4111c41..0000000 ---- a/include/trace-cmd/trace-filter-hash.h -+++ /dev/null -@@ -1,64 +0,0 @@ --/* SPDX-License-Identifier: LGPL-2.1 */ --/* -- * Copyright (C) 2009, 2010 Red Hat Inc, Steven Rostedt <srostedt@redhat.com> -- * Copyright (C) 2018 VMware Inc, Steven Rostedt <rostedt@goodmis.org> -- * -- */ --#ifndef _TRACE_FILTER_HASH_H --#define _TRACE_FILTER_HASH_H -- --#include <stdint.h> -- --struct tracecmd_filter_id_item { -- struct tracecmd_filter_id_item *next; -- int id; --}; -- --struct tracecmd_filter_id { -- struct tracecmd_filter_id_item **hash; -- int count; --}; -- --/** -- * tracecmd_quick_hash - A quick (non secured) hash alogirthm -- * @val: The value to perform the hash on -- * @bits: The size in bits you need to return -- * -- * This is a quick hashing function adapted from Donald E. Knuth's 32 -- * bit multiplicative hash. See The Art of Computer Programming (TAOCP). -- * Multiplication by the Prime number, closest to the golden ratio of -- * 2^32. -- * -- * @bits is used to max the result for use cases that require -- * a power of 2 return value that is less than 32 bits. Any value -- * of @bits greater than 31 (or zero), will simply return the full hash on @val. -- */ --static inline uint32_t tracecmd_quick_hash(uint32_t val, unsigned int bits) --{ -- val *= UINT32_C(2654435761); -- -- if (!bits || bits > 31) -- return val; -- -- return val & ((1 << bits) - 1); --} -- --struct tracecmd_filter_id_item * -- tracecmd_filter_id_find(struct tracecmd_filter_id *hash, int id); --void tracecmd_filter_id_add(struct tracecmd_filter_id *hash, int id); --void tracecmd_filter_id_remove(struct tracecmd_filter_id *hash, int id); --void tracecmd_filter_id_clear(struct tracecmd_filter_id *hash); --struct tracecmd_filter_id *tracecmd_filter_id_hash_alloc(void); --void tracecmd_filter_id_hash_free(struct tracecmd_filter_id *hash); --struct tracecmd_filter_id * -- tracecmd_filter_id_hash_copy(struct tracecmd_filter_id *hash); --int *tracecmd_filter_ids(struct tracecmd_filter_id *hash); --int tracecmd_filter_id_compare(struct tracecmd_filter_id *hash1, -- struct tracecmd_filter_id *hash2); -- --static inline int tracecmd_filter_task_count(struct tracecmd_filter_id *hash) --{ -- return hash->count; --} -- --#endif /* _TRACE_FILTER_HASH_H */ -diff --git a/include/trace-cmd/trace-hash.h b/include/trace-cmd/trace-hash.h -deleted file mode 100644 -index aa92cdf..0000000 ---- a/include/trace-cmd/trace-hash.h -+++ /dev/null -@@ -1,55 +0,0 @@ --/* SPDX-License-Identifier: GPL-2.0 */ --/* -- * Copyright (C) 2014 Red Hat Inc, Steven Rostedt <srostedt@redhat.com> -- * -- */ --#ifndef _TRACE_HASH_H --#define _TRACE_HASH_H -- --struct trace_hash_item { -- struct trace_hash_item *next; -- struct trace_hash_item *prev; -- unsigned long long key; --}; -- --struct trace_hash { -- struct trace_hash_item **buckets; -- int nr_buckets; -- int power; --}; -- --int trace_hash_init(struct trace_hash *hash, int buckets); --void trace_hash_free(struct trace_hash *hash); --int trace_hash_add(struct trace_hash *hash, struct trace_hash_item *item); --int trace_hash_empty(struct trace_hash *hash); -- --static inline void trace_hash_del(struct trace_hash_item *item) --{ -- struct trace_hash_item *prev = item->prev; -- -- prev->next = item->next; -- if (item->next) -- item->next->prev = prev; --} -- --#define trace_hash_for_each_bucket(bucket, hash) \ -- for (bucket = (hash)->buckets; \ -- (bucket) < (hash)->buckets + (hash)->nr_buckets; (bucket)++) -- --#define trace_hash_for_each_item(item, bucket) \ -- for ((item = *(bucket)); item; item = (item)->next) -- --#define trace_hash_for_each_item_safe(item, n, bucket) \ -- for ((item = *(bucket)), n = item ? item->next : NULL; item; \ -- item = n, n = item ? (item)->next : NULL) -- --#define trace_hash_while_item(item, bucket) \ -- while ((item = *(bucket))) -- --typedef int (*trace_hash_func)(struct trace_hash_item *item, void *data); -- --struct trace_hash_item * --trace_hash_find(struct trace_hash *hash, unsigned long long key, -- trace_hash_func match, void *data); -- --#endif /* _TRACE_HASH_H */ -diff --git a/include/trace-cmd/trace-msg.h b/include/trace-cmd/trace-msg.h -deleted file mode 100644 -index aab8a69..0000000 ---- a/include/trace-cmd/trace-msg.h -+++ /dev/null -@@ -1,15 +0,0 @@ --#ifndef _TRACE_MSG_H_ --#define _TRACE_MSG_H_ -- --#include <stdbool.h> -- --#define UDP_MAX_PACKET (65536 - 20) --#define V3_MAGIC "766679\0" --#define V3_CPU "-1V3" -- --#define V1_PROTOCOL 1 --#define V3_PROTOCOL 3 -- --extern unsigned int page_size; -- --#endif /* _TRACE_MSG_H_ */ -diff --git a/lib/trace-cmd/include/private/trace-cmd-private.h b/lib/trace-cmd/include/private/trace-cmd-private.h -new file mode 100644 -index 0000000..458760e ---- /dev/null -+++ b/lib/trace-cmd/include/private/trace-cmd-private.h -@@ -0,0 +1,480 @@ -+/* SPDX-License-Identifier: LGPL-2.1 */ -+/* -+ * Copyright (C) 2008, 2009, 2010 Red Hat Inc, Steven Rostedt <srostedt@redhat.com> -+ * -+ */ -+#ifndef _TRACE_CMD_PRIVATE_H -+#define _TRACE_CMD_PRIVATE_H -+ -+#include "traceevent/event-parse.h" -+#include "trace-cmd/trace-cmd.h" -+ -+#define TRACECMD_MAGIC { 23, 8, 68 } -+ -+#define ARRAY_SIZE(_a) (sizeof(_a) / sizeof((_a)[0])) -+#define __weak __attribute__((weak)) -+#define __noreturn __attribute__((noreturn)) -+ -+#define TRACECMD_ERR_MSK ((unsigned long)(-1) & ~((1UL << 14) - 1)) -+#define TRACECMD_ISERR(ptr) ((unsigned long)(ptr) > TRACECMD_ERR_MSK) -+#define TRACECMD_ERROR(ret) ((void *)((unsigned long)(ret) | TRACECMD_ERR_MSK)) -+#define TRACECMD_PTR2ERR(ptr) ((unisgned long)(ptr) & ~TRACECMD_ERR_MSK) -+ -+void tracecmd_parse_cmdlines(struct tep_handle *pevent, char *file, int size); -+void tracecmd_parse_proc_kallsyms(struct tep_handle *pevent, char *file, unsigned int size); -+void tracecmd_parse_ftrace_printk(struct tep_handle *pevent, char *file, unsigned int size); -+struct tep_plugin_list *trace_load_plugins(struct tep_handle *tep); -+ -+int *tracecmd_add_id(int *list, int id, int len); -+ -+enum { -+ RINGBUF_TYPE_PADDING = 29, -+ RINGBUF_TYPE_TIME_EXTEND = 30, -+ RINGBUF_TYPE_TIME_STAMP = 31, -+}; -+ -+void tracecmd_record_ref(struct tep_record *record); -+ -+void tracecmd_set_debug(bool set_debug); -+bool tracecmd_get_debug(void); -+ -+struct tracecmd_output; -+struct tracecmd_recorder; -+struct hook_list; -+ -+/* --- tracecmd plugins --- */ -+ -+extern int tracecmd_disable_sys_plugins; -+extern int tracecmd_disable_plugins; -+ -+enum tracecmd_context { -+ TRACECMD_INPUT, -+ TRACECMD_OUTPUT, -+}; -+ -+enum tracecmd_plugin_flag { -+ TRACECMD_DISABLE_SYS_PLUGINS = 1, -+ TRACECMD_DISABLE_PLUGINS = 1 << 1, -+}; -+ -+struct trace_plugin_context; -+ -+struct trace_plugin_context * -+tracecmd_plugin_context_create(enum tracecmd_context context, void *data); -+ -+void tracecmd_plugin_set_flag(struct trace_plugin_context *context, -+ enum tracecmd_plugin_flag flag); -+ -+#define TRACECMD_PLUGIN_LOADER tracecmd_plugin_loader -+#define TRACECMD_PLUGIN_UNLOADER tracecmd_plugin_unloader -+#define TRACECMD_PLUGIN_ALIAS tracecmd_plugin_alias -+#define _MAKE_STR(x) #x -+#define MAKE_STR(x) _MAKE_STR(x) -+#define TRACECMD_PLUGIN_LOADER_NAME MAKE_STR(TRACECMD_PLUGIN_LOADER) -+#define TRACECMD_PLUGIN_UNLOADER_NAME MAKE_STR(TRACECMD_PLUGIN_UNLOADER) -+#define TRACECMD_PLUGIN_ALIAS_NAME MAKE_STR(TRACECMD_PLUGIN_ALIAS) -+ -+typedef int (*tracecmd_plugin_load_func)(struct trace_plugin_context *trace); -+typedef int (*tracecmd_plugin_unload_func)(struct trace_plugin_context *trace); -+ -+struct tracecmd_input * -+tracecmd_plugin_context_input(struct trace_plugin_context *trace_context); -+struct tracecmd_output * -+tracecmd_plugin_context_output(struct trace_plugin_context *trace_context); -+ -+void tracecmd_set_quiet(struct tracecmd_output *handle, bool set_quiet); -+bool tracecmd_get_quiet(struct tracecmd_output *handle); -+ -+static inline int tracecmd_host_bigendian(void) -+{ -+ unsigned char str[] = { 0x1, 0x2, 0x3, 0x4 }; -+ unsigned int *ptr; -+ -+ ptr = (unsigned int *)str; -+ return *ptr == 0x01020304; -+} -+ -+/* --- Opening and Reading the trace.dat file --- */ -+ -+enum { -+ TRACECMD_OPTION_DONE, -+ TRACECMD_OPTION_DATE, -+ TRACECMD_OPTION_CPUSTAT, -+ TRACECMD_OPTION_BUFFER, -+ TRACECMD_OPTION_TRACECLOCK, -+ TRACECMD_OPTION_UNAME, -+ TRACECMD_OPTION_HOOK, -+ TRACECMD_OPTION_OFFSET, -+ TRACECMD_OPTION_CPUCOUNT, -+ TRACECMD_OPTION_VERSION, -+ TRACECMD_OPTION_PROCMAPS, -+ TRACECMD_OPTION_TRACEID, -+ TRACECMD_OPTION_TIME_SHIFT, -+ TRACECMD_OPTION_GUEST, -+}; -+ -+enum { -+ TRACECMD_FL_IGNORE_DATE = (1 << 0), -+ TRACECMD_FL_BUFFER_INSTANCE = (1 << 1), -+ TRACECMD_FL_LATENCY = (1 << 2), -+ TRACECMD_FL_IN_USECS = (1 << 3), -+ TRACECMD_FL_FLYRECORD = (1 << 4), -+}; -+ -+struct tracecmd_ftrace { -+ struct tracecmd_input *handle; -+ struct tep_event *fgraph_ret_event; -+ int fgraph_ret_id; -+ int long_size; -+}; -+ -+struct tracecmd_proc_addr_map { -+ unsigned long long start; -+ unsigned long long end; -+ char *lib_name; -+}; -+ -+typedef void (*tracecmd_show_data_func)(struct tracecmd_input *handle, -+ struct tep_record *record); -+typedef void (*tracecmd_handle_init_func)(struct tracecmd_input *handle, -+ struct hook_list *hook, int global); -+ -+struct tracecmd_input *tracecmd_alloc(const char *file); -+struct tracecmd_input *tracecmd_alloc_fd(int fd); -+struct tracecmd_input *tracecmd_open(const char *file); -+struct tracecmd_input *tracecmd_open_fd(int fd); -+void tracecmd_unpair_peer(struct tracecmd_input *handle); -+void tracecmd_ref(struct tracecmd_input *handle); -+int tracecmd_read_headers(struct tracecmd_input *handle); -+int tracecmd_get_parsing_failures(struct tracecmd_input *handle); -+int tracecmd_long_size(struct tracecmd_input *handle); -+int tracecmd_page_size(struct tracecmd_input *handle); -+int tracecmd_cpus(struct tracecmd_input *handle); -+int tracecmd_copy_headers(struct tracecmd_input *handle, int fd); -+void tracecmd_set_flag(struct tracecmd_input *handle, int flag); -+void tracecmd_clear_flag(struct tracecmd_input *handle, int flag); -+unsigned long tracecmd_get_flags(struct tracecmd_input *handle); -+unsigned long long tracecmd_get_tsync_peer(struct tracecmd_input *handle); -+int tracecmd_enable_tsync(struct tracecmd_input *handle, bool enable); -+ -+void tracecmd_parse_trace_clock(struct tracecmd_input *handle, char *file, int size); -+ -+int tracecmd_make_pipe(struct tracecmd_input *handle, int cpu, int fd, int cpus); -+ -+int tracecmd_is_buffer_instance(struct tracecmd_input *handle); -+ -+void tracecmd_set_ts_offset(struct tracecmd_input *handle, long long offset); -+void tracecmd_set_ts2secs(struct tracecmd_input *handle, unsigned long long hz); -+ -+void tracecmd_print_events(struct tracecmd_input *handle, const char *regex); -+ -+struct hook_list *tracecmd_hooks(struct tracecmd_input *handle); -+ -+void tracecmd_print_stats(struct tracecmd_input *handle); -+void tracecmd_print_uname(struct tracecmd_input *handle); -+void tracecmd_print_version(struct tracecmd_input *handle); -+ -+struct tep_record * -+tracecmd_peek_data(struct tracecmd_input *handle, int cpu); -+ -+static inline struct tep_record * -+tracecmd_peek_data_ref(struct tracecmd_input *handle, int cpu) -+{ -+ struct tep_record *rec = tracecmd_peek_data(handle, cpu); -+ if (rec) -+ rec->ref_count++; -+ return rec; -+} -+ -+struct tep_record * -+tracecmd_read_prev(struct tracecmd_input *handle, struct tep_record *record); -+ -+struct tep_record * -+tracecmd_read_next_data(struct tracecmd_input *handle, int *rec_cpu); -+ -+struct tep_record * -+tracecmd_peek_next_data(struct tracecmd_input *handle, int *rec_cpu); -+ -+struct tep_record * -+tracecmd_translate_data(struct tracecmd_input *handle, -+ void *ptr, int size); -+struct tep_record * -+tracecmd_read_cpu_last(struct tracecmd_input *handle, int cpu); -+int tracecmd_refresh_record(struct tracecmd_input *handle, -+ struct tep_record *record); -+ -+int tracecmd_set_cpu_to_timestamp(struct tracecmd_input *handle, -+ int cpu, unsigned long long ts); -+void -+tracecmd_set_all_cpus_to_timestamp(struct tracecmd_input *handle, -+ unsigned long long time); -+ -+int tracecmd_set_cursor(struct tracecmd_input *handle, -+ int cpu, unsigned long long offset); -+unsigned long long -+tracecmd_get_cursor(struct tracecmd_input *handle, int cpu); -+ -+int tracecmd_ftrace_overrides(struct tracecmd_input *handle, struct tracecmd_ftrace *finfo); -+bool tracecmd_get_use_trace_clock(struct tracecmd_input *handle); -+tracecmd_show_data_func -+tracecmd_get_show_data_func(struct tracecmd_input *handle); -+void tracecmd_set_show_data_func(struct tracecmd_input *handle, -+ tracecmd_show_data_func func); -+ -+int tracecmd_record_at_buffer_start(struct tracecmd_input *handle, struct tep_record *record); -+unsigned long long tracecmd_page_ts(struct tracecmd_input *handle, -+ struct tep_record *record); -+unsigned int tracecmd_record_ts_delta(struct tracecmd_input *handle, -+ struct tep_record *record); -+ -+struct tracecmd_proc_addr_map * -+tracecmd_search_task_map(struct tracecmd_input *handle, -+ int pid, unsigned long long addr); -+#ifndef SWIG -+/* hack for function graph work around */ -+extern __thread struct tracecmd_input *tracecmd_curr_thread_handle; -+#endif -+ -+ -+/* --- Creating and Writing the trace.dat file --- */ -+ -+struct tracecmd_event_list { -+ struct tracecmd_event_list *next; -+ const char *glob; -+}; -+ -+struct tracecmd_option; -+struct tracecmd_msg_handle; -+ -+struct tracecmd_output *tracecmd_create_file_latency(const char *output_file, int cpus); -+struct tracecmd_output *tracecmd_create_file(const char *output_file, -+ int cpus, char * const *cpu_data_files); -+struct tracecmd_output * -+tracecmd_create_file_glob(const char *output_file, -+ int cpus, char * const *cpu_data_files, -+ struct tracecmd_event_list *event_globs); -+struct tracecmd_output * -+tracecmd_create_init_file_glob(const char *output_file, -+ struct tracecmd_event_list *list); -+struct tracecmd_output *tracecmd_create_init_fd(int fd); -+struct tracecmd_output * -+tracecmd_create_init_fd_glob(int fd, struct tracecmd_event_list *list); -+struct tracecmd_output * -+tracecmd_create_init_fd_msg(struct tracecmd_msg_handle *msg_handle, -+ struct tracecmd_event_list *list); -+struct tracecmd_output *tracecmd_create_init_file(const char *output_file); -+struct tracecmd_output *tracecmd_create_init_file_override(const char *output_file, -+ const char *tracing_dir, -+ const char *kallsyms); -+struct tracecmd_option *tracecmd_add_option(struct tracecmd_output *handle, -+ unsigned short id, int size, -+ const void *data); -+struct tracecmd_option * -+tracecmd_add_option_v(struct tracecmd_output *handle, -+ unsigned short id, const struct iovec *vector, int count); -+ -+struct tracecmd_option *tracecmd_add_buffer_option(struct tracecmd_output *handle, -+ const char *name, int cpus); -+ -+int tracecmd_write_cpus(struct tracecmd_output *handle, int cpus); -+int tracecmd_write_options(struct tracecmd_output *handle); -+int tracecmd_append_options(struct tracecmd_output *handle); -+int tracecmd_update_option(struct tracecmd_output *handle, -+ struct tracecmd_option *option, int size, -+ const void *data); -+void tracecmd_output_close(struct tracecmd_output *handle); -+void tracecmd_output_free(struct tracecmd_output *handle); -+struct tracecmd_output *tracecmd_copy(struct tracecmd_input *ihandle, -+ const char *file); -+ -+int tracecmd_write_cpu_data(struct tracecmd_output *handle, -+ int cpus, char * const *cpu_data_files); -+int tracecmd_append_cpu_data(struct tracecmd_output *handle, -+ int cpus, char * const *cpu_data_files); -+int tracecmd_append_buffer_cpu_data(struct tracecmd_output *handle, -+ struct tracecmd_option *option, -+ int cpus, char * const *cpu_data_files); -+ -+struct tracecmd_output *tracecmd_get_output_handle_fd(int fd); -+ -+/* --- Reading the Fly Recorder Trace --- */ -+ -+enum { -+ TRACECMD_RECORD_NOSPLICE = (1 << 0), /* Use read instead of splice */ -+ TRACECMD_RECORD_SNAPSHOT = (1 << 1), /* Extract from snapshot */ -+ TRACECMD_RECORD_BLOCK = (1 << 2), /* Block on splice write */ -+ TRACECMD_RECORD_NOBRASS = (1 << 3), /* Splice directly without a brass pipe */ -+}; -+ -+void tracecmd_free_recorder(struct tracecmd_recorder *recorder); -+struct tracecmd_recorder *tracecmd_create_recorder(const char *file, int cpu, unsigned flags); -+struct tracecmd_recorder *tracecmd_create_recorder_fd(int fd, int cpu, unsigned flags); -+struct tracecmd_recorder *tracecmd_create_recorder_virt(const char *file, int cpu, unsigned flags, int trace_fd); -+struct tracecmd_recorder *tracecmd_create_recorder_maxkb(const char *file, int cpu, unsigned flags, int maxkb); -+struct tracecmd_recorder *tracecmd_create_buffer_recorder_fd(int fd, int cpu, unsigned flags, const char *buffer); -+struct tracecmd_recorder *tracecmd_create_buffer_recorder(const char *file, int cpu, unsigned flags, const char *buffer); -+struct tracecmd_recorder *tracecmd_create_buffer_recorder_maxkb(const char *file, int cpu, unsigned flags, const char *buffer, int maxkb); -+ -+int tracecmd_start_recording(struct tracecmd_recorder *recorder, unsigned long sleep); -+void tracecmd_stop_recording(struct tracecmd_recorder *recorder); -+long tracecmd_flush_recording(struct tracecmd_recorder *recorder); -+ -+enum tracecmd_msg_flags { -+ TRACECMD_MSG_FL_USE_TCP = 1 << 0, -+}; -+ -+/* for both client and server */ -+struct tracecmd_msg_handle { -+ int fd; -+ short cpu_count; -+ short version; /* Current protocol version */ -+ unsigned long flags; -+ bool done; -+}; -+ -+struct tracecmd_msg_handle * -+tracecmd_msg_handle_alloc(int fd, unsigned long flags); -+ -+/* Closes the socket and frees the handle */ -+void tracecmd_msg_handle_close(struct tracecmd_msg_handle *msg_handle); -+ -+/* for clients */ -+int tracecmd_msg_send_init_data(struct tracecmd_msg_handle *msg_handle, -+ unsigned int **client_ports); -+int tracecmd_msg_data_send(struct tracecmd_msg_handle *msg_handle, -+ const char *buf, int size); -+int tracecmd_msg_finish_sending_data(struct tracecmd_msg_handle *msg_handle); -+int tracecmd_msg_send_close_msg(struct tracecmd_msg_handle *msg_handle); -+int tracecmd_msg_send_close_resp_msg(struct tracecmd_msg_handle *msg_handle); -+int tracecmd_msg_wait_close(struct tracecmd_msg_handle *msg_handle); -+int tracecmd_msg_wait_close_resp(struct tracecmd_msg_handle *msg_handle); -+ -+/* for server */ -+int tracecmd_msg_initial_setting(struct tracecmd_msg_handle *msg_handle); -+int tracecmd_msg_send_port_array(struct tracecmd_msg_handle *msg_handle, -+ unsigned *ports); -+int tracecmd_msg_read_data(struct tracecmd_msg_handle *msg_handle, int ofd); -+int tracecmd_msg_collect_data(struct tracecmd_msg_handle *msg_handle, int ofd); -+bool tracecmd_msg_done(struct tracecmd_msg_handle *msg_handle); -+void tracecmd_msg_set_done(struct tracecmd_msg_handle *msg_handle); -+ -+int tracecmd_msg_send_trace_req(struct tracecmd_msg_handle *msg_handle, -+ int argc, char **argv, bool use_fifos, -+ unsigned long long trace_id, -+ char *tsync_protos, -+ int tsync_protos_size); -+int tracecmd_msg_recv_trace_req(struct tracecmd_msg_handle *msg_handle, -+ int *argc, char ***argv, bool *use_fifos, -+ unsigned long long *trace_id, -+ char **tsync_protos, -+ unsigned int *tsync_protos_size); -+ -+int tracecmd_msg_send_trace_resp(struct tracecmd_msg_handle *msg_handle, -+ int nr_cpus, int page_size, -+ unsigned int *ports, bool use_fifos, -+ unsigned long long trace_id, -+ unsigned int tsync_proto, -+ unsigned int tsync_port); -+int tracecmd_msg_recv_trace_resp(struct tracecmd_msg_handle *msg_handle, -+ int *nr_cpus, int *page_size, -+ unsigned int **ports, bool *use_fifos, -+ unsigned long long *trace_id, -+ unsigned int *tsync_proto, -+ unsigned int *tsync_port); -+ -+int tracecmd_msg_send_time_sync(struct tracecmd_msg_handle *msg_handle, -+ unsigned int sync_protocol, -+ unsigned int sync_msg_id, -+ unsigned int payload_size, char *payload); -+int tracecmd_msg_recv_time_sync(struct tracecmd_msg_handle *msg_handle, -+ unsigned int *sync_protocol, -+ unsigned int *sync_msg_id, -+ unsigned int *payload_size, char **payload); -+ -+/* --- Timestamp synchronization --- */ -+ -+enum{ -+ TRACECMD_TIME_SYNC_PROTO_NONE = 0, -+}; -+enum{ -+ TRACECMD_TIME_SYNC_CMD_PROBE = 1, -+ TRACECMD_TIME_SYNC_CMD_STOP = 2, -+}; -+ -+#define TRACECMD_TIME_SYNC_PROTO_PTP_WEIGHT 10 -+ -+struct tracecmd_time_sync { -+ unsigned int sync_proto; -+ int loop_interval; -+ pthread_mutex_t lock; -+ pthread_cond_t cond; -+ char *clock_str; -+ struct tracecmd_msg_handle *msg_handle; -+ void *context; -+}; -+ -+void tracecmd_tsync_init(void); -+int tracecmd_tsync_proto_getall(char **proto_mask, int *words); -+unsigned int tracecmd_tsync_proto_select(char *proto_mask, int words); -+bool tsync_proto_is_supported(unsigned int proto_id); -+void tracecmd_tsync_with_host(struct tracecmd_time_sync *tsync); -+void tracecmd_tsync_with_guest(struct tracecmd_time_sync *tsync); -+int tracecmd_tsync_get_offsets(struct tracecmd_time_sync *tsync, -+ int *count, -+ long long **ts, long long **offsets); -+void tracecmd_tsync_free(struct tracecmd_time_sync *tsync); -+ -+/* --- Plugin handling --- */ -+extern struct tep_plugin_option trace_ftrace_options[]; -+ -+char **trace_util_find_plugin_files(const char *suffix); -+void trace_util_free_plugin_files(char **files); -+ -+/* Used for trace-cmd list */ -+void tracecmd_ftrace_load_options(void); -+ -+/* event hooks */ -+ -+struct hook_list { -+ struct hook_list *next; -+ struct buffer_instance *instance; -+ const char *hook; -+ char *str; -+ char *start_system; -+ char *start_event; -+ char *start_match; -+ char *end_system; -+ char *end_event; -+ char *end_match; -+ char *pid; -+ int migrate; -+ int global; -+ int stack; -+}; -+ -+struct hook_list *tracecmd_create_event_hook(const char *arg); -+void tracecmd_free_hooks(struct hook_list *hooks); -+ -+void tracecmd_plog(const char *fmt, ...); -+void tracecmd_plog_error(const char *fmt, ...); -+int tracecmd_set_logfile(char *logfile); -+ -+/* --- System --- */ -+unsigned long long tracecmd_generate_traceid(void); -+int tracecmd_count_cpus(void); -+ -+/* --- Hack! --- */ -+int tracecmd_blk_hack(struct tracecmd_input *handle); -+ -+/* --- Stack tracer functions --- */ -+int tracecmd_stack_tracer_status(int *status); -+ -+/* --- Debugging --- */ -+struct kbuffer *tracecmd_record_kbuf(struct tracecmd_input *handle, -+ struct tep_record *record); -+void *tracecmd_record_page(struct tracecmd_input *handle, -+ struct tep_record *record); -+void *tracecmd_record_offset(struct tracecmd_input *handle, -+ struct tep_record *record); -+ -+#endif /* _TRACE_CMD_PRIVATE_H */ -diff --git a/lib/trace-cmd/include/private/trace-filter-hash.h b/lib/trace-cmd/include/private/trace-filter-hash.h -new file mode 100644 -index 0000000..4111c41 ---- /dev/null -+++ b/lib/trace-cmd/include/private/trace-filter-hash.h -@@ -0,0 +1,64 @@ -+/* SPDX-License-Identifier: LGPL-2.1 */ -+/* -+ * Copyright (C) 2009, 2010 Red Hat Inc, Steven Rostedt <srostedt@redhat.com> -+ * Copyright (C) 2018 VMware Inc, Steven Rostedt <rostedt@goodmis.org> -+ * -+ */ -+#ifndef _TRACE_FILTER_HASH_H -+#define _TRACE_FILTER_HASH_H -+ -+#include <stdint.h> -+ -+struct tracecmd_filter_id_item { -+ struct tracecmd_filter_id_item *next; -+ int id; -+}; -+ -+struct tracecmd_filter_id { -+ struct tracecmd_filter_id_item **hash; -+ int count; -+}; -+ -+/** -+ * tracecmd_quick_hash - A quick (non secured) hash alogirthm -+ * @val: The value to perform the hash on -+ * @bits: The size in bits you need to return -+ * -+ * This is a quick hashing function adapted from Donald E. Knuth's 32 -+ * bit multiplicative hash. See The Art of Computer Programming (TAOCP). -+ * Multiplication by the Prime number, closest to the golden ratio of -+ * 2^32. -+ * -+ * @bits is used to max the result for use cases that require -+ * a power of 2 return value that is less than 32 bits. Any value -+ * of @bits greater than 31 (or zero), will simply return the full hash on @val. -+ */ -+static inline uint32_t tracecmd_quick_hash(uint32_t val, unsigned int bits) -+{ -+ val *= UINT32_C(2654435761); -+ -+ if (!bits || bits > 31) -+ return val; -+ -+ return val & ((1 << bits) - 1); -+} -+ -+struct tracecmd_filter_id_item * -+ tracecmd_filter_id_find(struct tracecmd_filter_id *hash, int id); -+void tracecmd_filter_id_add(struct tracecmd_filter_id *hash, int id); -+void tracecmd_filter_id_remove(struct tracecmd_filter_id *hash, int id); -+void tracecmd_filter_id_clear(struct tracecmd_filter_id *hash); -+struct tracecmd_filter_id *tracecmd_filter_id_hash_alloc(void); -+void tracecmd_filter_id_hash_free(struct tracecmd_filter_id *hash); -+struct tracecmd_filter_id * -+ tracecmd_filter_id_hash_copy(struct tracecmd_filter_id *hash); -+int *tracecmd_filter_ids(struct tracecmd_filter_id *hash); -+int tracecmd_filter_id_compare(struct tracecmd_filter_id *hash1, -+ struct tracecmd_filter_id *hash2); -+ -+static inline int tracecmd_filter_task_count(struct tracecmd_filter_id *hash) -+{ -+ return hash->count; -+} -+ -+#endif /* _TRACE_FILTER_HASH_H */ -diff --git a/lib/trace-cmd/include/private/trace-hash.h b/lib/trace-cmd/include/private/trace-hash.h -new file mode 100644 -index 0000000..aa92cdf ---- /dev/null -+++ b/lib/trace-cmd/include/private/trace-hash.h -@@ -0,0 +1,55 @@ -+/* SPDX-License-Identifier: GPL-2.0 */ -+/* -+ * Copyright (C) 2014 Red Hat Inc, Steven Rostedt <srostedt@redhat.com> -+ * -+ */ -+#ifndef _TRACE_HASH_H -+#define _TRACE_HASH_H -+ -+struct trace_hash_item { -+ struct trace_hash_item *next; -+ struct trace_hash_item *prev; -+ unsigned long long key; -+}; -+ -+struct trace_hash { -+ struct trace_hash_item **buckets; -+ int nr_buckets; -+ int power; -+}; -+ -+int trace_hash_init(struct trace_hash *hash, int buckets); -+void trace_hash_free(struct trace_hash *hash); -+int trace_hash_add(struct trace_hash *hash, struct trace_hash_item *item); -+int trace_hash_empty(struct trace_hash *hash); -+ -+static inline void trace_hash_del(struct trace_hash_item *item) -+{ -+ struct trace_hash_item *prev = item->prev; -+ -+ prev->next = item->next; -+ if (item->next) -+ item->next->prev = prev; -+} -+ -+#define trace_hash_for_each_bucket(bucket, hash) \ -+ for (bucket = (hash)->buckets; \ -+ (bucket) < (hash)->buckets + (hash)->nr_buckets; (bucket)++) -+ -+#define trace_hash_for_each_item(item, bucket) \ -+ for ((item = *(bucket)); item; item = (item)->next) -+ -+#define trace_hash_for_each_item_safe(item, n, bucket) \ -+ for ((item = *(bucket)), n = item ? item->next : NULL; item; \ -+ item = n, n = item ? (item)->next : NULL) -+ -+#define trace_hash_while_item(item, bucket) \ -+ while ((item = *(bucket))) -+ -+typedef int (*trace_hash_func)(struct trace_hash_item *item, void *data); -+ -+struct trace_hash_item * -+trace_hash_find(struct trace_hash *hash, unsigned long long key, -+ trace_hash_func match, void *data); -+ -+#endif /* _TRACE_HASH_H */ -diff --git a/lib/trace-cmd/include/private/trace-msg.h b/lib/trace-cmd/include/private/trace-msg.h -new file mode 100644 -index 0000000..aab8a69 ---- /dev/null -+++ b/lib/trace-cmd/include/private/trace-msg.h -@@ -0,0 +1,15 @@ -+#ifndef _TRACE_MSG_H_ -+#define _TRACE_MSG_H_ -+ -+#include <stdbool.h> -+ -+#define UDP_MAX_PACKET (65536 - 20) -+#define V3_MAGIC "766679\0" -+#define V3_CPU "-1V3" -+ -+#define V1_PROTOCOL 1 -+#define V3_PROTOCOL 3 -+ -+extern unsigned int page_size; -+ -+#endif /* _TRACE_MSG_H_ */ -diff --git a/lib/trace-cmd/include/trace-cmd-local.h b/lib/trace-cmd/include/trace-cmd-local.h -index 95dce66..d0a7365 100644 ---- a/lib/trace-cmd/include/trace-cmd-local.h -+++ b/lib/trace-cmd/include/trace-cmd-local.h -@@ -6,6 +6,8 @@ - #ifndef _TRACE_CMD_LOCAL_H - #define _TRACE_CMD_LOCAL_H - -+#include "trace-cmd-private.h" -+ - /* Can be overridden */ - void warning(const char *fmt, ...); - -diff --git a/lib/trace-cmd/trace-ftrace.c b/lib/trace-cmd/trace-ftrace.c -index 20bf71f..df7335f 100644 ---- a/lib/trace-cmd/trace-ftrace.c -+++ b/lib/trace-cmd/trace-ftrace.c -@@ -8,7 +8,7 @@ - #include <string.h> - #include <sys/param.h> - --#include "trace-cmd.h" -+#include "trace-cmd-private.h" - - struct tep_plugin_option trace_ftrace_options[] = { - { -diff --git a/lib/trace-cmd/trace-hooks.c b/lib/trace-cmd/trace-hooks.c -index 8c969a6..2dadf61 100644 ---- a/lib/trace-cmd/trace-hooks.c -+++ b/lib/trace-cmd/trace-hooks.c -@@ -8,7 +8,7 @@ - #include <stdlib.h> - #include <ctype.h> - --#include "trace-cmd.h" -+#include "trace-cmd-private.h" - #include "event-utils.h" - - struct hook_list *tracecmd_create_event_hook(const char *arg) -diff --git a/lib/trace-cmd/trace-recorder.c b/lib/trace-cmd/trace-recorder.c -index 2a6e2b6..6b647d6 100644 ---- a/lib/trace-cmd/trace-recorder.c -+++ b/lib/trace-cmd/trace-recorder.c -@@ -13,7 +13,7 @@ - #include <errno.h> - - #include "tracefs.h" --#include "trace-cmd.h" -+#include "trace-cmd-private.h" - #include "event-utils.h" - - /* F_GETPIPE_SZ was introduced in 2.6.35, older systems don't have it */ -diff --git a/lib/trace-cmd/trace-timesync.c b/lib/trace-cmd/trace-timesync.c -index 7a6a7eb..390e9d9 100644 ---- a/lib/trace-cmd/trace-timesync.c -+++ b/lib/trace-cmd/trace-timesync.c -@@ -17,7 +17,7 @@ - #include <errno.h> - #include <pthread.h> - --#include "trace-cmd.h" -+#include "trace-cmd-private.h" - #include "tracefs.h" - #include "event-utils.h" - #include "trace-tsync-local.h" -diff --git a/lib/trace-cmd/trace-util.c b/lib/trace-cmd/trace-util.c -index 0ead96e..6b5d872 100644 ---- a/lib/trace-cmd/trace-util.c -+++ b/lib/trace-cmd/trace-util.c -@@ -21,7 +21,7 @@ - #include <sys/sysinfo.h> - #include <time.h> - --#include "trace-cmd.h" -+#include "trace-cmd-private.h" - #include "event-utils.h" - - #define LOCAL_PLUGIN_DIR ".trace-cmd/plugins" -diff --git a/lib/traceevent/plugins/plugin_python_loader.c b/lib/traceevent/plugins/plugin_python_loader.c -index 776bf12..01bdfad 100644 ---- a/lib/traceevent/plugins/plugin_python_loader.c -+++ b/lib/traceevent/plugins/plugin_python_loader.c -@@ -1,6 +1,7 @@ - #include <Python.h> - #include <stdio.h> --#include "trace-cmd.h" -+#include "event-parse.h" -+#include "trace-cmd-private.h" - - #ifndef PYTHON_DIR - #define PYTHON_DIR "." -diff --git a/python/ctracecmd.i b/python/ctracecmd.i -index 01cd0d5..5f7181c 100644 ---- a/python/ctracecmd.i -+++ b/python/ctracecmd.i -@@ -15,6 +15,7 @@ - - %{ - #include "trace-cmd.h" -+#include "event-parse.h" - #include "event-utils.h" - #include <Python.h> - %} -diff --git a/tracecmd/include/trace-local.h b/tracecmd/include/trace-local.h -index 207aa68..28d1b4e 100644 ---- a/tracecmd/include/trace-local.h -+++ b/tracecmd/include/trace-local.h -@@ -9,7 +9,7 @@ - #include <sys/types.h> - #include <dirent.h> /* for DIR */ - --#include "trace-cmd.h" -+#include "trace-cmd-private.h" - #include "event-utils.h" - - #define TRACE_AGENT_DEFAULT_PORT 823 --- -2.29.2 - diff --git a/package/trace-cmd/0002-trace-cmd-make-it-build-against-musl-C-library.patch b/package/trace-cmd/0002-trace-cmd-make-it-build-against-musl-C-library.patch deleted file mode 100644 index 64021245dc..0000000000 --- a/package/trace-cmd/0002-trace-cmd-make-it-build-against-musl-C-library.patch +++ /dev/null @@ -1,140 +0,0 @@ -From 1a000636c1828eecdcec5360a51623ef4ffbff04 Mon Sep 17 00:00:00 2001 -From: Beniamin Sandu <beniaminsandu@gmail.com> -Date: Mon, 30 Nov 2020 14:27:55 +0200 -Subject: [PATCH] trace-cmd: make it build against musl C library - -* add some missing headers and macros -* set pthread affinity using pthread_setaffinity_np after creating the thread -instead of pthread_attr_setaffinity_np (which seems to not be implemented -in musl) - -Tested using https://musl.cc/x86_64-linux-musl-native.tgz - -Link: https://lore.kernel.org/linux-trace-devel/20201130122755.31000-1-beniaminsandu@gmail.com - -Reviewed-by: Tzvetomir Stoyanov (VMware) <tz.stoyanov@gmail.com> -Signed-off-by: Beniamin Sandu <beniaminsandu@gmail.com> -[ Fixed a whitespace issue ] -Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org> -[Retrieved from: -https://git.kernel.org/pub/scm/utils/trace-cmd/trace-cmd.git/commit/?id=1a000636c1828eecdcec5360a51623ef4ffbff04] -Signed-off-by: Fabrice Fontaine <fontaine.fabrice@gmail.com> ---- - .../include/private/trace-cmd-private.h | 1 + - lib/trace-cmd/include/trace-cmd-local.h | 1 + - lib/tracefs/include/tracefs-local.h | 12 ++++++++++++ - lib/tracefs/tracefs-events.c | 1 + - tracecmd/include/trace-local.h | 1 + - tracecmd/trace-tsync.c | 16 +++++++++++----- - 6 files changed, 27 insertions(+), 5 deletions(-) - -diff --git a/lib/trace-cmd/include/private/trace-cmd-private.h b/lib/trace-cmd/include/private/trace-cmd-private.h -index 458760e5..a0dac5da 100644 ---- a/lib/trace-cmd/include/private/trace-cmd-private.h -+++ b/lib/trace-cmd/include/private/trace-cmd-private.h -@@ -6,6 +6,7 @@ - #ifndef _TRACE_CMD_PRIVATE_H - #define _TRACE_CMD_PRIVATE_H - -+#include <sys/types.h> - #include "traceevent/event-parse.h" - #include "trace-cmd/trace-cmd.h" - -diff --git a/lib/trace-cmd/include/trace-cmd-local.h b/lib/trace-cmd/include/trace-cmd-local.h -index d0a7365a..0cd27441 100644 ---- a/lib/trace-cmd/include/trace-cmd-local.h -+++ b/lib/trace-cmd/include/trace-cmd-local.h -@@ -6,6 +6,7 @@ - #ifndef _TRACE_CMD_LOCAL_H - #define _TRACE_CMD_LOCAL_H - -+#include <byteswap.h> - #include "trace-cmd-private.h" - - /* Can be overridden */ -diff --git a/lib/tracefs/include/tracefs-local.h b/lib/tracefs/include/tracefs-local.h -index 9cc371b4..bdbf89e8 100644 ---- a/lib/tracefs/include/tracefs-local.h -+++ b/lib/tracefs/include/tracefs-local.h -@@ -13,4 +13,16 @@ void warning(const char *fmt, ...); - int str_read_file(const char *file, char **buffer); - char *trace_append_file(const char *dir, const char *name); - -+#ifndef ACCESSPERMS -+#define ACCESSPERMS (S_IRWXU|S_IRWXG|S_IRWXO) /* 0777 */ -+#endif -+ -+#ifndef ALLPERMS -+#define ALLPERMS (S_ISUID|S_ISGID|S_ISVTX|S_IRWXU|S_IRWXG|S_IRWXO) /* 07777 */ -+#endif -+ -+#ifndef DEFFILEMODE -+#define DEFFILEMODE (S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH) /* 0666*/ -+#endif -+ - #endif /* _TRACE_FS_LOCAL_H */ -diff --git a/lib/tracefs/tracefs-events.c b/lib/tracefs/tracefs-events.c -index 80a25ee5..a4e5215f 100644 ---- a/lib/tracefs/tracefs-events.c -+++ b/lib/tracefs/tracefs-events.c -@@ -13,6 +13,7 @@ - #include <errno.h> - #include <sys/stat.h> - #include <fcntl.h> -+#include <limits.h> - - #include "kbuffer.h" - #include "tracefs.h" -diff --git a/tracecmd/include/trace-local.h b/tracecmd/include/trace-local.h -index 28d1b4e0..85c7e03e 100644 ---- a/tracecmd/include/trace-local.h -+++ b/tracecmd/include/trace-local.h -@@ -8,6 +8,7 @@ - - #include <sys/types.h> - #include <dirent.h> /* for DIR */ -+#include <limits.h> - - #include "trace-cmd-private.h" - #include "event-utils.h" -diff --git a/tracecmd/trace-tsync.c b/tracecmd/trace-tsync.c -index e639788d..8b9083ae 100644 ---- a/tracecmd/trace-tsync.c -+++ b/tracecmd/trace-tsync.c -@@ -104,13 +104,16 @@ int tracecmd_host_tsync(struct buffer_instance *instance, - - pthread_attr_init(&attrib); - pthread_attr_setdetachstate(&attrib, PTHREAD_CREATE_JOINABLE); -- if (!get_first_cpu(&pin_mask, &mask_size)) -- pthread_attr_setaffinity_np(&attrib, mask_size, pin_mask); - - ret = pthread_create(&instance->tsync_thread, &attrib, - tsync_host_thread, &instance->tsync); -- if (!ret) -+ -+ if (!ret) { -+ if (!get_first_cpu(&pin_mask, &mask_size)) -+ pthread_setaffinity_np(instance->tsync_thread, mask_size, pin_mask); - instance->tsync_thread_running = true; -+ } -+ - if (pin_mask) - CPU_FREE(pin_mask); - pthread_attr_destroy(&attrib); -@@ -243,11 +246,14 @@ unsigned int tracecmd_guest_tsync(char *tsync_protos, - pthread_attr_init(&attrib); - tsync->sync_proto = proto; - pthread_attr_setdetachstate(&attrib, PTHREAD_CREATE_JOINABLE); -- if (!get_first_cpu(&pin_mask, &mask_size)) -- pthread_attr_setaffinity_np(&attrib, mask_size, pin_mask); - - ret = pthread_create(thr_id, &attrib, tsync_agent_thread, tsync); - -+ if (!ret) { -+ if (!get_first_cpu(&pin_mask, &mask_size)) -+ pthread_setaffinity_np(*thr_id, mask_size, pin_mask); -+ } -+ - if (pin_mask) - CPU_FREE(pin_mask); - pthread_attr_destroy(&attrib); diff --git a/package/trace-cmd/0003-trace-cmd-Move-add_event_pid-out-of-ifndef-NO_PTRACE.patch b/package/trace-cmd/0003-trace-cmd-Move-add_event_pid-out-of-ifndef-NO_PTRACE.patch deleted file mode 100644 index ca32e69ab1..0000000000 --- a/package/trace-cmd/0003-trace-cmd-Move-add_event_pid-out-of-ifndef-NO_PTRACE.patch +++ /dev/null @@ -1,51 +0,0 @@ -From 2f55ded528cfd8ef468bdd1f8bb82dcf1cfae04a Mon Sep 17 00:00:00 2001 -From: "Steven Rostedt (VMware)" <rostedt@goodmis.org> -Date: Wed, 16 Dec 2020 18:19:43 -0500 -Subject: [PATCH] trace-cmd: Move add_event_pid() out of #ifndef NO_PTRACE - -When NO_PTRACE is defined, add_event_pid() is also not defined, but it is -used outside of NO_PTRACE pre processor block. And this causes a -"add_event_pid" not defined build failure. - -Link: https://lore.kernel.org/linux-trace-devel/20201216232145.010165486@goodmis.org - -Fixes: 0844cff1c ("trace-cmd: Fix "trace-cmd reset" command to restore the default value of set_event_pid") -Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org> -[Retrieved from: -https://git.kernel.org/pub/scm/utils/trace-cmd/trace-cmd.git/commit/?id=2f55ded528cfd8ef468bdd1f8bb82dcf1cfae04a] -Signed-off-by: Fabrice Fontaine <fontaine.fabrice@gmail.com> ---- - tracecmd/trace-record.c | 12 ++++++------ - 1 file changed, 6 insertions(+), 6 deletions(-) - -diff --git a/tracecmd/trace-record.c b/tracecmd/trace-record.c -index f8baed7d..e2d1cedf 100644 ---- a/tracecmd/trace-record.c -+++ b/tracecmd/trace-record.c -@@ -1312,8 +1312,13 @@ static int trace_wait_for_processes(struct buffer_instance *instance) { - free(pidfds); - return ret; - } --#ifndef NO_PTRACE - -+static void add_event_pid(struct buffer_instance *instance, const char *buf) -+{ -+ tracefs_instance_file_write(instance->tracefs, "set_event_pid", buf); -+} -+ -+#ifndef NO_PTRACE - /** - * append_pid_filter - add a new pid to an existing filter - * @curr_filter: the filter to append to. If NULL, then allocate one -@@ -1369,11 +1374,6 @@ static void update_sched_events(struct buffer_instance *instance, int pid) - static int open_instance_fd(struct buffer_instance *instance, - const char *file, int flags); - --static void add_event_pid(struct buffer_instance *instance, const char *buf) --{ -- tracefs_instance_file_write(instance->tracefs, "set_event_pid", buf); --} -- - static void add_new_filter_child_pid(int pid, int child) - { - struct buffer_instance *instance; diff --git a/package/trace-cmd/trace-cmd.hash b/package/trace-cmd/trace-cmd.hash index 0afde6705e..78ff3472c3 100644 --- a/package/trace-cmd/trace-cmd.hash +++ b/package/trace-cmd/trace-cmd.hash @@ -1,5 +1,5 @@ # Locally computed -sha256 8bab29530cd05272dccab48c9780644758e71ed990ce65c701b9095f7beae417 trace-cmd-trace-cmd-v2.9.1-br1.tar.gz +sha256 026cce03b4ae61f19848646acecf151dd7dd62617859edcf73ae954eb65b2653 trace-cmd-trace-cmd-v2.9.5-br1.tar.gz sha256 b1d04b850c1c7471b0f0896f6c6f0fcfc9f07e2dd183a5f5826af269fe9e88fb COPYING sha256 70f297763149e72306919c924e164f83041d5e512868d4c8c1826c171b3e49f9 COPYING.LIB sha256 f6b78c087c3ebdf0f3c13415070dd480a3f35d8fc76f3d02180a407c1c812f79 LICENSES/GPL-2.0 diff --git a/package/trace-cmd/trace-cmd.mk b/package/trace-cmd/trace-cmd.mk index bc431e5dd2..f9b54ed765 100644 --- a/package/trace-cmd/trace-cmd.mk +++ b/package/trace-cmd/trace-cmd.mk @@ -4,7 +4,7 @@ # ################################################################################ -TRACE_CMD_VERSION = trace-cmd-v2.9.1 +TRACE_CMD_VERSION = trace-cmd-v2.9.5 TRACE_CMD_SITE = https://git.kernel.org/pub/scm/utils/trace-cmd/trace-cmd.git TRACE_CMD_SITE_METHOD = git TRACE_CMD_LICENSE = GPL-2.0, LGPL-2.1
Update to version 2.9.5 and remove local patches that have been upstreamed. Signed-off-by: Giulio Benetti <giulio.benetti@benettiengineering.com> --- ...01-trace-cmd-libtracecmd-API-cleanup.patch | 1486 ----------------- ...make-it-build-against-musl-C-library.patch | 140 -- ...dd_event_pid-out-of-ifndef-NO_PTRACE.patch | 51 - package/trace-cmd/trace-cmd.hash | 2 +- package/trace-cmd/trace-cmd.mk | 2 +- 5 files changed, 2 insertions(+), 1679 deletions(-) delete mode 100644 package/trace-cmd/0001-trace-cmd-libtracecmd-API-cleanup.patch delete mode 100644 package/trace-cmd/0002-trace-cmd-make-it-build-against-musl-C-library.patch delete mode 100644 package/trace-cmd/0003-trace-cmd-Move-add_event_pid-out-of-ifndef-NO_PTRACE.patch