Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d10eb1eb authored by Arnaldo Carvalho de Melo's avatar Arnaldo Carvalho de Melo
Browse files

perf ordered_events: Allow tools to specify a deliver method

So that we can simplify the deliver method to pass just:

 (ordered_events, ordered_event, sample);

Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: Borislav Petkov <bp@suse.de>
Cc: David Ahern <dsahern@gmail.com>
Cc: Don Zickus <dzickus@redhat.com>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Jiri Olsa <jolsa@redhat.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Stephane Eranian <eranian@google.com>
Link: http://lkml.kernel.org/n/tip-j0s4bpxs5qza5tnkvjwom9rw@git.kernel.org


Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
parent b7b61cbe
Loading
Loading
Loading
Loading
+4 −3
Original line number Diff line number Diff line
@@ -181,8 +181,7 @@ static int __ordered_events__flush(struct ordered_events *oe)
		if (ret)
			pr_err("Can't parse sample, err = %d\n", ret);
		else {
			ret = machines__deliver_event(oe->machines, oe->evlist, iter->event,
						      &sample, oe->tool, iter->file_offset);
			ret = oe->deliver(oe, iter, &sample);
			if (ret)
				return ret;
		}
@@ -264,7 +263,8 @@ int ordered_events__flush(struct ordered_events *oe, enum oe_flush how)
}

void ordered_events__init(struct ordered_events *oe, struct machines *machines,
			  struct perf_evlist *evlist, struct perf_tool *tool)
			  struct perf_evlist *evlist, struct perf_tool *tool,
			  ordered_events__deliver_t deliver)
{
	INIT_LIST_HEAD(&oe->events);
	INIT_LIST_HEAD(&oe->cache);
@@ -274,6 +274,7 @@ void ordered_events__init(struct ordered_events *oe, struct machines *machines,
	oe->evlist	   = evlist;
	oe->machines	   = machines;
	oe->tool	   = tool;
	oe->deliver	   = deliver;
}

void ordered_events__free(struct ordered_events *oe)
+10 −1
Original line number Diff line number Diff line
@@ -5,6 +5,7 @@

struct perf_tool;
struct perf_evlist;
struct perf_sample;
struct machines;

struct ordered_event {
@@ -21,6 +22,12 @@ enum oe_flush {
	OE_FLUSH__HALF,
};

struct ordered_events;

typedef int (*ordered_events__deliver_t)(struct ordered_events *oe,
					 struct ordered_event *event,
					 struct perf_sample *sample);

struct ordered_events {
	u64			last_flush;
	u64			next_flush;
@@ -35,6 +42,7 @@ struct ordered_events {
	struct machines		*machines;
	struct perf_evlist	*evlist;
	struct perf_tool	*tool;
	ordered_events__deliver_t deliver;
	int			buffer_idx;
	unsigned int		nr_events;
	enum oe_flush		last_flush_type;
@@ -46,7 +54,8 @@ struct ordered_event *ordered_events__new(struct ordered_events *oe, u64 timesta
void ordered_events__delete(struct ordered_events *oe, struct ordered_event *event);
int ordered_events__flush(struct ordered_events *oe, enum oe_flush how);
void ordered_events__init(struct ordered_events *oe, struct machines *machines,
			  struct perf_evlist *evlsit, struct perf_tool *tool);
			  struct perf_evlist *evlsit, struct perf_tool *tool,
			  ordered_events__deliver_t deliver);
void ordered_events__free(struct ordered_events *oe);

static inline
+23 −7
Original line number Diff line number Diff line
@@ -16,6 +16,12 @@
#include "perf_regs.h"
#include "asm/bug.h"

static int machines__deliver_event(struct machines *machines,
				   struct perf_evlist *evlist,
				   union perf_event *event,
				   struct perf_sample *sample,
				   struct perf_tool *tool, u64 file_offset);

static int perf_session__open(struct perf_session *session)
{
	struct perf_data_file *file = session->file;
@@ -86,6 +92,14 @@ static void perf_session__set_comm_exec(struct perf_session *session)
	machines__set_comm_exec(&session->machines, comm_exec);
}

static int ordered_events__deliver_event(struct ordered_events *oe,
					 struct ordered_event *event,
					 struct perf_sample *sample)
{
	return machines__deliver_event(oe->machines, oe->evlist, event->event,
				       sample, oe->tool, event->file_offset);
}

struct perf_session *perf_session__new(struct perf_data_file *file,
				       bool repipe, struct perf_tool *tool)
{
@@ -125,8 +139,10 @@ struct perf_session *perf_session__new(struct perf_data_file *file,
	    tool->ordered_events && !perf_evlist__sample_id_all(session->evlist)) {
		dump_printf("WARNING: No sample_id_all support, falling back to unordered processing\n");
		tool->ordered_events = false;
	} else
		ordered_events__init(&session->ordered_events, &session->machines, session->evlist, tool);
	} else {
		ordered_events__init(&session->ordered_events, &session->machines,
				     session->evlist, tool, ordered_events__deliver_event);
	}

	return session;

@@ -888,7 +904,7 @@ static int
					    &sample->read.one, machine);
}

int machines__deliver_event(struct machines *machines,
static int machines__deliver_event(struct machines *machines,
				   struct perf_evlist *evlist,
				   union perf_event *event,
				   struct perf_sample *sample,
+0 −6
Original line number Diff line number Diff line
@@ -55,12 +55,6 @@ int perf_session__queue_event(struct perf_session *s, union perf_event *event,

void perf_tool__fill_defaults(struct perf_tool *tool);

int machines__deliver_event(struct machines *machines,
				struct perf_evlist *evlist,
				union perf_event *event,
				struct perf_sample *sample,
				struct perf_tool *tool, u64 file_offset);

int perf_session__resolve_callchain(struct perf_session *session,
				    struct perf_evsel *evsel,
				    struct thread *thread,