linux/include/trace/events
Steven Rostedt (Red Hat) 6c8465a82a x86/tlb/trace: Do not trace on CPU that is offline
When taking a CPU down for suspend and resume, a tracepoint may be called
when the CPU has been designated offline. As tracepoints require RCU for
protection, they must not be called if the current CPU is offline.

Unfortunately, trace_tlb_flush() is called in this scenario as was noted
by LOCKDEP:

...

 Disabling non-boot CPUs ...
 intel_pstate CPU 1 exiting

 ===============================
 smpboot: CPU 1 didn't die...
 [ INFO: suspicious RCU usage. ]
 3.19.0-rc7-next-20150204.1-iniza-small #1 Not tainted
 -------------------------------
 include/trace/events/tlb.h:35 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 = 0
 no locks held by swapper/1/0.

 stack backtrace:
 CPU: 1 PID: 0 Comm: swapper/1 Not tainted 3.19.0-rc7-next-20150204.1-iniza-small #1
 Hardware name: SAMSUNG ELECTRONICS CO., LTD. 530U3BI/530U4BI/530U4BH/530U3BI/530U4BI/530U4BH, BIOS 13XK 03/28/2013
  0000000000000001 ffff88011a44fe18 ffffffff817e370d 0000000000000011
  ffff88011a448290 ffff88011a44fe48 ffffffff810d6847 ffff8800c66b9600
  0000000000000001 ffff88011a44c000 ffffffff81cb3900 ffff88011a44fe78
 Call Trace:
  [<ffffffff817e370d>] dump_stack+0x4c/0x65
  [<ffffffff810d6847>] lockdep_rcu_suspicious+0xe7/0x120
  [<ffffffff810b71a5>] idle_task_exit+0x205/0x2c0
  [<ffffffff81054c4e>] play_dead_common+0xe/0x50
  [<ffffffff81054ca5>] native_play_dead+0x15/0x140
  [<ffffffff8102963f>] arch_cpu_idle_dead+0xf/0x20
  [<ffffffff810cd89e>] cpu_startup_entry+0x37e/0x580
  [<ffffffff81053e20>] start_secondary+0x140/0x150
 intel_pstate CPU 2 exiting

...

By converting the tlb_flush tracepoint to a TRACE_EVENT_CONDITION where the
condition is cpu_online(smp_processor_id()), we can avoid calling RCU protected
code when the CPU is offline.

Link: http://lkml.kernel.org/r/CA+icZUUGiGDoL5NU8RuxKzFjoLjEKRtUWx=JB8B9a0EQv-eGzQ@mail.gmail.com

