diff options
| author | Greg Kroah-Hartman <gregkh@suse.de> | 2011-06-08 13:50:00 -0700 | 
|---|---|---|
| committer | Greg Kroah-Hartman <gregkh@suse.de> | 2011-06-08 13:50:35 -0700 | 
| commit | 7e24cf43f7dcd6312473f01b59be60662232ffce (patch) | |
| tree | d2bf66d51d6d5673b44986456c38b81a95a539f7 /tools | |
| parent | a26d31cef06f43a76327c21235e75450869df2b8 (diff) | |
| parent | 33726bf2140a0e7c9de3ccd7cba6d69962f0b773 (diff) | |
Merge 3.0-rc2 + Linus's latest into usb-linus
This is needed to get the following MAINTAINERS patch to apply properly.
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'tools')
| -rw-r--r-- | tools/perf/builtin-test.c | 2 | ||||
| -rw-r--r-- | tools/perf/util/event.c | 16 | ||||
| -rw-r--r-- | tools/perf/util/event.h | 2 | ||||
| -rw-r--r-- | tools/perf/util/evlist.c | 68 | ||||
| -rw-r--r-- | tools/perf/util/evlist.h | 6 | ||||
| -rw-r--r-- | tools/perf/util/evsel.c | 16 | ||||
| -rw-r--r-- | tools/perf/util/evsel.h | 7 | ||||
| -rw-r--r-- | tools/perf/util/python.c | 14 | ||||
| -rw-r--r-- | tools/perf/util/session.c | 12 | 
9 files changed, 83 insertions, 60 deletions
| diff --git a/tools/perf/builtin-test.c b/tools/perf/builtin-test.c index b67186228c89..2da9162262b0 100644 --- a/tools/perf/builtin-test.c +++ b/tools/perf/builtin-test.c @@ -474,7 +474,7 @@ static int test__basic_mmap(void)  	unsigned int nr_events[nsyscalls],  		     expected_nr_events[nsyscalls], i, j;  	struct perf_evsel *evsels[nsyscalls], *evsel; -	int sample_size = perf_sample_size(attr.sample_type); +	int sample_size = __perf_evsel__sample_size(attr.sample_type);  	for (i = 0; i < nsyscalls; ++i) {  		char name[64]; diff --git a/tools/perf/util/event.c b/tools/perf/util/event.c index 0fe9adf76379..3c1b8a632101 100644 --- a/tools/perf/util/event.c +++ b/tools/perf/util/event.c @@ -35,22 +35,6 @@ const char *perf_event__name(unsigned int id)  	return perf_event__names[id];  } -int perf_sample_size(u64 sample_type) -{ -	u64 mask = sample_type & PERF_SAMPLE_MASK; -	int size = 0; -	int i; - -	for (i = 0; i < 64; i++) { -		if (mask & (1ULL << i)) -			size++; -	} - -	size *= sizeof(u64); - -	return size; -} -  static struct perf_sample synth_sample = {  	.pid	   = -1,  	.tid	   = -1, diff --git a/tools/perf/util/event.h b/tools/perf/util/event.h index c08332871408..1d7f66488a88 100644 --- a/tools/perf/util/event.h +++ b/tools/perf/util/event.h @@ -82,8 +82,6 @@ struct perf_sample {  	struct ip_callchain *callchain;  }; -int perf_sample_size(u64 sample_type); -  #define BUILD_ID_SIZE 20  struct build_id_event { diff --git a/tools/perf/util/evlist.c b/tools/perf/util/evlist.c index 50aa34879c33..b021ea9265c3 100644 --- a/tools/perf/util/evlist.c +++ b/tools/perf/util/evlist.c @@ -12,7 +12,6 @@  #include "evlist.h"  #include "evsel.h"  #include "util.h" -#include "debug.h"  #include <sys/mman.h> @@ -257,19 +256,15 @@ int perf_evlist__alloc_mmap(struct perf_evlist *evlist)  	return evlist->mmap != NULL ? 0 : -ENOMEM;  } -static int __perf_evlist__mmap(struct perf_evlist *evlist, struct perf_evsel *evsel, +static int __perf_evlist__mmap(struct perf_evlist *evlist,  			       int idx, int prot, int mask, int fd)  {  	evlist->mmap[idx].prev = 0;  	evlist->mmap[idx].mask = mask;  	evlist->mmap[idx].base = mmap(NULL, evlist->mmap_len, prot,  				      MAP_SHARED, fd, 0); -	if (evlist->mmap[idx].base == MAP_FAILED) { -		if (evlist->cpus->map[idx] == -1 && evsel->attr.inherit) -			ui__warning("Inherit is not allowed on per-task " -				    "events using mmap.\n"); +	if (evlist->mmap[idx].base == MAP_FAILED)  		return -1; -	}  	perf_evlist__add_pollfd(evlist, fd);  	return 0; @@ -289,7 +284,7 @@ static int perf_evlist__mmap_per_cpu(struct perf_evlist *evlist, int prot, int m  				if (output == -1) {  					output = fd; -					if (__perf_evlist__mmap(evlist, evsel, cpu, +					if (__perf_evlist__mmap(evlist, cpu,  								prot, mask, output) < 0)  						goto out_unmap;  				} else { @@ -329,7 +324,7 @@ static int perf_evlist__mmap_per_thread(struct perf_evlist *evlist, int prot, in  			if (output == -1) {  				output = fd; -				if (__perf_evlist__mmap(evlist, evsel, thread, +				if (__perf_evlist__mmap(evlist, thread,  							prot, mask, output) < 0)  					goto out_unmap;  			} else { @@ -460,33 +455,46 @@ int perf_evlist__set_filters(struct perf_evlist *evlist)  	return 0;  } -u64 perf_evlist__sample_type(struct perf_evlist *evlist) +bool perf_evlist__valid_sample_type(const struct perf_evlist *evlist)  { -	struct perf_evsel *pos; -	u64 type = 0; - -	list_for_each_entry(pos, &evlist->entries, node) { -		if (!type) -			type = pos->attr.sample_type; -		else if (type != pos->attr.sample_type) -			die("non matching sample_type"); +	struct perf_evsel *pos, *first; + +	pos = first = list_entry(evlist->entries.next, struct perf_evsel, node); + +	list_for_each_entry_continue(pos, &evlist->entries, node) { +		if (first->attr.sample_type != pos->attr.sample_type) +			return false;  	} -	return type; +	return true;  } -bool perf_evlist__sample_id_all(const struct perf_evlist *evlist) +u64 perf_evlist__sample_type(const struct perf_evlist *evlist) +{ +	struct perf_evsel *first; + +	first = list_entry(evlist->entries.next, struct perf_evsel, node); +	return first->attr.sample_type; +} + +bool perf_evlist__valid_sample_id_all(const struct perf_evlist *evlist)  { -	bool value = false, first = true; -	struct perf_evsel *pos; - -	list_for_each_entry(pos, &evlist->entries, node) { -		if (first) { -			value = pos->attr.sample_id_all; -			first = false; -		} else if (value != pos->attr.sample_id_all) -			die("non matching sample_id_all"); +	struct perf_evsel *pos, *first; + +	pos = first = list_entry(evlist->entries.next, struct perf_evsel, node); + +	list_for_each_entry_continue(pos, &evlist->entries, node) { +		if (first->attr.sample_id_all != pos->attr.sample_id_all) +			return false;  	} -	return value; +	return true; +} + +bool perf_evlist__sample_id_all(const struct perf_evlist *evlist) +{ +	struct perf_evsel *first; + +	first = list_entry(evlist->entries.next, struct perf_evsel, node); +	return first->attr.sample_id_all;  } diff --git a/tools/perf/util/evlist.h b/tools/perf/util/evlist.h index 0a1ef1f051f0..b2b862374f37 100644 --- a/tools/perf/util/evlist.h +++ b/tools/perf/util/evlist.h @@ -66,7 +66,9 @@ int perf_evlist__create_maps(struct perf_evlist *evlist, pid_t target_pid,  void perf_evlist__delete_maps(struct perf_evlist *evlist);  int perf_evlist__set_filters(struct perf_evlist *evlist); -u64 perf_evlist__sample_type(struct perf_evlist *evlist); -bool perf_evlist__sample_id_all(const struct perf_evlist *evlist); +u64 perf_evlist__sample_type(const struct perf_evlist *evlist); +bool perf_evlist__sample_id_all(const const struct perf_evlist *evlist); +bool perf_evlist__valid_sample_type(const struct perf_evlist *evlist); +bool perf_evlist__valid_sample_id_all(const struct perf_evlist *evlist);  #endif /* __PERF_EVLIST_H */ diff --git a/tools/perf/util/evsel.c b/tools/perf/util/evsel.c index cca29ededb5b..0239eb87b232 100644 --- a/tools/perf/util/evsel.c +++ b/tools/perf/util/evsel.c @@ -15,6 +15,22 @@  #define FD(e, x, y) (*(int *)xyarray__entry(e->fd, x, y)) +int __perf_evsel__sample_size(u64 sample_type) +{ +	u64 mask = sample_type & PERF_SAMPLE_MASK; +	int size = 0; +	int i; + +	for (i = 0; i < 64; i++) { +		if (mask & (1ULL << i)) +			size++; +	} + +	size *= sizeof(u64); + +	return size; +} +  void perf_evsel__init(struct perf_evsel *evsel,  		      struct perf_event_attr *attr, int idx)  { diff --git a/tools/perf/util/evsel.h b/tools/perf/util/evsel.h index f79bb2c09a6c..7e9366e4490b 100644 --- a/tools/perf/util/evsel.h +++ b/tools/perf/util/evsel.h @@ -149,4 +149,11 @@ static inline int perf_evsel__read_scaled(struct perf_evsel *evsel,  	return __perf_evsel__read(evsel, ncpus, nthreads, true);  } +int __perf_evsel__sample_size(u64 sample_type); + +static inline int perf_evsel__sample_size(struct perf_evsel *evsel) +{ +	return __perf_evsel__sample_size(evsel->attr.sample_type); +} +  #endif /* __PERF_EVSEL_H */ diff --git a/tools/perf/util/python.c b/tools/perf/util/python.c index 69436b3200a4..a9ac0504aabd 100644 --- a/tools/perf/util/python.c +++ b/tools/perf/util/python.c @@ -674,7 +674,7 @@ static PyObject *pyrf_evlist__read_on_cpu(struct pyrf_evlist *pevlist,  	struct perf_evlist *evlist = &pevlist->evlist;  	union perf_event *event;  	int sample_id_all = 1, cpu; -	static char *kwlist[] = {"sample_id_all", NULL, NULL}; +	static char *kwlist[] = {"cpu", "sample_id_all", NULL, NULL};  	int err;  	if (!PyArg_ParseTupleAndKeywords(args, kwargs, "i|i", kwlist, @@ -692,16 +692,14 @@ static PyObject *pyrf_evlist__read_on_cpu(struct pyrf_evlist *pevlist,  		first = list_entry(evlist->entries.next, struct perf_evsel, node);  		err = perf_event__parse_sample(event, first->attr.sample_type, -					       perf_sample_size(first->attr.sample_type), +					       perf_evsel__sample_size(first),  					       sample_id_all, &pevent->sample); -		if (err) { -			pr_err("Can't parse sample, err = %d\n", err); -			goto end; -		} - +		if (err) +			return PyErr_Format(PyExc_OSError, +					    "perf: can't parse sample, err=%d", err);  		return pyevent;  	} -end: +  	Py_INCREF(Py_None);  	return Py_None;  } diff --git a/tools/perf/util/session.c b/tools/perf/util/session.c index 64500fc78799..f5a8fbdd3f76 100644 --- a/tools/perf/util/session.c +++ b/tools/perf/util/session.c @@ -58,6 +58,16 @@ static int perf_session__open(struct perf_session *self, bool force)  		goto out_close;  	} +	if (!perf_evlist__valid_sample_type(self->evlist)) { +		pr_err("non matching sample_type"); +		goto out_close; +	} + +	if (!perf_evlist__valid_sample_id_all(self->evlist)) { +		pr_err("non matching sample_id_all"); +		goto out_close; +	} +  	self->size = input_stat.st_size;  	return 0; @@ -97,7 +107,7 @@ out:  void perf_session__update_sample_type(struct perf_session *self)  {  	self->sample_type = perf_evlist__sample_type(self->evlist); -	self->sample_size = perf_sample_size(self->sample_type); +	self->sample_size = __perf_evsel__sample_size(self->sample_type);  	self->sample_id_all = perf_evlist__sample_id_all(self->evlist);  	perf_session__id_header_size(self);  } | 
