On Mon, Feb 04, 2013 at 01:32:56PM +0100, Jiri Olsa wrote: > From: "[email protected]" <[email protected]> > > The only way to get the event ID is by reading the event fd, > followed by parsing the ID value out of the returned data. > > While this is ok for current read format used by perf tool, > it is not ok when we use PERF_FORMAT_GROUP format. > > With this format the data are returned for the whole group > and there's no way to find out what ID belongs to our fd > (if we are not group leader event). > > Adding a simple ioctl that returns event primary ID for given fd. > > Signed-off-by: Jiri Olsa <[email protected]> > Cc: Arnaldo Carvalho de Melo <[email protected]>
Acked-by: Peter Zijlstra <[email protected]> > Cc: Ingo Molnar <[email protected]> > Cc: Paul Mackerras <[email protected]> > Cc: Corey Ashford <[email protected]> > Cc: Frederic Weisbecker <[email protected]> > Cc: Namhyung Kim <[email protected]> > --- > include/uapi/linux/perf_event.h | 1 + > kernel/events/core.c | 9 +++++++++ > 2 files changed, 10 insertions(+) > > diff --git a/include/uapi/linux/perf_event.h b/include/uapi/linux/perf_event.h > index 9fa9c62..b4ea8ed 100644 > --- a/include/uapi/linux/perf_event.h > +++ b/include/uapi/linux/perf_event.h > @@ -316,6 +316,7 @@ struct perf_event_attr { > #define PERF_EVENT_IOC_PERIOD _IOW('$', 4, __u64) > #define PERF_EVENT_IOC_SET_OUTPUT _IO ('$', 5) > #define PERF_EVENT_IOC_SET_FILTER _IOW('$', 6, char *) > +#define PERF_EVENT_IOC_ID _IOR('$', 7, u64 *) > > enum perf_event_ioc_flags { > PERF_IOC_FLAG_GROUP = 1U << 0, > diff --git a/kernel/events/core.c b/kernel/events/core.c > index 301079d..4081261 100644 > --- a/kernel/events/core.c > +++ b/kernel/events/core.c > @@ -3277,6 +3277,15 @@ static long perf_ioctl(struct file *file, unsigned int > cmd, unsigned long arg) > case PERF_EVENT_IOC_PERIOD: > return perf_event_period(event, (u64 __user *)arg); > > + case PERF_EVENT_IOC_ID: > + { > + u64 id = primary_event_id(event); > + > + if (copy_to_user((void __user *)arg, &id, sizeof(id))) > + return -EFAULT; > + return 0; > + } > + > case PERF_EVENT_IOC_SET_OUTPUT: > { > int ret; > -- > 1.7.11.7 > -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/

