freebsd-nq/sys/cddl/dev/dtrace
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
..
amd64
i386
mips
powerpc
dtrace_anon.c
dtrace_cddl.h
dtrace_clone.c
dtrace_debug.c
dtrace_hacks.c
dtrace_ioctl.c
dtrace_load.c
dtrace_modevent.c
dtrace_sysctl.c
dtrace_test.c
dtrace_unload.c
dtrace_vtime.c