You are on page 1of 58

Lockdep

Howtoreaditscrypticoutput

StevenRostedt srostedt@redhat.com rostedt@goodmis.org

WhatisLockdep?

WrittenbyIngoMolnarin2006 Lockcorrectnessvalidator Locksaretrackedviaclasses

Aclassoflockitthetypenottheinstance

Iflocksaretakeninawaythatcouldpossibly causeadeadlock,lockdepwilldetectit!

DetectingDeadlocks

Thelockclassisusedtotrackhowtheinstances havebeentaken Whenlocksaretakenatruntime,theclassis updated Statesareusedtotrackhowthelockisused

Describedlater

Typesofdeadlocks

Elementary

locktakentwice LockABLockBA interrupts Timers

Simple

Complex

Confusing

ElementaryDeadlock

Nonrecursivelocktakentwice

DEADLOCK

SimpleDeadlock

LockABLockBA
CPU 0 CPU 1 Lock B Lock A Lock B Lock A

DEADLOCK

SimpleDeadlock2

LockABLockBCLockCA Thisiscalledalockchain:ABC
CPU 0 CPU 1 Lock B CPU 2 Lock C

Lock A Lock B

Lock C Lock A

DEADLOCK

ComplexwithInterrupts

Lockdepmustalsobeawareofinterrupts Ifalockistakenininterruptcontextthenitmust haveinterruptsdisabledwhenthatlockisever taken

InterruptDeadlock

LockAtakenininterrupt
CPU 0 Lock A
Interrupt

Lock A

DEADLOCK

ComplexInterruptDeadlocks

Locksnottakeninaninterruptcanalsocause deadlockswithlockstakenininterrupts Anylocktakenwhenaninterruptlockisheld mustalsobeprotectedbydisablinginterrupts

Complexinterruptdeadlock
CPU 0 disable interrupts lock A lock B CPU 1 interrupts enabled lock B
Interrupt

Lock A

DEADLOCK

Canthisdeadlock?
Interrupt CPU 0 disable interrupts lock A unlock A lock A lock B unlock B unlock A Enable interrupts CPU 1 disable interrupts lock C lock B unlock B unlock C Enable interrupts CPU 2 interrupts enabled lock C unlock C

Nope

Canthisdeadlock?
Interrupt CPU 0 disable interrupts lock A unlock A lock A lock B unlock B unlock A Enable interrupts CPU 1 disable interrupts lock B lock C unlock C unlock B Enable interrupts CPU 2 interrupts enabled lock C unlock C

Yes!

Nodeadlock
Interrupt CPU 0 disable interrupts lock A unlock A lock A lock B unlock B unlock A Enable interrupts CPU 1 disable interrupts lock C lock B unlock B unlock C Enable interrupts CPU 2 interrupts enabled lock C unlock C

Callchain
lock A lock C lock B lock B

Deadlock
Interrupt CPU 0 disable interrupts lock A unlock A lock A lock B unlock B unlock A Enable interrupts CPU 1 disable interrupts lock B lock C unlock C unlock B Enable interrupts CPU 2 interrupts enabled lock C unlock C

Callchain

lock A

lock B

lock C

Callchain

lock A

lock B

lock C

lock C

lock A

!!!!!

CPU 0 disable interrupts lock A lock B

CPU 1 disable interrupts lock B lock C

CPU 2 interrupts enabled

lock C
Interrupt

Lock A

DEADLOCK

ConfusingDeadlocks

del_timer_synccanblockandcausedeadlocks withotherlocks del_timer_syncwillnotreturnuntilthespecified timerhasfinished

ConfusingDeadlocks
CPU 0 disable interrupts lock A del_timer_sync
timer handler

CPU 1

Lock A

DEADLOCK

ConfusingDeadlocks

del_timer_syncgetsevenmoreconfusing timersaresoftirqsandcanbepreemptedby interrupts Youcannotholdanylockthatisinthechainof aninterruptlock

ConfusingDeadlocks
CPU 0 disable interrupts lock A del_timer_sync
timer handler Interrupt

CPU 1

Lock A

DEADLOCK

ConfusingDeadlocks

