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); +driver_filter_t xen_intr_handle_upcall; /** * 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 @@ -491,9 +491,11 @@ * * \param trap_frame The trap frame context for the current interrupt. */ -void -xen_intr_handle_upcall(struct trapframe *trap_frame) +int +xen_intr_handle_upcall(void *_trap_frame) { + struct trapframe *trap_frame = _trap_frame; + u_int l1i, l2i, port, cpu; u_long masked_l1, masked_l2; struct xenisrc *isrc; @@ -594,10 +596,14 @@ } } +#if defined(__amd64__) || defined(__i386__) if (xen_evtchn_needs_ack) lapic_eoi(); +#endif critical_exit(); + + return (FILTER_HANDLED); } static int