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:
cl349@firebug.cl.cam.ac.uk committed 2006-02-08 15:36:49 +00:00
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);
}
}
}
}
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.