Thisincludeschains
CPU 0 disable interrupts lock B del_timer_sync CPU 1 disable interrupts lock A lock B CPU 2

timer handler Interrupt

Lock A

DEADLOCK

ConfusingDeadlocks

Luckilyforus

Lockdepdetectsalloftheselocks!

Whenyouseealockdepsplatyoudonot understand

Donotthinkit'sabuginlockdep!

SimpleDeadlockExample
spin_lock(&lockA); spin_lock(&lockB); spin_unlock(&lockB); spin_unlock(&lockA); spin_lock(&lockC); spin_lock(&lockA); spin_unlock(&lockA); spin_unlock(&lockC); spin_lock(&lockB); spin_lock(&lockC); spin_unlock(&lockC); spin_unlock(&lockB);

LockdepSplat!
======================================================= [ INFO: possible circular locking dependency detected ] 3.1.0-rc4-test-00131-g9e79e3e #2 ------------------------------------------------------insmod/1357 is trying to acquire lock: (lockC){+.+...}, at: [<ffffffffa000d438>] pick_test+0x2a2/0x892 [lockdep_test] but task is already holding lock: (lockB){+.+...}, at: [<ffffffffa000d42c>] pick_test+0x296/0x892 [lockdep_test] which lock already depends on the new lock.

MorseCode?
(lockC){+.+...},

MorseCode?
(lockC){+.+...},
. just means it exist + happened with irqs enabled - happened with irqs disabled

MorseCode?
(lockC){+. +. ..},

MorseCode?
(lockC){+. +. ..},

Hardirqs

MorseCode?
(lockC){+. +. ..},

Hardirqs

Softirqs

MorseCode?
(lockC){+. +. ..},

Hardirqs

Softirqs

reclaim_fs?

which lock already depends on the new lock. the existing dependency chain (in reverse order) is: -> #2 (lockB){+.+...}: [<ffffffff81081ab8>] lock_acquire+0xe4/0x114 [<ffffffff8149591f>] _raw_spin_lock+0x31/0x40 [<ffffffffa000d3d8>] pick_test+0x242/0x892 [lockdep_test] [<ffffffff8100207f>] do_one_initcall+0x7f/0x13e [<ffffffff8108b9b5>] sys_init_module+0x83/0x1ce [<ffffffff8149cd02>] system_call_fastpath+0x16/0x1b -> #1 (lockA){+.+...}: [<ffffffff81081ab8>] lock_acquire+0xe4/0x114 [<ffffffff8149591f>] _raw_spin_lock+0x31/0x40 [<ffffffffa000d408>] pick_test+0x272/0x892 [lockdep_test] [<ffffffff8100207f>] do_one_initcall+0x7f/0x13e [<ffffffff8108b9b5>] sys_init_module+0x83/0x1ce [<ffffffff8149cd02>] system_call_fastpath+0x16/0x1b -> #0 (lockC){+.+...}: [<ffffffff8108109e>] __lock_acquire+0xae9/0xdd9 [<ffffffff81081ab8>] lock_acquire+0xe4/0x114 [<ffffffff8149591f>] _raw_spin_lock+0x31/0x40 [<ffffffffa000d438>] pick_test+0x2a2/0x892 [lockdep_test] [<ffffffff8100207f>] do_one_initcall+0x7f/0x13e [<ffffffff8108b9b5>] sys_init_module+0x83/0x1ce [<ffffffff8149cd02>] system_call_fastpath+0x16/0x1b

other info that might help us debug this: Chain exists of: lockC --> lockA --> lockB Possible unsafe locking scenario: CPU0 ---lock(lockB); lock(lockC); *** DEADLOCK *** CPU1 ---lock(lockA); lock(lockB);

