==
do {
if (pending & 1) {
int preempt_count = preempt_count();
h->action(h);
if (preempt_count != preempt_count()) {
printk(KERN_CRIT "BUG: softirq: %p, %x,%x\n",
h->action, preempt_count, preempt_count());
dump_crit_stack();
}
rcu_bh_qsctr_inc(cpu);
}
==
What I am trying to understand is the preempt_count check after h->action(h); statement. Can somebody tell me why such a prempt_count mismatch check is made and why a mismatch is critical?
Thanks,
-nagp