All of lore.kernel.org
 help / color / mirror / Atom feed
From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
To: linux-kernel@vger.kernel.org
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	stable@vger.kernel.org,
	Alexander Shishkin <alexander.shishkin@linux.intel.com>,
	"Peter Zijlstra (Intel)" <peterz@infradead.org>,
	Arnaldo Carvalho de Melo <acme@redhat.com>,
	Jiri Olsa <jolsa@redhat.com>,
	Linus Torvalds <torvalds@linux-foundation.org>,
	Thomas Gleixner <tglx@linutronix.de>,
	dvyukov@google.com, eranian@google.com, oleg@redhat.com,
	panand@redhat.com, sasha.levin@oracle.com, vince@deater.net,
	Ingo Molnar <mingo@kernel.org>
Subject: [PATCH 3.14 30/37] perf: Cure event->pending_disable race
Date: Mon, 18 Apr 2016 11:26:02 +0900	[thread overview]
Message-ID: <20160418022402.341031330@linuxfoundation.org> (raw)
In-Reply-To: <20160418022400.661946311@linuxfoundation.org>

3.14-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Peter Zijlstra <peterz@infradead.org>

commit 28a967c3a2f99fa3b5f762f25cb2a319d933571b upstream.

Because event_sched_out() checks event->pending_disable _before_
actually disabling the event, it can happen that the event fires after
it checks but before it gets disabled.

This would leave event->pending_disable set and the queued irq_work
will try and process it.

However, if the event trigger was during schedule(), the event might
have been de-scheduled by the time the irq_work runs, and
perf_event_disable_local() will fail.

Fix this by checking event->pending_disable _after_ we call
event->pmu->del(). This depends on the latter being a compiler
barrier, such that the compiler does not lift the load and re-creates
the problem.

Tested-by: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Reviewed-by: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Cc: Arnaldo Carvalho de Melo <acme@redhat.com>
Cc: Jiri Olsa <jolsa@redhat.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: dvyukov@google.com
Cc: eranian@google.com
Cc: oleg@redhat.com
Cc: panand@redhat.com
Cc: sasha.levin@oracle.com
Cc: vince@deater.net
Link: http://lkml.kernel.org/r/20160224174948.040469884@infradead.org
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 kernel/events/core.c |    6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

