Commit 6a1a68c8 authored by Robert Love's avatar Robert Love Committed by Dave Jones

[PATCH] simple preemption debug check

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
parent da6b4703
...@@ -204,7 +204,7 @@ do { \ ...@@ -204,7 +204,7 @@ do { \
#else #else
#define preempt_get_count() do { } while (0) #define preempt_get_count() (0)
#define preempt_disable() do { } while (0) #define preempt_disable() do { } while (0)
#define preempt_enable_no_resched() do {} while(0) #define preempt_enable_no_resched() do {} while(0)
#define preempt_enable() do { } while (0) #define preempt_enable() do { } while (0)
......
...@@ -490,6 +490,11 @@ NORET_TYPE void do_exit(long code) ...@@ -490,6 +490,11 @@ NORET_TYPE void do_exit(long code)
tsk->flags |= PF_EXITING; tsk->flags |= PF_EXITING;
del_timer_sync(&tsk->real_timer); 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: fake_volatile:
acct_process(code); acct_process(code);
__exit_mm(tsk); __exit_mm(tsk);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment