[PATCH] simple preemption debug check

From: Robert Love (rml@tech9.net)
Date: Wed Apr 03 2002 - 18:54:18 EST


Linus,

This simple check was first suggested by Andrew Morton. Pretty basic -
whines if a task exits with a nonzero preempt_count value.

I put an identical check in the 2.4 preempt-kernel patch and - sure
enough - it was found that XFS essentially disables preemption as it
destroys data structures containing locks without first unlocking. The
SGI folks are working on that.

Anyhow, its a quick and clean solution to debugging potential problems.
Patch is against 2.5.7, please apply.

        Robert Love

diff -urN linux-2.5.7/include/linux/spinlock.h linux/include/linux/spinlock.h
--- linux-2.5.7/include/linux/spinlock.h Mon Mar 18 15:37:15 2002
+++ linux/include/linux/spinlock.h Wed Apr 3 18:46:00 2002
@@ -204,7 +204,7 @@
 
 #else
 
-#define preempt_get_count() do { } while (0)
+#define preempt_get_count() (0)
 #define preempt_disable() do { } while (0)
 #define preempt_enable_no_resched() do {} while(0)
 #define preempt_enable() do { } while (0)
diff -urN linux-2.5.7/kernel/exit.c linux/kernel/exit.c
--- linux-2.5.7/kernel/exit.c Mon Mar 18 15:37:10 2002
+++ linux/kernel/exit.c Wed Apr 3 18:44:24 2002
@@ -492,6 +492,11 @@
         tsk->flags |= PF_EXITING;
         del_timer_sync(&tsk->real_timer);
 
+ if (unlikely(preempt_get_count()))
+ printk(KERN_ERR "error: %s[%d] exited with preempt_count %d\n",
+ current->comm, current->pid,
+ preempt_get_count());
+
 fake_volatile:
 #ifdef CONFIG_BSD_PROCESS_ACCT
         acct_process(code);

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/



This archive was generated by hypermail 2b29 : Sun Apr 07 2002 - 22:00:12 EST