Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1308576
| From | "Paul E. McKenney" <paulmck@linux.vnet.ibm.com> |
|---|---|
| Newsgroups | linux.kernel |
| Subject | Re: timers: HARDIRQ-safe -> HARDIRQ-unsafe lock order detected |
| Date | 2016-01-13 17:30 +0100 |
| Message-ID | <qQwt7-2jv-77@gated-at.bofh.it> (permalink) |
| References | <qQdqq-5Tj-9@gated-at.bofh.it> <qQpBf-5Wp-9@gated-at.bofh.it> |
| Organization | linux.* mail to news gateway |
On Wed, Jan 13, 2016 at 10:05:49AM +0100, Thomas Gleixner wrote: > Sasha, > > On Tue, 12 Jan 2016, Sasha Levin wrote: > > Cc'ing Paul, Peter > > > While fuzzing with trinity inside a KVM tools guest, running the latest -next > > kernel, I've hit the following lockdep warning: > > > [ 3408.474461] Possible interrupt unsafe locking scenario: > > > > [ 3408.474461] > > > > [ 3408.475239] CPU0 CPU1 > > > > [ 3408.475809] ---- ---- > > > > [ 3408.476380] lock(&lock->wait_lock); > > > > [ 3408.476925] local_irq_disable(); > > > > [ 3408.477640] lock(&(&new_timer->it_lock)->rlock); > > > > [ 3408.478607] lock(&lock->wait_lock); > > That comes from rcu_read_unlock: > > rcu_read_unlock() > rcu_read_unlock_special() > ... > rt_mutex_unlock(&rnp->boost_mtx); > raw_spin_lock(&boost_mtx->wait_lock); > > > [ 3408.479445] <Interrupt> > > > > [ 3408.479796] lock(&(&new_timer->it_lock)->rlock); > > So the task on CPU0 holds rnp->boost_mtx.wait_lock and then the interrupt > deadlocks on the timer->it_lock. > > We can fix that particular issue in the posix-timer code by making the > locking symetric: > > rcu_read_lock(); > spin_lock_irq(timer->lock); > > ... > > spin_unlock_irq(timer->lock); > rcu_read_unlock(); > > instead of: > > rcu_read_lock(); > spin_lock_irq(timer->lock); > rcu_read_unlock(); > > ... > > spin_unlock_irq(timer->lock); > > But the question is, whether this is the only offending code path in tree. We > can avoid the hassle by making rtmutex->wait_lock irq safe. > > Thoughts? Given that the lock is disabling irq, I don't see a problem with extending the RCU read-side critical section to cover the entire irq-disabled region. Your point about the hassle of finding and fixing all the other instances of this sort is well taken, however. Thanx, Paul
Back to linux.kernel | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread
timers: HARDIRQ-safe -> HARDIRQ-unsafe lock order detected Sasha Levin <sasha.levin@oracle.com> - 2016-01-12 21:10 +0100
Re: timers: HARDIRQ-safe -> HARDIRQ-unsafe lock order detected Peter Zijlstra <peterz@infradead.org> - 2016-01-12 21:20 +0100
Re: timers: HARDIRQ-safe -> HARDIRQ-unsafe lock order detected "Paul E. McKenney" <paulmck@linux.vnet.ibm.com> - 2016-01-12 22:00 +0100
Re: timers: HARDIRQ-safe -> HARDIRQ-unsafe lock order detected Thomas Gleixner <tglx@linutronix.de> - 2016-01-13 10:10 +0100
Re: timers: HARDIRQ-safe -> HARDIRQ-unsafe lock order detected "Paul E. McKenney" <paulmck@linux.vnet.ibm.com> - 2016-01-13 17:30 +0100
Re: timers: HARDIRQ-safe -> HARDIRQ-unsafe lock order detected Thomas Gleixner <tglx@linutronix.de> - 2016-01-14 18:50 +0100
Re: timers: HARDIRQ-safe -> HARDIRQ-unsafe lock order detected "Paul E. McKenney" <paulmck@linux.vnet.ibm.com> - 2016-01-14 20:40 +0100
Re: timers: HARDIRQ-safe -> HARDIRQ-unsafe lock order detected Thomas Gleixner <tglx@linutronix.de> - 2016-01-14 20:50 +0100
Re: timers: HARDIRQ-safe -> HARDIRQ-unsafe lock order detected "Paul E. McKenney" <paulmck@linux.vnet.ibm.com> - 2016-01-15 02:50 +0100
csiph-web