Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1308186
| From | Thomas Gleixner <tglx@linutronix.de> |
|---|---|
| Newsgroups | linux.kernel |
| Subject | Re: timers: HARDIRQ-safe -> HARDIRQ-unsafe lock order detected |
| Date | 2016-01-13 10:10 +0100 |
| Message-ID | <qQpBf-5Wp-9@gated-at.bofh.it> (permalink) |
| References | <qQdqq-5Tj-9@gated-at.bofh.it> |
| Organization | linux.* mail to news gateway |
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?
Thanks,
tglx
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