6f9d9cf
diff --git a/hw/usb-hub.c b/hw/usb-hub.c
6f9d9cf
index b49a2fe..6278825 100644
6f9d9cf
--- a/hw/usb-hub.c
6f9d9cf
+++ b/hw/usb-hub.c
6f9d9cf
@@ -207,10 +207,14 @@ static void usb_hub_complete(USBPort *port, USBPacket *packet)
6f9d9cf
     /*
6f9d9cf
      * Just pass it along upstream for now.
6f9d9cf
      *
6f9d9cf
-     * If we ever inplement usb 2.0 split transactions this will
6f9d9cf
+     * If we ever implement usb 2.0 split transactions this will
6f9d9cf
      * become a little more complicated ...
6f9d9cf
+     *
6f9d9cf
+     * Can't use usb_packet_complete() here because packet->owner is
6f9d9cf
+     * cleared already, go call the ->complete() callback directly
6f9d9cf
+     * instead.
6f9d9cf
      */
6f9d9cf
-    usb_packet_complete(&s->dev, packet);
6f9d9cf
+    s->dev.port->ops->complete(s->dev.port, packet);
6f9d9cf
 }
6f9d9cf
 
6f9d9cf
 static void usb_hub_handle_attach(USBDevice *dev)