From: Jiri Olsa <jolsa@redhat.com>
To: Vegard Nossum <vegard.nossum@gmail.com>,
Peter Zijlstra <peterz@infradead.org>
Cc: Thomas Gleixner <tglx@linutronix.de>,
Stephane Eranian <eranian@google.com>,
Vince Weaver <vincent.weaver@maine.edu>,
Ingo Molnar <mingo@kernel.org>,
David Carrillo-Cisneros <davidcc@google.com>,
"H. Peter Anvin" <hpa@zytor.com>, Kan Liang <kan.liang@intel.com>,
Arnaldo Carvalho de Melo <acme@redhat.com>,
Paul Turner <pjt@google.com>,
Linus Torvalds <torvalds@linux-foundation.org>,
LKML <linux-kernel@vger.kernel.org>,
Alexander Shishkin <alexander.shishkin@linux.intel.com>,
linux-tip-commits@vger.kernel.org
Subject: Re: [tip:perf/core] perf/core: Check return value of the perf_event_read() IPI
Date: Mon, 22 Aug 2016 12:38:23 +0200 [thread overview]
Message-ID: <20160822103823.GA2271@krava> (raw)
In-Reply-To: <20160822082932.GA13171@krava>
On Mon, Aug 22, 2016 at 10:29:32AM +0200, Jiri Olsa wrote:
> On Mon, Aug 22, 2016 at 09:17:37AM +0200, Jiri Olsa wrote:
> > On Sun, Aug 21, 2016 at 02:10:07PM +0200, Vegard Nossum wrote:
> >
> > SNIP
> >
> > > [<ffffffff816d1577>] ? __fget+0x47/0x270
> > > [<ffffffff81676d5b>] vfs_readv+0x8b/0xc0
> > > [<ffffffff81676e6e>] do_readv+0xde/0x230
> > > [<ffffffff81676d90>] ? vfs_readv+0xc0/0xc0
> > > [<ffffffff81002b60>] ? exit_to_usermode_loop+0x190/0x190
> > > [<ffffffff82001b07>] ? check_preemption_disabled+0x37/0x1e0
> > > [<ffffffff81677617>] SyS_readv+0x27/0x30
> > > [<ffffffff816775f0>] ? do_pwritev+0x1a0/0x1a0
> > > [<ffffffff81005524>] do_syscall_64+0x1c4/0x4e0
> > > [<ffffffff83c3286a>] entry_SYSCALL64_slow_path+0x25/0x25
> > >
> > > I don't think WARN() is the right interface for signalling errors to
> > > userspace programs?
> >
> > any special way to trigger that?
>
> nope ;-)
>
> perf stat -a -I 10
reading the event could race with event schedule out
leaving us with active state and oncpu == -1
attached patch fixes the warn for me, but I might
be missing some other cases
jirka
---
diff --git a/kernel/events/core.c b/kernel/events/core.c
index 3f07e6cfc1b6..375274b6f3b4 100644
--- a/kernel/events/core.c
+++ b/kernel/events/core.c
@@ -1802,8 +1802,9 @@ event_sched_out(struct perf_event *event,
event->tstamp_stopped = tstamp;
event->pmu->del(event, 0);
- event->oncpu = -1;
- event->state = PERF_EVENT_STATE_INACTIVE;
+ WRITE_ONCE(event->state, PERF_EVENT_STATE_INACTIVE);
+ smp_wmb();
+ WRITE_ONCE(event->oncpu, -1);
if (event->pending_disable) {
event->pending_disable = 0;
event->state = PERF_EVENT_STATE_OFF;
@@ -3424,9 +3425,8 @@ struct perf_read_data {
int ret;
};
-static int find_cpu_to_read(struct perf_event *event, int local_cpu)
+static int find_cpu_to_read(struct perf_event *event, int event_cpu, int local_cpu)
{
- int event_cpu = event->oncpu;
u16 local_pkg, event_pkg;
if (event->group_caps & PERF_EV_CAP_READ_ACTIVE_PKG) {
@@ -3561,13 +3561,17 @@ u64 perf_event_read_local(struct perf_event *event)
static int perf_event_read(struct perf_event *event, bool group)
{
- int ret = 0, cpu_to_read, local_cpu;
+ int ret = 0, cpu_to_read, local_cpu, state;
+
+ state = READ_ONCE(event->state);
+ smp_rmb();
+ cpu_to_read = event->oncpu;
/*
* If event is enabled and currently active on a CPU, update the
* value in the event structure:
*/
- if (event->state == PERF_EVENT_STATE_ACTIVE) {
+ if (state == PERF_EVENT_STATE_ACTIVE && cpu_to_read != -1) {
struct perf_read_data data = {
.event = event,
.group = group,
@@ -3575,7 +3579,7 @@ static int perf_event_read(struct perf_event *event, bool group)
};
local_cpu = get_cpu();
- cpu_to_read = find_cpu_to_read(event, local_cpu);
+ cpu_to_read = find_cpu_to_read(event, cpu_to_read, local_cpu);
put_cpu();
ret = smp_call_function_single(cpu_to_read, __perf_event_read, &data, 1);
next prev parent reply other threads:[~2016-08-22 10:38 UTC|newest]
Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-08-17 20:55 [PATCH v3 0/4] remove unnecessary IPI reading uncore events David Carrillo-Cisneros
2016-08-17 20:55 ` [PATCH v3 1/4] perf/core: check return value of perf_event_read IPI David Carrillo-Cisneros
2016-08-18 10:52 ` [tip:perf/core] perf/core: Check return value of the perf_event_read() IPI tip-bot for David Carrillo-Cisneros
2016-08-21 12:10 ` Vegard Nossum
2016-08-22 7:17 ` Jiri Olsa
2016-08-22 8:29 ` Jiri Olsa
2016-08-22 10:38 ` Jiri Olsa [this message]
2016-08-28 18:09 ` Jiri Olsa
2016-08-29 10:03 ` Peter Zijlstra
2016-08-29 13:02 ` Peter Zijlstra
2016-08-29 13:14 ` Vince Weaver
2016-08-29 18:58 ` Jiri Olsa
2016-08-30 6:47 ` Peter Zijlstra
2016-08-30 7:26 ` Peter Zijlstra
2016-08-30 9:47 ` Jiri Olsa
2016-08-30 16:26 ` Stephane Eranian
2016-09-02 8:33 ` Peter Zijlstra
2016-10-09 7:09 ` [perf/core] 412929295f: WARNING: CPU: 2 PID: 600 at kernel/events/core.c:3530 perf_event_read+0x17d/0x190 kernel test robot
2016-10-09 7:09 ` [lkp] " kernel test robot
2016-10-09 7:58 ` David Carrillo-Cisneros
2016-08-17 20:55 ` [PATCH v3 2/4] perf/core: generalize event->group_flags David Carrillo-Cisneros
2016-08-18 10:53 ` [tip:perf/core] perf/core: Generalize event->group_flags tip-bot for David Carrillo-Cisneros
2016-08-17 20:55 ` [PATCH v3 3/4] perf/core: introduce PMU_EV_CAP_READ_ACTIVE_PKG David Carrillo-Cisneros
2016-08-18 10:54 ` [tip:perf/core] perf/core: Introduce PMU_EV_CAP_READ_ACTIVE_PKG tip-bot for David Carrillo-Cisneros
2016-08-17 20:55 ` [PATCH v3 4/4] perf/x86: use PMUEF_READ_CPU_PKG in uncore events David Carrillo-Cisneros
2016-08-18 10:54 ` [tip:perf/core] perf/x86: Use " tip-bot for David Carrillo-Cisneros
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=20160822103823.GA2271@krava \
--to=jolsa@redhat.com \
--cc=acme@redhat.com \
--cc=alexander.shishkin@linux.intel.com \
--cc=davidcc@google.com \
--cc=eranian@google.com \
--cc=hpa@zytor.com \
--cc=kan.liang@intel.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-tip-commits@vger.kernel.org \
--cc=mingo@kernel.org \
--cc=peterz@infradead.org \
--cc=pjt@google.com \
--cc=tglx@linutronix.de \
--cc=torvalds@linux-foundation.org \
--cc=vegard.nossum@gmail.com \
--cc=vincent.weaver@maine.edu \
/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.