On 07/23/2015 07:16 PM, Vince Weaver wrote: > > The rdpmc instruction allows reading performance counters directly > from usersapce. Prior to Linux 4.0 any process could use this > instruction when a perf event was running, even if the process itself > did not have any open. The following changesets changed the default > behavior so that only processes with active events can use rdpmc. Thanks, Vince. Applied. Cheers, Michael > Note this change broke the ABI. Previously: > /sys/bus/event_source/devices/cpu/rdpmc > Set to "1" meant allow across whole system. > > After the change "2" means the whole system, and "1" means per-process. > > Probably a better change would have been to add "2" to mean per-process > and make that the default setting. Probably too late to fix that now. > > commit a66734297f78707ce39d756b656bfae861d53f62 > Author: Andy Lutomirski <luto@xxxxxxxxxxxxxx> > > perf/x86: Add /sys/devices/cpu/rdpmc=2 to allow rdpmc for all tasks > > commit 7911d3f7af14a614617e38245fedf98a724e46a9 > Author: Andy Lutomirski <luto@xxxxxxxxxxxxxx> > > perf/x86: Only allow rdpmc if a perf_event is mapped > > Signed-off-by: Andy Lutomirski <luto@xxxxxxxxxxxxxx> > Signed-off-by: Peter Zijlstra (Intel) <peterz@xxxxxxxxxxxxx> > Cc: Paul Mackerras <paulus@xxxxxxxxx> > Cc: Arnaldo Carvalho de Melo <acme@xxxxxxxxxx> > Cc: Kees Cook <keescook@xxxxxxxxxxxx> > Cc: Andrea Arcangeli <aarcange@xxxxxxxxxx> > Cc: Vince Weaver <vince@xxxxxxxxxx> > Cc: "hillf.zj" <hillf.zj@xxxxxxxxxxxxxxx> > Cc: Valdis Kletnieks <Valdis.Kletnieks@xxxxxx> > Cc: Linus Torvalds <torvalds@xxxxxxxxxxxxxxxxxxxx> > Link: http://lkml.kernel.org/r/caac3c1c707dcca48ecbc35f4def21495856f479.1414190806.git.luto@xxxxxxxxxxxxxx > Signed-off-by: Ingo Molnar <mingo@xxxxxxxxxx> > > Signed-off-by: Vince Weaver <vincent.weaver@xxxxxxxxx> > > diff --git a/man2/perf_event_open.2 b/man2/perf_event_open.2 > index 8ef9ec6..b3cd93f 100644 > --- a/man2/perf_event_open.2 > +++ b/man2/perf_event_open.2 > @@ -2595,6 +2595,16 @@ Support for this can be detected with the > .I cap_usr_rdpmc > field in the mmap page; documentation on how > to calculate event values can be found in that section. > + > +Originally, when rdpmc support was enabled, any process (not just ones > +with an active perf event) could use the rdpmc instruction to access > +the counters. > +Starting with Linux 4.0 > +.\" 7911d3f7af14a614617e38245fedf98a724e46a9 > +rdpmc support is only allowed if an event is currently enabled > +in a process' context. > +To restore the old behavior, write the value 2 to > +.IR /sys/devices/cpu/rdpmc . > .SS perf_event ioctl calls > .PP > Various ioctls act on > @@ -2783,11 +2793,18 @@ field of > .I perf_event_attr > to indicate that you wish to use this PMU. > .TP > -.IR /sys/bus/event_source/devices/*/rdpmc " (since Linux 3.4)" > +.IR /sys/bus/event_source/devices/cpu/rdpmc " (since Linux 3.4)" > .\" commit 0c9d42ed4cee2aa1dfc3a260b741baae8615744f > If this file is 1, then direct user-space access to the > performance counter registers is allowed via the rdpmc instruction. > This can be disabled by echoing 0 to the file. > + > +As of Linux 4.0 > +.\" a66734297f78707ce39d756b656bfae861d53f62 > +.\" 7911d3f7af14a614617e38245fedf98a724e46a9 > +the behavior has changed, so that 1 now means only allow access > +to processes with active perf events, with 2 indicating the old > +allow-anyone-access behavior. > .TP > .IR /sys/bus/event_source/devices/*/format/ " (since Linux 3.4)" > .\" commit 641cc938815dfd09f8fa1ec72deb814f0938ac33 > -- Michael Kerrisk Linux man-pages maintainer; http://www.kernel.org/doc/man-pages/ Linux/UNIX System Programming Training: http://man7.org/training/ -- To unsubscribe from this list: send the line "unsubscribe linux-man" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html