# HG changeset patch
# User Keir Fraser <keir.fraser@xxxxxxxxxx>
# Date 1284795115 -3600
# Node ID ee3c640732311ef6bc5e2de56c3b4b753cb020fa
# Parent 632c02167f97bb2bd25571b2780425b9b75949b4
x86: irq_enter()/irq_exit() covers all of do_IRQ().
Signed-off-by: Keir Fraser <keir.fraser@xxxxxxxxxx>
---
xen/arch/x86/irq.c | 12 +++++-------
1 files changed, 5 insertions(+), 7 deletions(-)
diff -r 632c02167f97 -r ee3c64073231 xen/arch/x86/irq.c
--- a/xen/arch/x86/irq.c Fri Sep 17 16:59:21 2010 +0100
+++ b/xen/arch/x86/irq.c Sat Sep 18 08:31:55 2010 +0100
@@ -547,6 +547,8 @@ asmlinkage void do_IRQ(struct cpu_user_r
set_irq_regs(old_regs);
return;
}
+
+ irq_enter();
desc = irq_to_desc(irq);
@@ -581,14 +583,10 @@ asmlinkage void do_IRQ(struct cpu_user_r
desc->rl_quantum_start = now;
}
- irq_enter();
tsc_in = tb_init_done ? get_cycles() : 0;
__do_IRQ_guest(irq);
TRACE_3D(TRC_TRACE_IRQ, irq, tsc_in, get_cycles());
- irq_exit();
- spin_unlock(&desc->lock);
- set_irq_regs(old_regs);
- return;
+ goto out_no_end;
}
desc->status &= ~IRQ_REPLAY;
@@ -607,20 +605,20 @@ asmlinkage void do_IRQ(struct cpu_user_r
while ( desc->status & IRQ_PENDING )
{
desc->status &= ~IRQ_PENDING;
- irq_enter();
spin_unlock_irq(&desc->lock);
tsc_in = tb_init_done ? get_cycles() : 0;
action->handler(irq, action->dev_id, regs);
TRACE_3D(TRC_TRACE_IRQ, irq, tsc_in, get_cycles());
spin_lock_irq(&desc->lock);
- irq_exit();
}
desc->status &= ~IRQ_INPROGRESS;
out:
desc->handler->end(irq);
+ out_no_end:
spin_unlock(&desc->lock);
+ irq_exit();
set_irq_regs(old_regs);
}
_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog
|