Messages in this thread Patch in this message | | | Subject | [PATCH] simple preemption debug check | From | Robert Love <> | Date | 03 Apr 2002 18:54:18 -0500 |
| |
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/
| |