Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1347733

[PATCH 3.10 01/80] tracepoints: Do not trace when cpu is offline

From Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Newsgroups linux.kernel
Subject [PATCH 3.10 01/80] tracepoints: Do not trace when cpu is offline
Date 2016-03-02 03:40 +0100
Message-ID <r84RK-1dc-67@gated-at.bofh.it> (permalink)
References <r82dd-7Iy-17@gated-at.bofh.it>
Organization linux.* mail to news gateway

Show all headers | View raw


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

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

From: Steven Rostedt (Red Hat) <rostedt@goodmis.org>

commit f37755490fe9bf76f6ba1d8c6591745d3574a6a6 upstream.

The tracepoint infrastructure uses RCU sched protection to enable and
disable tracepoints safely. There are some instances where tracepoints are
used in infrastructure code (like kfree()) that get called after a CPU is
going offline, and perhaps when it is coming back online but hasn't been
registered yet.

This can probuce the following warning:

 [ INFO: suspicious RCU usage. ]
 4.4.0-00006-g0fe53e8-dirty #34 Tainted: G S
 -------------------------------
 include/trace/events/kmem.h:141 suspicious rcu_dereference_check() usage!

 other info that might help us debug this:

 RCU used illegally from offline CPU!  rcu_scheduler_active = 1, debug_locks = 1
 no locks held by swapper/8/0.

 stack backtrace:
  CPU: 8 PID: 0 Comm: swapper/8 Tainted: G S              4.4.0-00006-g0fe53e8-dirty #34
  Call Trace:
  [c0000005b76c78d0] [c0000000008b9540] .dump_stack+0x98/0xd4 (unreliable)
  [c0000005b76c7950] [c00000000010c898] .lockdep_rcu_suspicious+0x108/0x170
  [c0000005b76c79e0] [c00000000029adc0] .kfree+0x390/0x440
  [c0000005b76c7a80] [c000000000055f74] .destroy_context+0x44/0x100
  [c0000005b76c7b00] [c0000000000934a0] .__mmdrop+0x60/0x150
  [c0000005b76c7b90] [c0000000000e3ff0] .idle_task_exit+0x130/0x140
  [c0000005b76c7c20] [c000000000075804] .pseries_mach_cpu_die+0x64/0x310
  [c0000005b76c7cd0] [c000000000043e7c] .cpu_die+0x3c/0x60
  [c0000005b76c7d40] [c0000000000188d8] .arch_cpu_idle_dead+0x28/0x40
  [c0000005b76c7db0] [c000000000101e6c] .cpu_startup_entry+0x50c/0x560
  [c0000005b76c7ed0] [c000000000043bd8] .start_secondary+0x328/0x360
  [c0000005b76c7f90] [c000000000008a6c] start_secondary_prolog+0x10/0x14

This warning is not a false positive either. RCU is not protecting code that
is being executed while the CPU is offline.

Instead of playing "whack-a-mole(TM)" and adding conditional statements to
the tracepoints we find that are used in this instance, simply add a
cpu_online() test to the tracepoint code where the tracepoint will be
ignored if the CPU is offline.

Use of raw_smp_processor_id() is fine, as there should never be a case where
the tracepoint code goes from running on a CPU that is online and suddenly
gets migrated to a CPU that is offline.

Link: http://lkml.kernel.org/r/1455387773-4245-1-git-send-email-kda@linux-powerpc.org

Reported-by: Denis Kirjanov <kda@linux-powerpc.org>
Fixes: 97e1c18e8d17b ("tracing: Kernel Tracepoints")
Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 include/linux/tracepoint.h |    6 ++++++
 1 file changed, 6 insertions(+)

--- a/include/linux/tracepoint.h
+++ b/include/linux/tracepoint.h
@@ -14,8 +14,11 @@
  * See the file COPYING for more details.
  */
 
+#include <linux/smp.h>
 #include <linux/errno.h>
 #include <linux/types.h>
+#include <linux/percpu.h>
+#include <linux/cpumask.h>
 #include <linux/rcupdate.h>
 #include <linux/static_key.h>
 
@@ -126,6 +129,9 @@ static inline void tracepoint_synchroniz
 		void *it_func;						\
 		void *__data;						\
 									\
+		if (!cpu_online(raw_smp_processor_id()))		\
+			return;						\
+									\
 		if (!(cond))						\
 			return;						\
 		prercu;							\

Back to linux.kernel | Previous | NextPrevious in thread | Next in thread | Find similar | Unroll thread


Thread

[PATCH 3.10 00/80] 3.10.99-stable review Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2016-03-02 03:40 +0100
  [PATCH 3.10 08/80] dm thin metadata: fix bug when taking a metadata snapshot Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2016-03-02 03:40 +0100
  [PATCH 3.10 02/80] drm/ast: Initialized data needed to map fbdev memory Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2016-03-02 03:40 +0100
  [PATCH 3.10 23/80] dts: vt8500: Add SDHC node to DTS file for WM8650 Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2016-03-02 03:40 +0100
  [PATCH 3.10 07/80] efi: Disable interrupts around EFI calls, not in the epilog/prolog calls Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2016-03-02 03:40 +0100
  [PATCH 3.10 31/80] mac: validate mac_partition is within sector Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2016-03-02 03:40 +0100
  [PATCH 3.10 14/80] proc: Fix ptrace-based permission checks for accessing task maps Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2016-03-02 03:40 +0100
  [PATCH 3.10 29/80] megaraid_sas : SMAP restriction--do not access user memory from IOCTL code Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2016-03-02 03:40 +0100
  [PATCH 3.10 32/80] ARC: dw2 unwind: Remove falllback linear search thru FDE entries Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2016-03-02 03:40 +0100
  [PATCH 3.10 11/80] USB: cp210x: add IDs for GE B650V3 and B850V3 boards Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2016-03-02 03:40 +0100
  [PATCH 3.10 41/80] dm btree: fix bufio buffer leaks in dm_btree_del() error path Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2016-03-02 03:40 +0100
  [PATCH 3.10 27/80] wm831x_power: Use IRQF_ONESHOT to request threaded IRQs Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2016-03-02 03:40 +0100
  [PATCH 3.10 10/80] can: ems_usb: Fix possible tx overflow Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2016-03-02 03:40 +0100
  [PATCH 3.10 01/80] tracepoints: Do not trace when cpu is offline Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2016-03-02 03:40 +0100
  [PATCH 3.10 06/80] drm/radeon: fix hotplug race at startup Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2016-03-02 03:40 +0100
  [PATCH 3.10 26/80] devres: fix a for loop bounds check Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2016-03-02 03:40 +0100
  [PATCH 3.10 30/80] mmc: remove bondage between REQ_META and reliable write Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2016-03-02 03:40 +0100
  [PATCH 3.10 15/80] iw_cxgb3: Fix incorrectly returning error on success Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2016-03-02 03:40 +0100
  [PATCH 3.10 35/80] virtio: fix memory leak of virtio ida cache layers Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2016-03-02 03:40 +0100
  [PATCH 3.10 04/80] bcache: unregister reboot notifier if bcache fails to unregister device Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2016-03-02 03:50 +0100
  Re: [PATCH 3.10 00/80] 3.10.99-stable review Guenter Roeck <linux@roeck-us.net> - 2016-03-02 15:40 +0100
    Re: [PATCH 3.10 00/80] 3.10.99-stable review Willy Tarreau <w@1wt.eu> - 2016-03-02 16:50 +0100
      Re: [PATCH 3.10 00/80] 3.10.99-stable review Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2016-03-02 18:30 +0100

csiph-web