mirror of
https://github.com/xen-project/xen.git
synced 2026-10-28 02:01:24 +01:00
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@novell.com> Signed-off-by: Christian Limpach <Christian.Limpach@cl.cam.ac.uk>
This commit is contained in:
1 parent
ba4485632d
commit
5196eb3f94
1 file changed
+5
-1
@@ -123,8 +123,10 @@ static void init_evtchn_cpu_bindings(void)
|
||||
#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 @@ asmlinkage void evtchn_do_upcall(struct pt_regs *regs)
|
||||
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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||