"Interrupt for port %d, but apparently not enabled; per-user %p\n",
             evtchn->port, u);
 
-       disable_irq_nosync(irq);
        evtchn->enabled = false;
 
        spin_lock(&u->ring_prod_lock);
                evtchn = find_evtchn(u, port);
                if (evtchn && !evtchn->enabled) {
                        evtchn->enabled = true;
-                       enable_irq(irq_from_evtchn(port));
+                       xen_irq_lateeoi(irq_from_evtchn(port), 0);
                }
        }
 
        if (rc < 0)
                goto err;
 
-       rc = bind_evtchn_to_irqhandler(port, evtchn_interrupt, 0,
-                                      u->name, evtchn);
+       rc = bind_evtchn_to_irqhandler_lateeoi(port, evtchn_interrupt, 0,
+                                              u->name, evtchn);
        if (rc < 0)
                goto err;