Ensure the hardirq state is consistent before using locks. Use the rare
trace_hardirqs_fixup() because the trap can happen in any context.
resolves this rare lockdep warning:
WARNING: at kernel/lockdep.c:2658 check_flags()
[<
c013571e>] check_flags+0x90/0x140
[<
c0138a69>] lock_release+0x4b/0x1d0
[<
c0507fea>] notifier_call_chain+0x2a/0x47
[<
c050806b>] __atomic_notifier_call_chain+0x64/0x6d
[<
c0508007>] __atomic_notifier_call_chain+0x0/0x6d
[<
c050808b>] atomic_notifier_call_chain+0x17/0x1a
[<
c0131802>] notify_die+0x30/0x34
[<
c0506b09>] do_debug+0x3e/0xd4
[<
c050658f>] debug_stack_correct+0x27/0x2c
[<
c04be389>] tcp_rcv_established+0x1/0x620
[<
c04c38c2>] tcp_v4_do_rcv+0x2b/0x313
[<
c04c56b6>] tcp_v4_rcv+0x467/0x85d
[<
c0505ff2>] _spin_lock_nested+0x27/0x32
[<
c04c5a4d>] tcp_v4_rcv+0x7fe/0x85d
[<
c04c560e>] tcp_v4_rcv+0x3bf/0x85d
[<
c04adbb5>] ip_local_deliver_finish+0x11b/0x1b0
[<
c04adac8>] ip_local_deliver_finish+0x2e/0x1b0
[<
c04ada7b>] ip_rcv_finish+0x27b/0x29a
[<
c04961e5>] netif_receive_skb+0xfb/0x2a6
[<
c04add0f>] ip_rcv+0x0/0x1fb
[<
c0496354>] netif_receive_skb+0x26a/0x2a6
[<
c04961e5>] netif_receive_skb+0xfb/0x2a6
[<
c049872e>] process_backlog+0x7f/0xc6
[<
c04983ba>] net_rx_action+0xb9/0x1ac
[<
c0498348>] net_rx_action+0x47/0x1ac
[<
c01376cb>] trace_hardirqs_on+0x118/0x16b
[<
c01225e2>] __do_softirq+0x49/0xa2
[<
c010595f>] do_softirq+0x60/0xdd
[<
c0506300>] _spin_unlock_irq+0x20/0x2c
[<
c0103e4f>] restore_nocheck+0x12/0x15
[<
c01440e1>] handle_fasteoi_irq+0x0/0x9b
[<
c0105a70>] do_IRQ+0x94/0xaa
[<
c0506300>] _spin_unlock_irq+0x20/0x2c
[<
c0104832>] common_interrupt+0x2e/0x34
[<
c0114703>] native_safe_halt+0x2/0x3
[<
c0102c01>] default_idle+0x44/0x65
[<
c010257f>] cpu_idle+0x42/0x50
[<
c076ea09>] start_kernel+0x26b/0x270
[<
c076e317>] unknown_bootoption+0x0/0x196
=======================
irq event stamp: 559190
hardirqs last enabled at (559190): [<
c0507316>] kprobe_exceptions_notify+0x299/0x305
hardirqs last disabled at (559189): [<
c05067bf>] do_int3+0x1d/0x95
softirqs last enabled at (559172): [<
c010595f>] do_softirq+0x60/0xdd
softirqs last disabled at (559181): [<
c010595f>] do_softirq+0x60/0xdd
Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>