--- linux/kdb/kdb_io.c.orig	Mon Jun  9 15:45:54 2003
+++ linux/kdb/kdb_io.c	Mon Jun  9 15:47:08 2003
@@ -493,10 +493,11 @@
 	 * But if any cpu goes recursive in kdb, just print the output,
 	 * even if it is interleaved with any other text.
 	 */
-	if (!KDB_STATE(PRINTF_LOCK)) {
+	spin_lock(&kdb_printf_lock);
+	if (!KDB_STATE(PRINTF_LOCK)) 
 		KDB_STATE_SET(PRINTF_LOCK);
-		spin_lock(&kdb_printf_lock);
-	}
+	else
+		spin_unlock(&kdb_printf_lock);
 
 	diag = kdbgetintenv("LINES", &linecount);
 	if (diag || linecount <= 1)
@@ -592,8 +593,8 @@
 		console_loglevel = saved_loglevel;
 	}
 	if (KDB_STATE(PRINTF_LOCK)) {
-		spin_unlock(&kdb_printf_lock);
 		KDB_STATE_CLEAR(PRINTF_LOCK);
+		spin_unlock(&kdb_printf_lock);
 	}
 	if (do_longjmp)
 #ifdef KDB_HAVE_LONGJMP
