Tue Sep 29 11:51:02 2009 UTC ()
Add a switch on whether to create VNODE_LOCKDEBUG checks or not.
Since VNODE_LOCKDEBUG has never been generally useful, default to
off.  However, the checks can still be generated by flipping the
switch for the isolated cases where this form of dynamic analysis
is useful and the person using it knows what she is doing.


(pooka)
diff -r1.51 -r1.52 src/sys/kern/vnode_if.sh

cvs diff -r1.51 -r1.52 src/sys/kern/vnode_if.sh (expand / switch to context diff)
--- src/sys/kern/vnode_if.sh 2008/11/19 14:10:49 1.51
+++ src/sys/kern/vnode_if.sh 2009/09/29 11:51:02 1.52
@@ -29,7 +29,7 @@
  * SUCH DAMAGE.
  */
 "
-SCRIPT_ID='$NetBSD: vnode_if.sh,v 1.51 2008/11/19 14:10:49 pooka Exp $'
+SCRIPT_ID='$NetBSD: vnode_if.sh,v 1.52 2009/09/29 11:51:02 pooka Exp $'
 
 # Script to produce VFS front-end sugar.
 #
@@ -52,6 +52,9 @@
 out_h=../sys/vnode_if.h
 out_rumph=../rump/include/rump/rumpvnode_if.h
 
+# generate VNODE_LOCKDEBUG checks (not fully functional)
+lockdebug=0
+
 # Awk program (must support nawk extensions)
 # Use "awk" at Berkeley, "nawk" or "gawk" elsewhere.
 awk=${AWK:-awk}
@@ -196,10 +199,12 @@
 echo ''
 echo "#ifndef _${SYS}VNODE_IF_H_"
 echo "#define _${SYS}VNODE_IF_H_"
-echo ''
-echo '#ifdef _KERNEL_OPT'
-echo '#include "opt_vnode_lockdebug.h"'
-echo '#endif /* _KERNEL_OPT */'
+if [ ${lockdebug} -ne 0 ] ; then
+	echo ''
+	echo '#ifdef _KERNEL_OPT'
+	echo '#include "opt_vnode_lockdebug.h"'
+	echo '#endif /* _KERNEL_OPT */'
+fi
 echo "
 extern const struct vnodeop_desc ${rump}vop_default_desc;
 "
@@ -279,12 +284,11 @@
 echo -n "$copyright"
 echo "
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, \"\$NetBSD\$\");
-"
+__KERNEL_RCSID(0, \"\$NetBSD\$\");"
 
+[ ${lockdebug} -ne 0 ] && echo && echo '#include "opt_vnode_lockdebug.h"'
+
 echo '
-#include "opt_vnode_lockdebug.h"'
-echo '
 #include <sys/param.h>
 #include <sys/mount.h>
 #include <sys/buf.h>
@@ -306,7 +310,7 @@
 '
 
 # Body stuff
-sed -e "$sed_prep" $src | $awk -v rump=${rump} '
+sed -e "$sed_prep" $src | $awk -v rump=${rump} -v lockdebug=${lockdebug} '
 function do_offset(typematch) {
 	for (i=0; i<argc; i++) {
 		if (argtype[i] == typematch) {
@@ -376,16 +380,18 @@
 	}
 	printf(")\n");
 	printf("{\n\tint error;\n\tbool mpsafe;\n\tstruct %s_args a;\n", name);
-	printf("#ifdef VNODE_LOCKDEBUG\n");
-	for (i=0; i<argc; i++) {
-		if (lockstate[i] != -1)
-			printf("\tint islocked_%s;\n", argname[i]);
+	if (lockdebug) {
+		printf("#ifdef VNODE_LOCKDEBUG\n");
+		for (i=0; i<argc; i++) {
+			if (lockstate[i] != -1)
+				printf("\tint islocked_%s;\n", argname[i]);
+		}
+		printf("#endif\n");
 	}
-	printf("#endif\n");
 	printf("\ta.a_desc = VDESC(%s);\n", name);
 	for (i=0; i<argc; i++) {
 		printf("\ta.a_%s = %s;\n", argname[i], argname[i]);
-		if (lockstate[i] != -1) {
+		if (lockdebug && lockstate[i] != -1) {
 			printf("#ifdef VNODE_LOCKDEBUG\n");
 			printf("\tislocked_%s = (%s->v_vflag & VV_LOCKSWORK) ? (VOP_ISLOCKED(%s) == LK_EXCLUSIVE) : %d;\n",
 			    argname[i], argname[i], argname[i], lockstate[i]);