diff options
author | Ingo Molnar <mingo@elte.hu> | 2008-10-17 12:25:43 +0200 |
---|---|---|
committer | Ingo Molnar <mingo@elte.hu> | 2008-10-17 12:25:43 +0200 |
commit | 0f1f6dec9593c8319714c927dafb443548a1452a (patch) | |
tree | 74f887dc86747523e82f08900501073f451996cc /kernel/softirq.c | |
parent | 8cd162ce230b154e564a1285bb5f89fcf73f0dce (diff) | |
parent | 2e532d68a2b3e2aa6b19731501222069735c741c (diff) | |
download | op-kernel-dev-0f1f6dec9593c8319714c927dafb443548a1452a.zip op-kernel-dev-0f1f6dec9593c8319714c927dafb443548a1452a.tar.gz |
Merge branch 'linus' into sched/urgent
Diffstat (limited to 'kernel/softirq.c')
-rw-r--r-- | kernel/softirq.c | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/kernel/softirq.c b/kernel/softirq.c index c506f26..37d67aa 100644 --- a/kernel/softirq.c +++ b/kernel/softirq.c @@ -46,7 +46,7 @@ irq_cpustat_t irq_stat[NR_CPUS] ____cacheline_aligned; EXPORT_SYMBOL(irq_stat); #endif -static struct softirq_action softirq_vec[32] __cacheline_aligned_in_smp; +static struct softirq_action softirq_vec[NR_SOFTIRQS] __cacheline_aligned_in_smp; static DEFINE_PER_CPU(struct task_struct *, ksoftirqd); @@ -205,7 +205,18 @@ restart: do { if (pending & 1) { + int prev_count = preempt_count(); + h->action(h); + + if (unlikely(prev_count != preempt_count())) { + printk(KERN_ERR "huh, entered softirq %td %p" + "with preempt_count %08x," + " exited with %08x?\n", h - softirq_vec, + h->action, prev_count, preempt_count()); + preempt_count() = prev_count; + } + rcu_bh_qsctr_inc(cpu); } h++; |