Spinlock depth checking
authorBarret Rhoden <brho@cs.berkeley.edu>
Fri, 4 May 2012 22:38:03 +0000 (15:38 -0700)
committerBarret Rhoden <brho@cs.berkeley.edu>
Wed, 5 Sep 2012 21:43:57 +0000 (14:43 -0700)
commit3763a002ab3b1e373dc4efaf6586279492995822
tree442041cdd26371ee77fa115adbcd5a58feee1e13
parent0526c8ffc802e79692f62beae5d053a55c52a5d1
Spinlock depth checking

This tracks how many locks we acquired on a pcpu basis.  Before we
kthread/block or anything like that, the number better be 0.  Not only
is it bad for perf, but you could deadlock.

Needed this to hunt down a deadlock bug (asserted in some place where I
thought I had no locks), though it had nothing to do with sleeping.

It only does work when CONFIG_SPINLOCK_DEBUG is on, though you can
always test for it (and you'll get 0).

I didn't compile it for RISCV.  YMMV.
kern/arch/i686/atomic.h
kern/arch/riscv/atomic.h
kern/include/atomic.h
kern/include/smp.h
kern/src/atomic.c
kern/src/kthread.c
kern/src/smp.c