Ryan Stone 6969ef6656 Correct a series of errors in the hand-rolled locking for drace_debug.c:
- Use spinlock_enter()/spinlock_exit() to prevent a thread holding a
  debug lock from being preempted to prevent other threads waiting
  on that lock from starvation.

- Handle the possibility of CPU migration in between the fetch of curcpu
  and the call to spinlock_enter() by saving curcpu in a local variable.

- Use memory barriers to prevent reordering of loads and stores of the
  data protected by the lock outside of the critical section

- Eliminate false sharing of the locks by moving them into the structures
  that they protect and aligning them to a cacheline boundary.

- Record the owning thread in the lock to make debugging future problems
  easier.

Reviewed by:	rpaulo (initial version)
MFC after:	2 weeks
2012-12-23 15:50:37 +00:00
..
2012-10-10 08:36:38 +00:00
2012-11-01 04:07:08 +00:00
2012-12-23 10:21:01 +00:00
2012-12-18 06:37:23 +00:00
2012-12-18 08:14:16 +00:00
2012-10-10 08:36:38 +00:00
2012-11-10 13:48:41 +00:00