Message ID | 33183CC9F5247A488A2544077AF19020815E7FD4@SZXEMA503-MBS.china.huawei.com |
---|---|
State | New |
Headers | show |
Hi, > BTW, in usb_release_port(), the detached port should be insert > the head of bus->free list table. Because of the save/restore will > cause qemu crash, after hot plug/hot unplug multi times. For example, > save the port '2' to memory file, but when we restore it, the port will > be assign to '1' over again, which not match with the memory file, > and then crash qemu. If you want hotplug and live migration play well you have to explicitly assign devices ports, i.e. -device usb-host,port=2,$args Otherwise it will simply not work reliable. cheers, Gerd
> -----Original Message----- > From: Gerd Hoffmann [mailto:kraxel@redhat.com] > Sent: Tuesday, May 13, 2014 2:56 PM > > > BTW, in usb_release_port(), the detached port should be insert > > the head of bus->free list table. Because of the save/restore will > > cause qemu crash, after hot plug/hot unplug multi times. For example, > > save the port '2' to memory file, but when we restore it, the port will > > be assign to '1' over again, which not match with the memory file, > > and then crash qemu. > > If you want hotplug and live migration play well you have to explicitly > assign devices ports, i.e. > > -device usb-host,port=2,$args > > Otherwise it will simply not work reliable. > Yep, I have noticed that case, which pass-through two USB devices, and then hot-unplug the first one, then save/restore, which will also crash qemu. So maybe assign ports ahead was the exclusive method. Thanks, Best regards, -Gonglei
diff --git a/hw/usb/bus.c b/hw/usb/bus.c index e48b19f..4e6ccad 100644 --- a/hw/usb/bus.c +++ b/hw/usb/bus.c @@ -442,7 +442,7 @@ void usb_release_port(USBDevice *dev) dev->port = NULL; port->dev = NULL; - QTAILQ_INSERT_TAIL(&bus->free, port, next); + QTAILQ_INSERT_HEAD(&bus->free, port, next); bus->nfree++; }