• Frederic Weisbecker's avatar
    nohz: Restore NMI safe local irq work for local nohz kick · 40bea039
    Frederic Weisbecker authored
    The local nohz kick is currently used by perf which needs it to be
    NMI-safe. Recent commit though (7d1311b9)
    changed its implementation to fire the local kick using the remote kick
    API. It was convenient to make the code more generic but the remote kick
    isn't NMI-safe.
    
    As a result:
    
    	WARNING: CPU: 3 PID: 18062 at kernel/irq_work.c:72 irq_work_queue_on+0x11e/0x140()
    	CPU: 3 PID: 18062 Comm: trinity-subchil Not tainted 3.16.0+ #34
    	0000000000000009 00000000903774d1 ffff880244e06c00 ffffffff9a7f1e37
    	0000000000000000 ffff880244e06c38 ffffffff9a0791dd ffff880244fce180
    	0000000000000003 ffff880244e06d58 ffff880244e06ef8 0000000000000000
    	Call Trace:
    	<NMI>  [<ffffffff9a7f1e37>] dump_stack+0x4e/0x7a
    	[<ffffffff9a0791dd>] warn_slowpath_common+0x7d/0xa0
    	[<ffffffff9a07930a>] warn_slowpath_null+0x1a/0x20
    	[<ffffffff9a17ca1e>] irq_work_queue_on+0x11e/0x140
    	[<ffffffff9a10a2c7>] tick_nohz_full_kick_cpu+0x57/0x90
    	[<ffffffff9a186cd5>] __perf_event_overflow+0x275/0x350
    	[<ffffffff9a184f80>] ? perf_event_task_disable+0xa0/0xa0
    	[<ffffffff9a01a4cf>] ? x86_perf_event_set_period+0xbf/0x150
    	[<ffffffff9a187934>] perf_event_overflow+0x14/0x20
    	[<ffffffff9a020386>] intel_pmu_handle_irq+0x206/0x410
    	[<ffffffff9a0b54d3>] ? arch_vtime_task_switch+0x63/0x130
    	[<ffffffff9a01937b>] perf_event_nmi_handler+0x2b/0x50
    	[<ffffffff9a007b72>] nmi_handle+0xd2/0x390
    	[<ffffffff9a007aa5>] ? nmi_handle+0x5/0x390
    	[<ffffffff9a0d131b>] ? lock_release+0xab/0x330
    	[<ffffffff9a008062>] default_do_nmi+0x72/0x1c0
    	[<ffffffff9a0c925f>] ? cpuacct_account_field+0xcf/0x200
    	[<ffffffff9a008268>] do_nmi+0xb8/0x100
    
    Lets fix this by restoring the use of local irq work for the nohz local
    kick.
    Reported-by: default avatarCatalin Iacob <iacobcatalin@gmail.com>
    Reported-and-tested-by: default avatarDave Jones <davej@redhat.com>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Signed-off-by: default avatarFrederic Weisbecker <fweisbec@gmail.com>
    40bea039
tick-sched.c 29.9 KB