diff --git a/sys/dev/xen/bus/xen_intr.c b/sys/dev/xen/bus/xen_intr.c --- a/sys/dev/xen/bus/xen_intr.c +++ b/sys/dev/xen/bus/xen_intr.c @@ -344,9 +344,9 @@ * \param trap_frame The trap frame context for the current interrupt. */ int -xen_intr_handle_upcall(void *unused __unused) +xen_intr_handle_upcall(void *data) { - struct trapframe *trap_frame = curthread->td_intr_frame; + struct trapframe *trap_frame = data; u_int l1i, l2i, port, cpu __diagused; u_long masked_l1, masked_l2; struct xenisrc *isrc; diff --git a/sys/x86/xen/xen_arch_intr.c b/sys/x86/xen/xen_arch_intr.c --- a/sys/x86/xen/xen_arch_intr.c +++ b/sys/x86/xen/xen_arch_intr.c @@ -81,7 +81,6 @@ void xen_arch_intr_handle_upcall(struct trapframe *trap_frame) { - struct trapframe *old; /* * Disable preemption in order to always check and fire events @@ -91,14 +90,7 @@ ++*DPCPU_GET(pintrcnt); - ++curthread->td_intr_nesting_level; - old = curthread->td_intr_frame; - curthread->td_intr_frame = trap_frame; - - xen_intr_handle_upcall(NULL); - - curthread->td_intr_frame = old; - --curthread->td_intr_nesting_level; + xen_intr_handle_upcall(trap_frame); if (xen_evtchn_needs_ack) lapic_eoi();