On Wed, Jul 18, 2018 at 11:22:36AM -0700, Andrei Vagin wrote: > > > [ 1.085679] lock(cpu_hotplug_lock.rw_sem); > > > [ 1.085753] lock(cpu_hotplug_lock.rw_sem); > > > [ 1.085828] > > > [ 1.085828] *** DEADLOCK ***
> Peter and Ingo, maybe you could explain why it isn't safe to take one > reader lock twice? Very simple, because rwsems are fair and !recursive. So if another CPU were to issue a write-lock in between these, then the second would block because there is a writer pending. But because we then already have a reader we're deadlocked.