Cc: stable@vger.kernel.org # 3.17+
Fixes: d17d8f9ded "x86/mm: Add tracepoints for TLB flushes"
Reported-by: Sedat Dilek <sedat.dilek@gmail.com>
Tested-by: Sedat Dilek <sedat.dilek@gmail.com>
Suggested-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
Acked-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
Acked-by: Dave Hansen <dave@sr71.net>
Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
2015-02-07 19:34:55 -05:00
..
9p.h
asoc.h ASoC: Remove snd_soc_cache_sync() implementation 2014-11-09 09:06:30 +00:00
bcache.h bcache: fix crash in bcache_btree_node_alloc_fail tracepoint 2014-08-04 15:23:03 -07:00
block.h blktrace: fix accounting of partially completed requests 2014-03-05 16:11:21 -07:00
btrfs.h Btrfs: fix wrong parse of extent map's tracepoint 2014-09-18 07:14:47 -07:00
compaction.h mm/compaction: do not count migratepages when unnecessary 2014-06-04 16:54:07 -07:00
context_tracking.h context_tracking: User/kernel broundary cross trace events 2013-08-14 17:14:48 +02:00
ext3.h
ext4.h ext4: change LRU to round-robin in extent status tree shrinker 2014-11-25 11:45:37 -05:00
f2fs.h f2fs: introduce FITRIM in f2fs_ioctl 2014-09-30 15:06:09 -07:00
fence.h fence: dma-buf cross-device synchronization (v18) 2014-07-08 12:18:56 -07:00
filelock.h locks: generic_delete_lease doesn't need a file_lock at all 2014-10-07 14:06:12 -04:00
filemap.h
gfpflags.h mm: get rid of __GFP_KMEMCG 2014-06-04 16:53:56 -07:00
gpio.h
host1x.h gpu: host1x: Use struct host1x_bo pointers in traces 2014-11-13 16:11:32 +01:00
hswadsp.h Merge remote-tracking branches 'asoc/topic/ml26124', 'asoc/topic/of', 'asoc/topic/omap', 'asoc/topic/pxa' and 'asoc/topic/rcar' into asoc-next 2014-03-12 23:04:35 +00:00
i2c.h i2c: Add message transfer tracepoints for SMBUS [ver #2] 2014-03-13 22:15:07 +01:00
intel-sst.h Merge remote-tracking branches 'asoc/topic/ml26124', 'asoc/topic/of', 'asoc/topic/omap', 'asoc/topic/pxa' and 'asoc/topic/rcar' into asoc-next 2014-03-12 23:04:35 +00:00
iommu.h iommu: Add iommu_error class event to iommu trace 2013-09-25 11:07:04 +02:00
ipi.h tracepoint: add generic tracepoint definitions for IPI tracing 2014-08-07 20:40:40 -04:00
irq.h net: treewide: Fix typo found in DocBook/networking.xml 2014-09-05 17:35:28 -07:00
jbd2.h
jbd.h
kmem.h mm: get rid of unnecessary overhead of trace_mm_page_alloc_extfrag() 2013-11-13 12:09:10 +09:00
kvm.h kvm/x86/mmu: Pass gfn and level to rmapp callback. 2014-09-24 14:07:57 +02:00
lock.h
mce.h
migrate.h mm tracing: tell mm_migrate_pages event about numa_misplaced 2014-08-06 18:01:18 -07:00
module.h module: Replace module_ref with atomic_t refcnt 2014-11-11 17:07:46 +10:30
napi.h
net.h net: Rename skb->rxhash to skb->hash 2014-03-26 15:58:20 -04:00
nmi.h x86: Add NMI duration tracepoints 2013-06-23 11:52:58 +02:00
oom.h
pagemap.h mm: pagemap: avoid unnecessary overhead when tracepoints are deactivated 2014-08-06 18:01:20 -07:00
power_cpu_migrate.h ARM: bL_switcher/trace: Add trace trigger for trace bootstrapping 2013-09-23 18:47:30 -04:00
power.h PM / sleep: trace events for device PM callbacks 2014-06-11 02:16:48 +02:00
printk.h
random.h random: convert DEBUG_ENT to tracepoints 2013-10-10 14:32:23 -04:00
rcu.h rcu: Remove redundant TREE_PREEMPT_RCU config option 2014-10-29 10:20:05 -07:00
regmap.h
regulator.h
rpm.h
sched.h sched: Fix the PREEMPT_ACTIVE check in __trace_sched_switch_state() 2014-10-28 10:47:53 +01:00
scsi.h scsi: rename SERVICE_ACTION_IN to SERVICE_ACTION_IN_16 2014-11-24 20:01:40 +01:00
signal.h
skb.h
sock.h
spi.h spi: Provide common spi_message processing loop 2013-10-11 20:09:50 +01:00
sunrpc.h sunrpc: add some tracepoints around enqueue and dequeue of svc_xprt 2014-12-09 11:29:14 -05:00
swiotlb.h tracing/events: Add bounce tracing to swiotbl 2013-10-02 12:53:26 -04:00
syscalls.h tracepoint: Fix sparse warnings in tracepoint.c 2014-04-09 10:12:11 -04:00
target.h Merge remote-tracking branch 'scsi-queue/drivers-for-3.19' into for-linus 2014-12-18 05:56:29 -08:00
task.h exec: kill bprm->tcomm[], simplify the "basename" logic 2014-04-07 16:36:05 -07:00
thermal.h thermal: trace: Trace when temperature is above a trip point 2014-07-29 09:28:43 -04:00
thp.h powerpc/thp: Add tracepoints to track hugepage invalidate 2014-08-13 18:20:42 +10:00
timer.h
tlb.h x86/tlb/trace: Do not trace on CPU that is offline 2015-02-07 19:34:55 -05:00
udp.h
v4l2.h [media] v4l: add stream format for SDR receiver 2014-03-05 14:15:12 -03:00
vmscan.h mm: shrinker: add nid to tracepoint output 2014-06-04 16:54:04 -07:00
workqueue.h
writeback.h Most of the changes were largely clean ups, and some documentation. 2014-04-03 10:26:31 -07:00
xen.h