1 lock held by insmod/1357: #0: (lockB){+.+...}, at: [<ffffffffa000d42c>] pick_test+0x296/0x892 [lockdep_test] stack backtrace: Pid: 1357, comm: insmod Not tainted 3.1.0-rc4-test-00131-g9e79e3e #2 Call Trace: [<ffffffff810804f5>] print_circular_bug+0x1ff/0x210 [<ffffffff8108109e>] __lock_acquire+0xae9/0xdd9 [<ffffffffa000d196>] ? get_lock+0x52/0x52 [lockdep_test] [<ffffffff81081ab8>] lock_acquire+0xe4/0x114 [<ffffffffa000d438>] ? pick_test+0x2a2/0x892 [lockdep_test] [<ffffffffa000d196>] ? get_lock+0x52/0x52 [lockdep_test] [<ffffffffa000d196>] ? get_lock+0x52/0x52 [lockdep_test] [<ffffffff8149591f>] _raw_spin_lock+0x31/0x40 [<ffffffffa000d438>] ? pick_test+0x2a2/0x892 [lockdep_test] [<ffffffff81496064>] ? _raw_spin_unlock+0x2b/0x2f [<ffffffffa000d438>] pick_test+0x2a2/0x892 [lockdep_test] [<ffffffff810720e8>] ? __blocking_notifier_call_chain+0x5b/0x67 [<ffffffffa000d196>] ? get_lock+0x52/0x52 [lockdep_test] [<ffffffff8100207f>] do_one_initcall+0x7f/0x13e [<ffffffff8108b9b5>] sys_init_module+0x83/0x1ce [<ffffffff8149cd02>] system_call_fastpath+0x16/0x1b

ComplexExample
ret = register_trace_irq_handler_entry(probe_irq_entry, NULL); if (WARN_ON(ret)) return -1; set_current_state(TASK_INTERRUPTIBLE); schedule_timeout(5*HZ); spin_lock(&lockC); spin_unlock(&lockC); spin_lock_irq(&lockA); spin_lock(&lockB); spin_unlock(&lockB); spin_unlock_irq(&lockA); spin_lock_irq(&lockB); spin_lock(&lockC); spin_unlock(&lockC); spin_unlock_irq(&lockB);

static void probe_irq_entry(void *ignore, int irq, struct irqaction *action) { unsigned long flags; spin_lock_irqsave(&lockA, flags); trace_printk("here %s!\n", in_irq() ? "in irq": "normal"); spin_unlock_irqrestore(&lockA, flags); }

LockdepSplat
========================================================= [ INFO: possible irq lock inversion dependency detected ] 3.1.0-rc4-test-00131-g9e79e3e #2 --------------------------------------------------------sshd/1327 just changed the state of lock: (lockA){-.....}, at: [<ffffffffa000d01a>] probe_irq_entry+0x1a/0x6c [lockdep_test] but this lock took another, HARDIRQ-unsafe lock in the past: (lockC){+.+...} and interrupts could create inverse lock ordering between them.

other info that might help us debug this: Chain exists of: lockA --> lockB --> lockC Possible interrupt unsafe locking scenario: CPU0 ---lock(lockC); CPU1 ---local_irq_disable(); lock(lockA); lock(lockB); <Interrupt> lock(lockA); *** DEADLOCK ***

5 locks held by sshd/1327: #0: (sk_lock-AF_INET){+.+.+.}, at: [<ffffffff8142549f>] tcp_sendmsg+0x29/0x7c9 #1: (rcu_read_lock){.+.+..}, at: [<ffffffff8141c89d>] ip_queue_xmit+0x0/0x393 #2: (rcu_read_lock){.+.+..}, at: [<ffffffff8141cf31>] ip_finish_output2+0x14d/0x269 #3: (rcu_read_lock_bh){.+....}, at: [<ffffffff813e9288>] dev_queue_xmit+0x0/0x534 #4: (_xmit_ETHER#2){+.-...}, at: [<ffffffff813fd311>] sch_direct_xmit+0x4e/0x14e

