Index: sys/xen/xen_intr.h =================================================================== --- sys/xen/xen_intr.h +++ sys/xen/xen_intr.h @@ -38,7 +38,7 @@ /** Registered Xen interrupt callback handle. */ typedef void * xen_intr_handle_t; -void xen_intr_handle_upcall(struct trapframe *trap_frame); +int xen_intr_handle_upcall(struct trapframe *trap_frame); /** * Associate an already allocated local event channel port an interrupt Index: sys/xen/xen_intr.c =================================================================== --- sys/xen/xen_intr.c +++ sys/xen/xen_intr.c @@ -488,7 +488,7 @@ * * \param trap_frame The trap frame context for the current interrupt. */ -void +int xen_intr_handle_upcall(struct trapframe *trap_frame) { u_int l1i, l2i, port, cpu; @@ -591,10 +591,14 @@ } } +#if defined(__amd64__) || defined(__i386__) if (xen_evtchn_needs_ack) lapic_eoi(); +#endif critical_exit(); + + return (FILTER_HANDLED); } static int