ia64/xen-unstable

changeset 8792:a67085a3e65d

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>
author cl349@firebug.cl.cam.ac.uk
date Wed Feb 08 15:36:49 2006 +0000 (2006-02-08)
parents 1a2e7cd58ca0
children 4657e299a1a3
files linux-2.6-xen-sparse/drivers/xen/core/evtchn.c
line diff
     1.1 --- a/linux-2.6-xen-sparse/drivers/xen/core/evtchn.c	Wed Feb 08 15:31:38 2006 +0000
     1.2 +++ b/linux-2.6-xen-sparse/drivers/xen/core/evtchn.c	Wed Feb 08 15:36:49 2006 +0000
     1.3 @@ -123,8 +123,10 @@ static void init_evtchn_cpu_bindings(voi
     1.4  #ifdef CONFIG_X86
     1.5  extern fastcall unsigned int do_IRQ(struct pt_regs *regs);
     1.6  #if defined (__i386__)
     1.7 +static inline void exit_idle(void) {}
     1.8  #define IRQ_REG orig_eax
     1.9  #elif defined (__x86_64__)
    1.10 +#include <asm/idle.h>
    1.11  #define IRQ_REG orig_rax
    1.12  #endif
    1.13  #define do_IRQ(irq, regs) do {			\
    1.14 @@ -170,8 +172,10 @@ asmlinkage void evtchn_do_upcall(struct 
    1.15  			port = (l1i * BITS_PER_LONG) + l2i;
    1.16  			if ((irq = evtchn_to_irq[port]) != -1)
    1.17  				do_IRQ(irq, regs);
    1.18 -			else
    1.19 +			else {
    1.20 +				exit_idle();
    1.21  				evtchn_device_upcall(port);
    1.22 +			}
    1.23  		}
    1.24  	}
    1.25  }