From: Adrian Hunter <adrian.hunter@intel.com>
To: David Ahern <david.ahern@oracle.com>,
acme@kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH] perf: Fix probing for PERF_FLAG_FD_CLOEXEC flag
Date: Thu, 19 Feb 2015 09:06:12 +0200 [thread overview]
Message-ID: <54E58B64.9010902@intel.com> (raw)
In-Reply-To: <1424304072-91955-1-git-send-email-david.ahern@oracle.com>
On 19/02/15 02:01, David Ahern wrote:
> Commit f6edb53c4993ffe92ce521fb449d1c146cea6ec2 converted the probe to
> a CPU wide event first (pid == -1). For kernels that do not support
> the PERF_FLAG_FD_CLOEXEC flag the probe fails with EINVAL. Since this
> errno is not handled pid is not reset to 0 and the subsequent use of
> pid = -1 as an argument brings in an additional failure path if
> perf_event_paranoid > 0:
>
> $ perf record -- sleep 1
> perf_event_open(..., 0) failed unexpectedly with error 13 (Permission denied)
> [ perf record: Woken up 1 times to write data ]
> [ perf record: Captured and wrote 0.007 MB /tmp/perf.data (11 samples) ]
>
> Since this function only needs to get past this check in kernel/events/core.c:
>
> /* for future expandability... */
> if (flags & ~PERF_FLAG_ALL)
> return -EINVAL;
>
> pid = 0 is sufficient to confirm if the flag is supported or not.
>
> Also, ensure the fd of the confirmation check is closed.
>
> Needs to go to 3.18 stable tree as well.
>
> Signed-off-by: David Ahern <david.ahern@oracle.com>
> Cc: Adrian Hunter <adrian.hunter@intel.com>
> ---
> tools/perf/util/cloexec.c | 7 ++++---
> 1 file changed, 4 insertions(+), 3 deletions(-)
>
> diff --git a/tools/perf/util/cloexec.c b/tools/perf/util/cloexec.c
> index 47b78b3f0325..3cc34edf2403 100644
> --- a/tools/perf/util/cloexec.c
> +++ b/tools/perf/util/cloexec.c
> @@ -47,16 +47,17 @@ static int perf_flag_probe(void)
> err, strerror_r(err, sbuf, sizeof(sbuf)));
>
> /* not supported, confirm error related to PERF_FLAG_FD_CLOEXEC */
> - fd = sys_perf_event_open(&attr, pid, cpu, -1, 0);
> + fd = sys_perf_event_open(&attr, 0, cpu, -1, 0);
I would prefer to avoid pid = 0 unless necessary and so just do the same
thing again i.e.
while (1) {
fd = sys_perf_event_open(&attr, pid, cpu, -1, 0);
if (fd < 0 && pid == -1 && errno == EACCES) {
pid = 0;
continue;
}
break;
}
> err = errno;
>
> + if (fd >= 0)
> + close(fd);
> +
> if (WARN_ONCE(fd < 0 && err != EBUSY,
> "perf_event_open(..., 0) failed unexpectedly with error %d (%s)\n",
> err, strerror_r(err, sbuf, sizeof(sbuf))))
> return -1;
>
> - close(fd);
> -
> return 0;
> }
>
>
next prev parent reply other threads:[~2015-02-19 7:08 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-02-19 0:01 [PATCH] perf: Fix probing for PERF_FLAG_FD_CLOEXEC flag David Ahern
2015-02-19 7:06 ` Adrian Hunter [this message]
2015-02-19 14:55 ` David Ahern
2015-02-19 16:17 ` Adrian Hunter
2015-02-19 16:22 ` David Ahern
2015-02-19 17:28 ` Adrian Hunter
2015-02-24 11:31 ` Adrian Hunter
2015-02-24 16:31 ` David Ahern
2015-03-01 16:50 ` [tip:perf/urgent] perf tools: " tip-bot for Adrian Hunter
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=54E58B64.9010902@intel.com \
--to=adrian.hunter@intel.com \
--cc=acme@kernel.org \
--cc=david.ahern@oracle.com \
--cc=linux-kernel@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.