# HG changeset patch # User Keir Fraser # Date 1284795115 -3600 # Node ID ee3c640732311ef6bc5e2de56c3b4b753cb020fa # Parent 632c02167f97bb2bd25571b2780425b9b75949b4 x86: irq_enter()/irq_exit() covers all of do_IRQ(). Signed-off-by: Keir Fraser --- a/xen/arch/x86/irq.c +++ b/xen/arch/x86/irq.c @@ -535,6 +535,8 @@ asmlinkage void do_IRQ(struct cpu_user_r return; } + irq_enter(); + desc = irq_to_desc(irq); spin_lock(&desc->lock); @@ -568,14 +570,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; @@ -594,20 +592,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); }