usb: Don't allow USB_RET_ASYNC for interrupt packets
commitbe41efde3ca0372dbf7543e09ff473b4eec25057
authorHans de Goede <hdegoede@redhat.com>
Sat, 17 Nov 2012 11:47:15 +0000 (17 12:47 +0100)
committerGerd Hoffmann <kraxel@redhat.com>
Tue, 4 Dec 2012 13:41:54 +0000 (4 14:41 +0100)
tree56fc5bf4190b7f73613fc4097ca6ad295bd69a98
parent8beba9304391189666df1b62b23a5101b3831317
usb: Don't allow USB_RET_ASYNC for interrupt packets

It is tempting to use USB_RET_ASYNC for interrupt packets, rather then the
current NAK + polling approach, but this causes issues for migration, as
an async completed packet will not getting written back to guest memory until
the next poll time, and if a migration happens in between it will get lost!

Make an exception for host devices, because:
1) host-linux actually uses async completion for interrupt endpoints
2) host devices don't migrate anyways

Ideally we would convert host-linux.c to handle (input) interrupt endpoints in
a buffered manner like it does for isoc endpoints, keeping multiple urbs
submitted to ensure the devices timing requirements are met, as well as making
its interrupt ep handling the same as other usb-devices.

Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
hw/usb.h
hw/usb/core.c
hw/usb/host-bsd.c
hw/usb/host-linux.c