--- a/kernel/events/core.c
+++ b/kernel/events/core.c
@@ -1400,14 +1400,14 @@ event_sched_out(struct perf_event *event
 
 	perf_pmu_disable(event->pmu);
 
+	event->tstamp_stopped = tstamp;
+	event->pmu->del(event, 0);
+	event->oncpu = -1;
 	event->state = PERF_EVENT_STATE_INACTIVE;
 	if (event->pending_disable) {
 		event->pending_disable = 0;
 		event->state = PERF_EVENT_STATE_OFF;
 	}
-	event->tstamp_stopped = tstamp;
-	event->pmu->del(event, 0);
-	event->oncpu = -1;
 
 	if (!is_software_event(event))
 		cpuctx->active_oncpu--;

  parent reply	other threads:[~2016-04-18  3:46 UTC|newest]

Thread overview: 36+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-04-18  2:25 [PATCH 3.14 00/37] 3.14.67-stable review Greg Kroah-Hartman
2016-04-18  2:25 ` [PATCH 3.14 01/37] hwmon: (max1111) Return -ENODEV from max1111_read_channel if not instantiated Greg Kroah-Hartman
2016-04-18  2:25 ` [PATCH 3.14 02/37] parisc: Avoid function pointers for kernel exception routines Greg Kroah-Hartman
2016-04-18  2:25 ` [PATCH 3.14 03/37] parisc: Fix kernel crash with reversed copy_from_user() Greg Kroah-Hartman
2016-04-18  2:25 ` [PATCH 3.14 04/37] ALSA: timer: Use mod_timer() for rearming the system timer Greg Kroah-Hartman
2016-04-18  2:25 ` [PATCH 3.14 05/37] mm: fix invalid node in alloc_migrate_target() Greg Kroah-Hartman
2016-04-18  2:25 ` [PATCH 3.14 06/37] drm/radeon: add a dpm quirk for sapphire Dual-X R7 370 2G D5 Greg Kroah-Hartman
2016-04-18  2:25 ` [PATCH 3.14 07/37] drm/radeon: add a dpm quirk for all R7 370 parts Greg Kroah-Hartman
2016-04-18  2:25 ` [PATCH 3.14 08/37] xen/events: Mask a moving irq Greg Kroah-Hartman
2016-04-18  2:25 ` [PATCH 3.14 09/37] net: jme: fix suspend/resume on JMC260 Greg Kroah-Hartman
2016-04-18  2:25 ` [PATCH 3.14 10/37] sctp: lack the check for ports in sctp_v6_cmp_addr Greg Kroah-Hartman
2016-04-18  2:25 ` [PATCH 3.14 11/37] ipv6: re-enable fragment header matching in ipv6_find_hdr Greg Kroah-Hartman
2016-04-18  2:25 ` [PATCH 3.14 13/37] usbnet: cleanup after bind() in probe() Greg Kroah-Hartman
2016-04-18  2:25 ` [PATCH 3.14 14/37] udp6: fix UDP/IPv6 encap resubmit path Greg Kroah-Hartman
2016-04-18  2:25 ` [PATCH 3.14 15/37] sh_eth: fix NULL pointer dereference in sh_eth_ring_format() Greg Kroah-Hartman
2016-04-18  2:25 ` [PATCH 3.14 16/37] net: Fix use after free in the recvmmsg exit path Greg Kroah-Hartman
2016-04-18  2:25 ` [PATCH 3.14 17/37] farsync: fix off-by-one bug in fst_add_one Greg Kroah-Hartman
2016-04-18  2:25 ` [PATCH 3.14 18/37] ath9k: fix buffer overrun for ar9287 Greg Kroah-Hartman
2016-04-18  2:25 ` [PATCH 3.14 19/37] qlge: Fix receive packets drop Greg Kroah-Hartman
2016-04-18  2:25 ` [PATCH 3.14 20/37] ipv4: fix broadcast packets reception Greg Kroah-Hartman
2016-04-18  2:25 ` [PATCH 3.14 21/37] ppp: take reference on channels netns Greg Kroah-Hartman
2016-04-18  2:25 ` [PATCH 3.14 23/37] ipv4: l2tp: fix a potential issue in l2tp_ip_recv Greg Kroah-Hartman
2016-04-18  2:25 ` [PATCH 3.14 24/37] ipv6: l2tp: fix a potential issue in l2tp_ip6_recv Greg Kroah-Hartman
2016-04-18  2:25 ` [PATCH 3.14 25/37] ip6_tunnel: set rtnl_link_ops before calling register_netdevice Greg Kroah-Hartman
2016-04-18  2:25 ` [PATCH 3.14 26/37] mac80211: fix unnecessary frame drops in mesh fwding Greg Kroah-Hartman
2016-04-18  2:25 ` [PATCH 3.14 27/37] usb: renesas_usbhs: avoid NULL pointer derefernce in usbhsf_pkt_handler() Greg Kroah-Hartman
2016-04-18  2:26 ` [PATCH 3.14 28/37] usb: renesas_usbhs: disable TX IRQ before starting TX DMAC transfer Greg Kroah-Hartman
2016-04-18  2:26 ` [PATCH 3.14 29/37] ext4: add lockdep annotations for i_data_sem Greg Kroah-Hartman
2016-04-18  2:26 ` Greg Kroah-Hartman [this message]
2016-04-18  2:26 ` [PATCH 3.14 31/37] HID: usbhid: fix inconsistent reset/resume/reset-resume behavior Greg Kroah-Hartman
2016-04-18  2:26 ` [PATCH 3.14 34/37] [media] usbvision fix overflow of interfaces array Greg Kroah-Hartman
2016-04-18  2:26 ` [PATCH 3.14 35/37] [media] usbvision: fix leak of usb_dev on failure paths in usbvision_probe() Greg Kroah-Hartman
2016-04-18  2:26 ` [PATCH 3.14 36/37] [media] usbvision: fix crash on detecting device with invalid configuration Greg Kroah-Hartman
2016-04-18  2:26 ` [PATCH 3.14 37/37] Revert "usb: hub: do not clear BOS field during reset device" Greg Kroah-Hartman
2016-04-18 16:33 ` [PATCH 3.14 00/37] 3.14.67-stable review Guenter Roeck
2016-04-18 16:33 ` Shuah Khan

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=20160418022402.341031330@linuxfoundation.org \
    --to=gregkh@linuxfoundation.org \
    --cc=acme@redhat.com \
    --cc=alexander.shishkin@linux.intel.com \
    --cc=dvyukov@google.com \
    --cc=eranian@google.com \
    --cc=jolsa@redhat.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@kernel.org \
    --cc=oleg@redhat.com \
    --cc=panand@redhat.com \
    --cc=peterz@infradead.org \
    --cc=sasha.levin@oracle.com \
    --cc=stable@vger.kernel.org \
    --cc=tglx@linutronix.de \
    --cc=torvalds@linux-foundation.org \
    --cc=vince@deater.net \
    /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.