[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-changelog] [xen-4.0-testing] x86: irq_enter()/irq_exit() covers all of do_IRQ().



# HG changeset patch
# User Keir Fraser <keir.fraser@xxxxxxxxxx>
# Date 1285010157 -3600
# Node ID 1a18ed0a9708ea7b628bf7347442e0cfa1500631
# Parent  6e0ffcd2d9e0c7f2e0cc753e726e07e60b449f69
x86: irq_enter()/irq_exit() covers all of do_IRQ().

Signed-off-by: Keir Fraser <keir.fraser@xxxxxxxxxx>
xen-unstable changeset:   22175:ee3c64073231
xen-unstable date:        Sat Sep 18 08:31:55 2010 +0100
---
 xen/arch/x86/irq.c |   12 +++++-------
 1 files changed, 5 insertions(+), 7 deletions(-)

diff -r 6e0ffcd2d9e0 -r 1a18ed0a9708 xen/arch/x86/irq.c
--- a/xen/arch/x86/irq.c        Fri Sep 17 17:06:57 2010 +0100
+++ b/xen/arch/x86/irq.c        Mon Sep 20 20:15:57 2010 +0100
@@ -539,6 +539,8 @@ asmlinkage void do_IRQ(struct cpu_user_r
         set_irq_regs(old_regs);
         return;
     }
+
+    irq_enter();
 
     desc = irq_to_desc(irq);
 
@@ -573,14 +575,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;
@@ -599,20 +597,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


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.