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

[Xen-changelog] x86-64 linux: properly exit idle mode from evtchn_do_upcall()



# HG changeset patch
# User cl349@xxxxxxxxxxxxxxxxxxxx
# Node ID a67085a3e65d7a8ff8afaa2fbe6b315027b827fb
# Parent  1a2e7cd58ca0df9a9c10631e60474f0dc0dfc659
x86-64 linux: properly exit idle mode from evtchn_do_upcall()
Add a call to exit_idle() when evtchn_do_upcall() calls
evtchn_device_upcall() instead of do_IRQ().

From: Jan Beulich <JBeulich@xxxxxxxxxx>
Signed-off-by: Christian Limpach <Christian.Limpach@xxxxxxxxxxxx>

diff -r 1a2e7cd58ca0 -r a67085a3e65d 
linux-2.6-xen-sparse/drivers/xen/core/evtchn.c
--- a/linux-2.6-xen-sparse/drivers/xen/core/evtchn.c    Wed Feb  8 15:31:38 2006
+++ b/linux-2.6-xen-sparse/drivers/xen/core/evtchn.c    Wed Feb  8 15:36:49 2006
@@ -123,8 +123,10 @@
 #ifdef CONFIG_X86
 extern fastcall unsigned int do_IRQ(struct pt_regs *regs);
 #if defined (__i386__)
+static inline void exit_idle(void) {}
 #define IRQ_REG orig_eax
 #elif defined (__x86_64__)
+#include <asm/idle.h>
 #define IRQ_REG orig_rax
 #endif
 #define do_IRQ(irq, regs) do {                 \
@@ -170,8 +172,10 @@
                        port = (l1i * BITS_PER_LONG) + l2i;
                        if ((irq = evtchn_to_irq[port]) != -1)
                                do_IRQ(irq, regs);
-                       else
+                       else {
+                               exit_idle();
                                evtchn_device_upcall(port);
+                       }
                }
        }
 }

_______________________________________________
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®.