git://git.onelab.eu
/
linux-2.6.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
vserver 1.9.3
[linux-2.6.git]
/
kernel
/
softirq.c
diff --git
a/kernel/softirq.c
b/kernel/softirq.c
index
c336ae2
..
4a3da9b
100644
(file)
--- a/
kernel/softirq.c
+++ b/
kernel/softirq.c
@@
-15,6
+15,7
@@
#include <linux/percpu.h>
#include <linux/cpu.h>
#include <linux/kthread.h>
#include <linux/percpu.h>
#include <linux/cpu.h>
#include <linux/kthread.h>
+#include <linux/rcupdate.h>
#include <asm/irq.h>
/*
#include <asm/irq.h>
/*
@@
-75,10
+76,12
@@
asmlinkage void __do_softirq(void)
struct softirq_action *h;
__u32 pending;
int max_restart = MAX_SOFTIRQ_RESTART;
struct softirq_action *h;
__u32 pending;
int max_restart = MAX_SOFTIRQ_RESTART;
+ int cpu;
pending = local_softirq_pending();
local_bh_disable();
pending = local_softirq_pending();
local_bh_disable();
+ cpu = smp_processor_id();
restart:
/* Reset the pending bitmask before enabling irqs */
local_softirq_pending() = 0;
restart:
/* Reset the pending bitmask before enabling irqs */
local_softirq_pending() = 0;
@@
-88,8
+91,10
@@
restart:
h = softirq_vec;
do {
h = softirq_vec;
do {
- if (pending & 1)
+ if (pending & 1)
{
h->action(h);
h->action(h);
+ rcu_bh_qsctr_inc(cpu);
+ }
h++;
pending >>= 1;
} while (pending);
h++;
pending >>= 1;
} while (pending);