the shortest dependencies between 2nd lock and 1st lock: -> (lockC){+.+...} ops: 2 { HARDIRQ-ON-W at: [<ffffffff810808dd>] __lock_acquire+0x328/0xdd9 [<ffffffff81081ab8>] lock_acquire+0xe4/0x114 [<ffffffff8149591f>] _raw_spin_lock+0x31/0x40 [<ffffffffa000d8a0>] pick_test+0x70a/0x892 [lockdep_test] [<ffffffff8100207f>] do_one_initcall+0x7f/0x13e [<ffffffff8108b9b5>] sys_init_module+0x83/0x1ce [<ffffffff8149cd02>] system_call_fastpath+0x16/0x1b SOFTIRQ-ON-W at: [<ffffffff810808fe>] __lock_acquire+0x349/0xdd9 [<ffffffff81081ab8>] lock_acquire+0xe4/0x114 [<ffffffff8149591f>] _raw_spin_lock+0x31/0x40 [<ffffffffa000d8a0>] pick_test+0x70a/0x892 [lockdep_test] [<ffffffff8100207f>] do_one_initcall+0x7f/0x13e [<ffffffff8108b9b5>] sys_init_module+0x83/0x1ce [<ffffffff8149cd02>] system_call_fastpath+0x16/0x1b INITIAL USE at: [<ffffffff81080954>] __lock_acquire+0x39f/0xdd9 [<ffffffff81081ab8>] lock_acquire+0xe4/0x114 [<ffffffff8149591f>] _raw_spin_lock+0x31/0x40 [<ffffffffa000d8a0>] pick_test+0x70a/0x892 [lockdep_test] [<ffffffff8100207f>] do_one_initcall+0x7f/0x13e [<ffffffff8108b9b5>] sys_init_module+0x83/0x1ce [<ffffffff8149cd02>] system_call_fastpath+0x16/0x1b } ... key at: [<ffffffffa000dcd8>] lockC+0x18/0xfffffffffffffdad [lockdep_test] ... acquired at: [<ffffffff81081ab8>] lock_acquire+0xe4/0x114 [<ffffffff8149591f>] _raw_spin_lock+0x31/0x40 [<ffffffffa000d8f4>] pick_test+0x75e/0x892 [lockdep_test] [<ffffffff8100207f>] do_one_initcall+0x7f/0x13e [<ffffffff8108b9b5>] sys_init_module+0x83/0x1ce [<ffffffff8149cd02>] system_call_fastpath+0x16/0x1b

StateInfo
IN-HARDIRQ-W HARDIRQ-ON-W IN-HARDIRQ-R HARDIRQ-ON-R <SOFTIRQ> <RECLAIM_FS>

-> (lockB){......} ops: 2 { INITIAL USE at: [<ffffffff81080954>] __lock_acquire+0x39f/0xdd9 [<ffffffff81081ab8>] lock_acquire+0xe4/0x114 [<ffffffff8149591f>] _raw_spin_lock+0x31/0x40 [<ffffffffa000d8c4>] pick_test+0x72e/0x892 [lockdep_test] [<ffffffff8100207f>] do_one_initcall+0x7f/0x13e [<ffffffff8108b9b5>] sys_init_module+0x83/0x1ce [<ffffffff8149cd02>] system_call_fastpath+0x16/0x1b } ... key at: [<ffffffffa000dc98>] lockB+0x18/0xfffffffffffffded [lockdep_test] ... acquired at: [<ffffffff81081ab8>] lock_acquire+0xe4/0x114 [<ffffffff8149591f>] _raw_spin_lock+0x31/0x40 [<ffffffffa000d8c4>] pick_test+0x72e/0x892 [lockdep_test] [<ffffffff8100207f>] do_one_initcall+0x7f/0x13e [<ffffffff8108b9b5>] sys_init_module+0x83/0x1ce [<ffffffff8149cd02>] system_call_fastpath+0x16/0x1b

