On Fri, Nov 12, 2010 at 4:36 PM, heechul Yun <heec...@illinois.edu> wrote: > > > On Fri, Nov 12, 2010 at 8:41 AM, stephane eranian <eran...@googlemail.com> > wrote: >> >> On Fri, Nov 12, 2010 at 2:22 PM, heechul Yun <heec...@illinois.edu> wrote: >> > It was because of a bug in kernel/perf_event.c as shown in the >> > following. >> > static int perf_event_period(struct perf_event *event, u64 __user *arg) >> > { >> > ... >> > size = copy_from_user(&value, arg, sizeof(value)); >> > if (size != sizeof(value)) // <--------- bug. should be: if (size) >> > return >> > -EFAULT >> > return -EFAULT; >> > >> >> Ok, I will post a file for this on LKML. >> Unless you want to do it. >> > > It seems that it is already fixed in the latest 2.6.36 release. All pre > 2.6.36 (2.6.35 - 2.6.32 at least) had the bug.
That sounds familiar. Yes, now I remember seeing a fix about copy_from_user(). Thanks for tracking this down on your side anyway. > Heechul > >> > I found this bug has been there in all versions before it was finally >> > fixed >> > in 2.6.36. >> > Heechul >> > >> > On Thu, Nov 11, 2010 at 9:23 PM, heechul Yun <heec...@illinois.edu> >> > wrote: >> >> >> >> Hi, >> >> I wanted to adjust sampling period using PERF_EVENT_IOC_PERIOD ioctl. >> >> I modified the notify_group to change the period at runtime as follows. >> >> diff --git a/perf_examples/notify_group.c >> >> b/perf_examples/notify_group.c >> >> index 76869b0..d8ff5e1 100644 >> >> --- a/perf_examples/notify_group.c >> >> +++ b/perf_examples/notify_group.c >> >> @@ -54,6 +54,7 @@ sigio_handler(int n, struct siginfo *info, struct >> >> sigcontext *sc) >> >> struct perf_event_mmap_page *hdr; >> >> struct perf_event_header ehdr; >> >> uint64_t ip; >> >> + uint64_t new_period; >> >> int id, ret; >> >> >> >> id = perf_fd2event(fds, num_fds, info->si_fd); >> >> @@ -87,6 +88,11 @@ skip: >> >> /* >> >> * rearm the counter for one more shot >> >> */ >> >> + new_period = SMPL_PERIOD * 2 ; >> >> + ret = ioctl(info->si_fd, PERF_EVENT_IOC_PERIOD, new_period); >> >> + if (ret == -1) >> >> + err(1, "cannot set"); >> >> + >> >> ret = ioctl(info->si_fd, PERF_EVENT_IOC_REFRESH, 1); >> >> if (ret == -1) >> >> err(1, "cannot refresh"); >> >> It, however, failed to do so as belows. >> >> $ ./notify_group >> >> i=0 disabled=0 >> >> i=1 disabled=1 >> >> i=2 disabled=1 >> >> Notification 1: 0x8048f63 fd=3 PERF_COUNT_HW_CPU_CYCLES >> >> notify_group: cannot set: Invalid argument >> >> >> >> Any idea? >> >> >> >> BTW, I found an error in perf_event.h of libpfm4 which prevents >> >> compiling >> >> the code. >> >> The following diff is the fix. >> >> diff --git a/include/perfmon/perf_event.h >> >> b/include/perfmon/perf_event.h >> >> index cfddef0..7f2889e 100644 >> >> --- a/include/perfmon/perf_event.h >> >> +++ b/include/perfmon/perf_event.h >> >> @@ -13,7 +13,7 @@ >> >> */ >> >> #ifndef _LINUX_PERF_EVENT_H >> >> #define _LINUX_PERF_EVENT_H >> >> - >> >> +#include <linux/types.h> >> >> #include <sys/types.h> >> >> #include <inttypes.h> >> >> #ifndef PR_TASK_PERF_EVENTS_DISABLE >> >> @@ -236,7 +236,7 @@ typedef struct perf_event_attr { >> >> #define PERF_EVENT_IOC_DISABLE _IO ('$', 1) >> >> #define PERF_EVENT_IOC_REFRESH _IO ('$', 2) >> >> #define PERF_EVENT_IOC_RESET _IO ('$', 3) >> >> -#define PERF_EVENT_IOC_PERIOD _IOW('$', 4, u64) >> >> +#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 *) >> >> >> >> >> >> - Heechul >> > >> > >> > >> > ------------------------------------------------------------------------------ >> > Centralized Desktop Delivery: Dell and VMware Reference Architecture >> > Simplifying enterprise desktop deployment and management using >> > Dell EqualLogic storage and VMware View: A highly scalable, end-to-end >> > client virtualization framework. Read more! >> > http://p.sf.net/sfu/dell-eql-dev2dev >> > _______________________________________________ >> > perfmon2-devel mailing list >> > perfmon2-devel@lists.sourceforge.net >> > https://lists.sourceforge.net/lists/listinfo/perfmon2-devel >> > >> > > > ------------------------------------------------------------------------------ Centralized Desktop Delivery: Dell and VMware Reference Architecture Simplifying enterprise desktop deployment and management using Dell EqualLogic storage and VMware View: A highly scalable, end-to-end client virtualization framework. Read more! http://p.sf.net/sfu/dell-eql-dev2dev _______________________________________________ perfmon2-devel mailing list perfmon2-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/perfmon2-devel