+
+/*
+ * Print out information about state of a lock. Used by VOP_PRINT
+ * routines to display ststus about contained locks.
+ */
+lockmgr_printinfo(lkp)
+ struct lock *lkp;
+{
+
+ if (lkp->lk_sharecount)
+ printf(" lock type %s: SHARED", lkp->lk_wmesg);
+ else if (lkp->lk_flags & LK_HAVE_EXCL)
+ printf(" lock type %s: EXCL by pid %d", lkp->lk_wmesg,
+ lkp->lk_lockholder);
+ if (lkp->lk_waitcount > 0)
+ printf(" with %d pending", lkp->lk_waitcount);
+}
+
+#if defined(DEBUG) && NCPUS == 1
+#include <sys/kernel.h>
+#include <vm/vm.h>
+#include <sys/sysctl.h>
+int lockpausetime = 1;
+struct ctldebug debug2 = { "lockpausetime", &lockpausetime };
+/*
+ * Simple lock functions so that the debugger can see from whence
+ * they are being called.
+ */
+void
+simple_lock_init(alp)
+ struct simplelock *alp;
+{
+
+ alp->lock_data = 0;
+}
+
+void
+_simple_lock(alp, id, l)
+ __volatile struct simplelock *alp;
+ const char *id;
+ int l;
+{
+
+ if (alp->lock_data == 1) {
+ if (lockpausetime == -1)
+ panic("%s:%d: simple_lock: lock held", id, l);
+ if (lockpausetime == 0) {
+ printf("%s:%d: simple_lock: lock held\n", id, l);
+ BACKTRACE(curproc);
+ } else if (lockpausetime > 0) {
+ printf("%s:%d: simple_lock: lock held...", id, l);
+ tsleep(&lockpausetime, PCATCH | PPAUSE, "slock",
+ lockpausetime * hz);
+ printf(" continuing\n");
+ }
+ }
+ alp->lock_data = 1;
+}
+
+int
+_simple_lock_try(alp, id, l)
+ __volatile struct simplelock *alp;
+ const char *id;
+ int l;
+{
+
+ /*
+ if (alp->lock_data == 1) {
+ if (lockpausetime == -1)
+ panic("%s:%d: simple_lock_try: lock held", id, l);
+ if (lockpausetime == 0) {
+ printf("%s:%d: simple_lock_try: lock held\n", id, l);
+ BACKTRACE(curproc);
+ } else if (lockpausetime > 0) {
+ printf("%s:%d: simple_lock_try: lock held...", id, l);
+ tsleep(&lockpausetime, PCATCH | PPAUSE, "slock",
+ lockpausetime * hz);
+ printf(" continuing\n");
+ }
+ }
+ */
+ if (alp->lock_data)
+ return (0);
+
+ alp->lock_data = 1;
+ return (1);
+}
+
+void
+_simple_unlock(alp, id, l)
+ __volatile struct simplelock *alp;
+ const char *id;
+ int l;
+{
+
+ if (alp->lock_data == 0) {
+ if (lockpausetime == -1)
+ panic("%s:%d: simple_unlock: lock not held", id, l);
+ if (lockpausetime == 0) {
+ printf("%s:%d: simple_unlock: lock not held\n", id, l);
+ BACKTRACE(curproc);
+ } else if (lockpausetime > 0) {
+ printf("%s:%d: simple_unlock: lock not held...", id, l);
+ tsleep(&lockpausetime, PCATCH | PPAUSE, "sunlock",
+ lockpausetime * hz);
+ printf(" continuing\n");
+ }
+ }
+ alp->lock_data = 0;
+}
+#endif /* DEBUG && NCPUS == 1 */