-> (lockA){-.....} ops: 2 { IN-HARDIRQ-W at: [<ffffffff81080869>] __lock_acquire+0x2b4/0xdd9 [<ffffffff81081ab8>] lock_acquire+0xe4/0x114 [<ffffffff81495a24>] _raw_spin_lock_irqsave+0x49/0x5b [<ffffffffa000d01a>] probe_irq_entry+0x1a/0x6c [lockdep_test] [<ffffffff810aa8eb>] handle_irq_event_percpu+0x4c/0x19c [<ffffffff810aaa7f>] handle_irq_event+0x44/0x65 [<ffffffff810accb4>] handle_fasteoi_irq+0x8d/0xb3 [<ffffffff81010c67>] handle_irq+0x88/0x91 [<ffffffff8149f8bd>] do_IRQ+0x4d/0xb4 [<ffffffff814962b3>] ret_from_intr+0x0/0x1a [<ffffffff813e9106>] dev_hard_start_xmit+0x40f/0x591 [<ffffffff813fd335>] sch_direct_xmit+0x72/0x14e [<ffffffff813e95e5>] dev_queue_xmit+0x35d/0x534 [<ffffffff8141cfd6>] ip_finish_output2+0x1f2/0x269 [<ffffffff8141d0b5>] ip_finish_output+0x68/0x6d [<ffffffff8141d249>] NF_HOOK_COND.clone.1+0x54/0x5b [<ffffffff8141d400>] ip_output+0x65/0x6d [<ffffffff8141a885>] dst_output+0x1c/0x20 [<ffffffff8141c58b>] ip_local_out+0x23/0x27 [<ffffffff8141cbcc>] ip_queue_xmit+0x32f/0x393 [<ffffffff8142e8b1>] tcp_transmit_skb+0x760/0x79e [<ffffffff814310f0>] tcp_write_xmit+0x80b/0x8fa [<ffffffff8143123a>] __tcp_push_pending_frames+0x25/0x52

INITIAL USE at: [<ffffffff81080954>] __lock_acquire+0x39f/0xdd9 [<ffffffff81081ab8>] lock_acquire+0xe4/0x114 [<ffffffff814959cc>] _raw_spin_lock_irq+0x3d/0x4c [<ffffffffa000d8b8>] pick_test+0x722/0x892 [lockdep_test] [<ffffffff8100207f>] do_one_initcall+0x7f/0x13e [<ffffffff8108b9b5>] sys_init_module+0x83/0x1ce [<ffffffff8149cd02>] system_call_fastpath+0x16/0x1b } ... key at: [<ffffffffa000dc58>] lockA+0x18/0xfffffffffffffe2d [lockdep_test] ... acquired at: [<ffffffff8107fe33>] check_usage_forwards+0x7c/0x87 [<ffffffff8107f3a1>] mark_lock+0x13d/0x235 [<ffffffff81080869>] __lock_acquire+0x2b4/0xdd9 [<ffffffff81081ab8>] lock_acquire+0xe4/0x114 [<ffffffff81495a24>] _raw_spin_lock_irqsave+0x49/0x5b [<ffffffffa000d01a>] probe_irq_entry+0x1a/0x6c [lockdep_test] [<ffffffff810aa8eb>] handle_irq_event_percpu+0x4c/0x19c [<ffffffff810aaa7f>] handle_irq_event+0x44/0x65 [<ffffffff810accb4>] handle_fasteoi_irq+0x8d/0xb3 [<ffffffff81010c67>] handle_irq+0x88/0x91 [<ffffffff8149f8bd>] do_IRQ+0x4d/0xb4 [<ffffffff814962b3>] ret_from_intr+0x0/0x1a [<ffffffff813e9106>] dev_hard_start_xmit+0x40f/0x591

ConfusingExample
CPU 0 disable interrupts lock B del_timer_sync CPU 1 disable interrupts lock A lock B CPU 2

timer handler Interrupt

Lock A

DEADLOCK

ConfusingExample
setup_timer(&mytimer, timeout, 0); mod_timer(&mytimer, 10); ret = register_trace_irq_handler_entry(probe_irq_entry, NULL); if (WARN_ON(ret)) return -1; set_current_state(TASK_INTERRUPTIBLE); schedule_timeout(5*HZ); spin_lock_irq(&lockA); spin_lock(&lockB); spin_unlock(&lockB); spin_unlock_irq(&lockA); spin_lock_irq(&lockB); del_timer_sync(&mytimer); spin_unlock_irq(&lockB);

LockdepSplat
====================================================== [ INFO: HARDIRQ-safe -> HARDIRQ-unsafe lock order detected ] 3.1.0-rc4-test-00131-g9e79e3e #2 -----------------------------------------------------insmod/1381 [HC0[0]:SC0[0]:HE0:SE1] is trying to acquire: (&mytimer){+.-...}, at: [<ffffffff8105deeb>] del_timer_sync+0x0/0xce and this task is already holding: (lockB){......}, at: [<ffffffffa0010127>] lt_initD2+0x127/0x143 [lockdep_test] which would create a new lock dependency: (lockB){......} -> (&mytimer){+.-...}

