On Fri, Jul 10, 2015 at 03:57:46PM +0200, Ingo Molnar wrote: > * Peter Zijlstra <pet...@infradead.org> wrote:
> > Do we want to make double unlock non-fatal unconditionally? > > No, just don't BUG() out, don't crash the system - generate a warning? So that would be a yes.. Something like so then? Won't this generate a splat on that locking self test then? And upset people? --- kernel/locking/qspinlock_paravirt.h | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/kernel/locking/qspinlock_paravirt.h b/kernel/locking/qspinlock_paravirt.h index 04ab18151cc8..286e8978a562 100644 --- a/kernel/locking/qspinlock_paravirt.h +++ b/kernel/locking/qspinlock_paravirt.h @@ -133,8 +133,14 @@ static struct pv_node *pv_unhash(struct qspinlock *lock) * This guarantees a limited lookup time and is itself guaranteed by * having the lock owner do the unhash -- IFF the unlock sees the * SLOW flag, there MUST be a hash entry. + * + * This can trigger due to double-unlock. In which case, return a + * random pointer so that __pv_queued_spin_unlock() can dereference it + * without crashing. */ - BUG(); + WARN_ON_ONCE(true); + + return (struct pv_node *)this_cpu_ptr(&mcs_nodes[0]); } /* -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/