On Mon, 5 Jan 2015, Helg wrote:
> The man page for LOCK(9) says that if the kernel option LOCKDEBUG is
> enabled, additional facilities are provided to assist in determining
> deadlock occurrences.
>
> I created a copy of /sys/arch/amd64/conf/GENERIC and added option
> LOCKDEBUG. Executing config and then make clean && make results in
> warnings like:
>
> implicit declaration of function '__mp_lock'
>
> Adding includes for <sys/mplock.h> in the offending files resolves the
> problem but this just doesn't seem right.
>
> Does anyone have any suggestions?
Yeah, don't use it. It used to be a lot more when there were still traces
of the original "simplelocks" in the tree, but the code to do more with
LOCKDEBUG was ripped out as those no-ops were felt to be more misleading
than helpful.
It's dead, Jim, let's bury LOCKDEBUG.
oks?
Philip
Index: sys/arch/i386/i386/trap.c
===================================================================
RCS file: /cvs/src/sys/arch/i386/i386/trap.c,v
retrieving revision 1.119
diff -u -p -r1.119 trap.c
--- sys/arch/i386/i386/trap.c 2 Dec 2014 18:13:10 -0000 1.119
+++ sys/arch/i386/i386/trap.c 11 Jan 2015 03:33:48 -0000
@@ -381,11 +381,6 @@ trap(struct trapframe *frame)
case T_PAGEFLT: /* allow page faults in kernel mode */
if (p == 0 || p->p_addr == 0)
goto we_re_toast;
-#ifdef LOCKDEBUG
- /* If we page-fault while in scheduler, we're doomed. */
- if (__mp_lock_held(&sched_lock))
- goto we_re_toast;
-#endif
pcb = &p->p_addr->u_pcb;
#if 0
Index: sys/sys/sched.h
===================================================================
RCS file: /cvs/src/sys/sys/sched.h,v
retrieving revision 1.37
diff -u -p -r1.37 sched.h
--- sys/sys/sched.h 17 Oct 2014 01:51:39 -0000 1.37
+++ sys/sys/sched.h 11 Jan 2015 03:33:48 -0000
@@ -183,7 +183,7 @@ void remrunqueue(struct proc *);
yield(); \
} while (0)
-#if defined(MULTIPROCESSOR) || defined(LOCKDEBUG)
+#if defined(MULTIPROCESSOR)
#include <sys/lock.h>
/*
@@ -215,7 +215,7 @@ do {
\
splx(s); \
} while (/* CONSTCOND */ 0)
-#else /* ! MULTIPROCESSOR || LOCKDEBUG */
+#else /* ! MULTIPROCESSOR */
#define SCHED_ASSERT_LOCKED() splassert(IPL_SCHED);
#define SCHED_ASSERT_UNLOCKED() /* nothing */
@@ -225,7 +225,7 @@ do {
\
#define SCHED_LOCK(s) s = splsched()
#define SCHED_UNLOCK(s) splx(s)
-#endif /* MULTIPROCESSOR || LOCKDEBUG */
+#endif /* MULTIPROCESSOR */
#endif /* _KERNEL */
#endif /* _SYS_SCHED_H_ */
Index: share/man/man9/lock.9
===================================================================
RCS file: /cvs/src/share/man/man9/lock.9,v
retrieving revision 1.22
diff -u -p -r1.22 lock.9
--- share/man/man9/lock.9 9 Jul 2014 14:16:10 -0000 1.22
+++ share/man/man9/lock.9 11 Jan 2015 03:33:48 -0000
@@ -57,10 +57,6 @@ single process.
It also allows upgrading a shared-access lock to an
exclusive-access lock, as well as downgrading an exclusive-access lock
to a shared-access lock.
-.Pp
-If the kernel option LOCKDEBUG is enabled, additional facilities
-are provided to record additional lock information.
-These facilities are provided to assist in determining deadlock occurrences.
.Sh FUNCTIONS
The functions which operate on locks are:
.Bl -tag -width Ds