but this new dependency connects a HARDIRQ-irq-safe lock: (lockA){-.....} ... which became HARDIRQ-irq-safe at: [<ffffffff81080869>] __lock_acquire+0x2b4/0xdd9 [<ffffffff81081ab8>] lock_acquire+0xe4/0x114 [<ffffffff81495a24>] _raw_spin_lock_irqsave+0x49/0x5b [<ffffffffa000d025>] probe_irq_entry+0x1a/0x6c [lockdep_test] [<ffffffff810aa8eb>] handle_irq_event_percpu+0x4c/0x19c [<ffffffff810aaa7f>] handle_irq_event+0x44/0x65 [<ffffffff810acbff>] handle_edge_irq+0xb2/0xda [<ffffffff81010c67>] handle_irq+0x88/0x91 [<ffffffff8149f8bd>] do_IRQ+0x4d/0xb4 [<ffffffff814962b3>] ret_from_intr+0x0/0x1a [snip] to a HARDIRQ-irq-unsafe lock: (&mytimer){+.-...} ... which became HARDIRQ-irq-unsafe at: ... [<ffffffff810808dd>] __lock_acquire+0x328/0xdd9 [<ffffffff81081ab8>] lock_acquire+0xe4/0x114 [<ffffffff8105e4e2>] run_timer_softirq+0x1df/0x309 [<ffffffff810562af>] __do_softirq+0xe5/0x1d5 [<ffffffff8149effc>] call_softirq+0x1c/0x30 [<ffffffff81010b87>] do_softirq+0x4b/0xa3 [<ffffffff81055fcd>] irq_exit+0x53/0xca [<ffffffff8149f9af>] smp_apic_timer_interrupt+0x8b/0x99 [snip]

other info that might help us debug this: Chain exists of: lockA --> lockB --> &mytimer Possible interrupt unsafe locking scenario: CPU0 ---lock(&mytimer); CPU1 ---local_irq_disable(); lock(lockA); lock(lockB); <Interrupt> lock(lockA); *** DEADLOCK ***

the dependencies between HARDIRQ-irq-safe lock and the holding lock: -> (lockA){-.....} ops: 11 { IN-HARDIRQ-W at: [<ffffffff81080869>] __lock_acquire+0x2b4/0xdd9 [<ffffffff81081ab8>] lock_acquire+0xe4/0x114 [<ffffffff81495a24>] _raw_spin_lock_irqsave+0x49/0x5b [<ffffffffa000d025>] probe_irq_entry+0x1a/0x6c [lockdep_test] [snip] INITIAL USE at: [<ffffffff81080954>] __lock_acquire+0x39f/0xdd9 [<ffffffff81081ab8>] lock_acquire+0xe4/0x114 [snip] } ... key at: [<ffffffffa000de48>] lockA+0x18/0xfffffffffffffde5 [lockdep_test] ... acquired at: [<ffffffff81081ab8>] lock_acquire+0xe4/0x114 [<ffffffff8149591f>] _raw_spin_lock+0x31/0x40 [<ffffffffa0010103>] lt_initD2+0x103/0x143 [lockdep_test] [<ffffffffa000dbb3>] pick_test+0xa12/0xa2f [lockdep_test] [<ffffffff8100207f>] do_one_initcall+0x7f/0x13e [<ffffffff8108b9b5>] sys_init_module+0x83/0x1ce [<ffffffff8149cd02>] system_call_fastpath+0x16/0x1b

