aboutsummaryrefslogtreecommitdiffstats
path: root/xen/common/softirq.c
diff options
context:
space:
mode:
authorkaf24@freefall.cl.cam.ac.uk <kaf24@freefall.cl.cam.ac.uk>2004-11-01 17:51:58 +0000
committerkaf24@freefall.cl.cam.ac.uk <kaf24@freefall.cl.cam.ac.uk>2004-11-01 17:51:58 +0000
commit8ad6d3829b5372c4cfa1962273ee5211982b2f17 (patch)
treea6e7ea260427af9b26b691efd8bfaa5d3e4b4171 /xen/common/softirq.c
parent28cb0115df3b6d2a4558d1323bf1be1407472548 (diff)
downloadxen-8ad6d3829b5372c4cfa1962273ee5211982b2f17.tar.gz
xen-8ad6d3829b5372c4cfa1962273ee5211982b2f17.tar.bz2
xen-8ad6d3829b5372c4cfa1962273ee5211982b2f17.zip
bitkeeper revision 1.1159.1.326 (418677bearNwfvI3AaLxMG1OKQfO9A)
Better do_softirq(). We know that there is at least one softirq pending on entry, so we cget rid of the initial test for zero.
Diffstat (limited to 'xen/common/softirq.c')
-rw-r--r--xen/common/softirq.c8
1 files changed, 5 insertions, 3 deletions
diff --git a/xen/common/softirq.c b/xen/common/softirq.c
index 166a8163c1..7c7e6cc636 100644
--- a/xen/common/softirq.c
+++ b/xen/common/softirq.c
@@ -23,12 +23,14 @@ asmlinkage void do_softirq()
{
unsigned int i, pending, cpu = smp_processor_id();
- while ( (pending = softirq_pending(cpu)) != 0 )
- {
+ pending = softirq_pending(cpu);
+ ASSERT(pending != 0);
+
+ do {
i = find_first_set_bit(pending);
clear_bit(i, &softirq_pending(cpu));
(*softirq_handlers[i])();
- }
+ } while ( (pending = softirq_pending(cpu)) != 0 );
}
void open_softirq(int nr, softirq_handler handler)