On Sat, Aug 02, 2014 at 07:58:25PM +0200, Yann Droneaud wrote: > Hi Jiri,
SNIP > > err = errno; > > > > - if (WARN_ONCE(fd < 0, > > + if (WARN_ONCE(fd < 0 && err != EBUSY, > > "perf_event_open(..., 0) failed unexpectedly with error > > %d (%s)\n", > > err, strerror(err))) > > return -1; > > It's definitely possible to shortcut the function if EBUSY is returned > by first call to perf_event_open(). > > diff --git a/tools/perf/util/cloexec.c b/tools/perf/util/cloexec.c > index dc360ebde745..d5c626d5432a 100644 > --- a/tools/perf/util/cloexec.c > +++ b/tools/perf/util/cloexec.c > @@ -25,6 +25,9 @@ static int perf_flag_probe(void) > return 1; > } > > + if (err == EBUSY) > + return -1; > + > WARN_ONCE(err != EINVAL, > "perf_event_open(..., PERF_FLAG_FD_CLOEXEC) failed with > unexpected error %d (%s)\n", > err, strerror(err)); heh, I haven't realized that your probing event was PERF_COUNT_SW_CPU_CLOCK, which could never be busy and found following bug ;-) jirka --- We were using PERF_COUNT_SW_CPU_CLOCK as an probing event type. Using expected PERF_TYPE_SOFTWARE type instead. Cc: Adrian Hunter <adrian.hun...@intel.com> Cc: Arnaldo Carvalho de Melo <a...@kernel.org> Cc: David Ahern <dsah...@gmail.com> Cc: Frederic Weisbecker <fweis...@gmail.com> Cc: Namhyung Kim <namhy...@gmail.com> Cc: Paul Mackerras <pau...@samba.org> Cc: Peter Zijlstra <pet...@infradead.org> Cc: Stephane Eranian <eran...@google.com> Cc: William Cohen <wco...@redhat.com> Cc: Yann Droneaud <ydrone...@opteya.com> Signed-off-by: Jiri Olsa <jo...@kernel.org> --- tools/perf/util/cloexec.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/perf/util/cloexec.c b/tools/perf/util/cloexec.c index dc360ebde745..0f7eb0a53d4b 100644 --- a/tools/perf/util/cloexec.c +++ b/tools/perf/util/cloexec.c @@ -9,7 +9,7 @@ static int perf_flag_probe(void) { /* use 'safest' configuration as used in perf_evsel__fallback() */ struct perf_event_attr attr = { - .type = PERF_COUNT_SW_CPU_CLOCK, + .type = PERF_TYPE_SOFTWARE, .config = PERF_COUNT_SW_CPU_CLOCK, }; int fd; -- 1.8.3.1 -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/