-> (lockB){......} ops: 2 { INITIAL USE at: [<ffffffff81080954>] __lock_acquire+0x39f/0xdd9 [<ffffffff81081ab8>] lock_acquire+0xe4/0x114 [<ffffffff8149591f>] _raw_spin_lock+0x31/0x40 [<ffffffffa0010103>] lt_initD2+0x103/0x143 [lockdep_test] [<ffffffffa000dbb3>] pick_test+0xa12/0xa2f [lockdep_test] [<ffffffff8100207f>] do_one_initcall+0x7f/0x13e [<ffffffff8108b9b5>] sys_init_module+0x83/0x1ce [<ffffffff8149cd02>] system_call_fastpath+0x16/0x1b } ... key at: [<ffffffffa000de88>] lockB+0x18/0xfffffffffffffda5 [lockdep_test] ... acquired at: [<ffffffff81080295>] check_irq_usage+0x5d/0xbe [<ffffffff810810c1>] __lock_acquire+0xb0c/0xdd9 [<ffffffff81081ab8>] lock_acquire+0xe4/0x114 [<ffffffff8105df39>] del_timer_sync+0x4e/0xce [<ffffffffa0010133>] lt_initD2+0x133/0x143 [lockdep_test] [<ffffffffa000dbb3>] pick_test+0xa12/0xa2f [lockdep_test] [<ffffffff8100207f>] do_one_initcall+0x7f/0x13e [<ffffffff8108b9b5>] sys_init_module+0x83/0x1ce [<ffffffff8149cd02>] system_call_fastpath+0x16/0x1b

the dependencies between the lock to be acquired and HARDIRQ-irq-unsafe lock: -> (&mytimer){+.-...} ops: 2 { HARDIRQ-ON-W at: [<ffffffff810808dd>] __lock_acquire+0x328/0xdd9 [<ffffffff81081ab8>] lock_acquire+0xe4/0x114 [<ffffffff8105e4e2>] run_timer_softirq+0x1df/0x309 [<ffffffff810562af>] __do_softirq+0xe5/0x1d5 [<ffffffff8149effc>] call_softirq+0x1c/0x30 [snip] IN-SOFTIRQ-W at: [<ffffffff8108088a>] __lock_acquire+0x2d5/0xdd9 [<ffffffff81081ab8>] lock_acquire+0xe4/0x114 [<ffffffff8105e4e2>] run_timer_softirq+0x1df/0x309 [snip] INITIAL USE at: [<ffffffff81080954>] __lock_acquire+0x39f/0xdd9 [<ffffffff81081ab8>] lock_acquire+0xe4/0x114 [<ffffffff8105e4e2>] run_timer_softirq+0x1df/0x309 [<ffffffff810562af>] __do_softirq+0xe5/0x1d5 [<ffffffff8149effc>] call_softirq+0x1c/0x30 [<ffffffff81010b87>] do_softirq+0x4b/0xa3

... key at: [<ffffffffa000e160>] __key.25045+0x0/0xfffffffffffffab5 [lockdep_test] ... acquired at: [<ffffffff81080295>] check_irq_usage+0x5d/0xbe [<ffffffff810810c1>] __lock_acquire+0xb0c/0xdd9 [<ffffffff81081ab8>] lock_acquire+0xe4/0x114 [<ffffffff8105df39>] del_timer_sync+0x4e/0xce [<ffffffffa0010133>] lt_initD2+0x133/0x143 [lockdep_test] [<ffffffffa000dbb3>] pick_test+0xa12/0xa2f [lockdep_test] [<ffffffff8100207f>] do_one_initcall+0x7f/0x13e [<ffffffff8108b9b5>] sys_init_module+0x83/0x1ce [<ffffffff8149cd02>] system_call_fastpath+0x16/0x1b stack backtrace: Pid: 1381, comm: insmod Not tainted 3.1.0-rc4-test-00131-g9e79e3e #2 Call Trace: [<ffffffff81080224>] check_usage+0x365/0x379 [<ffffffff81080295>] check_irq_usage+0x5d/0xbe [<ffffffff810810c1>] __lock_acquire+0xb0c/0xdd9 [<ffffffff8105dedd>] ? try_to_del_timer_sync+0x7b/0x89 [<ffffffff81081ab8>] lock_acquire+0xe4/0x114 [<ffffffff8105deeb>] ? try_to_del_timer_sync+0x89/0x89 [<ffffffffa0010127>] ? lt_initD2+0x127/0x143 [lockdep_test] [<ffffffff81495fd8>] ? _raw_spin_unlock_irq+0x30/0x3b

Questions?

You might also like