I was seeing bus disconnects when not clearing port resume bit properly.port->ctrl&= ~(val& 0x000a); + port->ctrl&= ~(port->ctrl& 0x0040); /* clear port resume detected */ }This chunk looks suspicious ... I suspect the port suspend/resume emulation isn't complete.
The bug is that the port resume bit is masked out from guest writes, so the guest hasn't a chance to clear it ...
cheers, Gerd PS: http://cgit.freedesktop.org/spice/qemu/log/?h=usb.1