summaryrefslogtreecommitdiffstats
path: root/kernel/softirq.c
diff options
context:
space:
mode:
authorIngo Molnar <mingo@elte.hu>2008-10-17 12:25:43 +0200
committerIngo Molnar <mingo@elte.hu>2008-10-17 12:25:43 +0200
commit0f1f6dec9593c8319714c927dafb443548a1452a (patch)
tree74f887dc86747523e82f08900501073f451996cc /kernel/softirq.c
parent8cd162ce230b154e564a1285bb5f89fcf73f0dce (diff)
parent2e532d68a2b3e2aa6b19731501222069735c741c (diff)
downloadop-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.c13
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++;
OpenPOWER on IntegriCloud