qemu/hw
Hans de Goede e449f26bed ehci_free_packet: Discard finished packets when the queue is halted
With pipelining it is possible to encounter a finished packet when cleaning
the queue due to a halt. This happens when a non stall error happens while
talking to a real device. In this case the queue on the usb-host side will
continue processing packets, and we can have completed packets waiting in
the queue after an error condition packet causing a halt.

There are 2 reasons to discard the completed packets at this point, rather
then trying to writing them back to the guest:

1) The guest expect to be able to cancel and/or change packets after the
packet with the error without doing an unlink, so writing them back may
confuse the guest.

2) Since the queue does not advance when halted, the writing back of these
packets will fail anyways since p->qtdaddr != q->qtdaddr, so the
ehci_verify_qtd call in ehci_writeback_async_complete_packet will fail.

Note that 2) means that then only functional change this patch introduces
is the printing of a warning when this scenario happens.

Note that discarding these packets means that the guest driver and the device
will get out of sync! This is unfortunate, but should not be a problem since
with a non stall error (iow an io-error) the 2 are out of sync already anyways.
Still this patch adds a warning to signal this happening.

Note that sofar this has only been seen with a DVB-T receiver, which gives
of a MPEG-2 stream, which allows for recovering from lost packets, see:
https://bugzilla.redhat.com/show_bug.cgi?id=890320

Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
2013-04-23 08:43:10 +02:00
..
9pfs virtio-9p: Fix virtio-9p no longer building after hw-dirs branch merge 2013-04-09 07:47:00 -05:00
acpi hw: move target-independent files to subdirectories 2013-04-08 18:13:12 +02:00
alpha include: avoid useless includes of exec/ headers 2013-04-15 18:19:26 +02:00
arm Merge branch 'arm-devs.next' of git://git.linaro.org/people/pmaydell/qemu-arm 2013-04-20 11:39:08 +00:00
audio Remove unneeded type casts 2013-04-19 11:36:33 +02:00
block qdev: Drop taddr properties 2013-04-20 17:54:52 +00:00
bt sysemu: avoid proliferation of include/ subdirectories 2013-04-15 18:19:25 +02:00
char virtio-console: Remove any pending watches on close 2013-04-16 11:52:09 +02:00
core qdev: Drop taddr properties 2013-04-20 17:54:52 +00:00
cpu hw: move ARM CPU cores to hw/cpu/, configure with default-configs/ 2013-04-08 18:13:16 +02:00
cris hw: move private headers to hw/ subdirectories. 2013-04-08 18:13:16 +02:00
display qdev: Drop taddr properties 2013-04-20 17:54:52 +00:00
dma qdev: Drop taddr properties 2013-04-20 17:54:52 +00:00
gpio Remove unneeded type casts 2013-04-19 11:36:33 +02:00
i2c hw: move private headers to hw/ subdirectories. 2013-04-08 18:13:16 +02:00
i386 kvmvapic: Replace FROM_SYSBUS() with QOM type cast 2013-04-16 01:19:46 +02:00
ide Merge remote-tracking branch 'bonzini/hw-dirs' into staging 2013-04-15 17:06:04 -05:00
input arm: fix location of some include files 2013-04-15 15:16:01 +02:00
intc ioapic: Replace FROM_SYSBUS() with QOM type cast 2013-04-16 01:19:46 +02:00
isa sysemu: avoid proliferation of include/ subdirectories 2013-04-15 18:19:25 +02:00
lm32 qdev: Drop taddr properties 2013-04-20 17:54:52 +00:00
m68k hw: move char devices to hw/char/, configure via default-configs/ 2013-04-08 18:13:14 +02:00
microblaze Remove unneeded type casts 2013-04-19 11:36:33 +02:00
mips sysemu: avoid proliferation of include/ subdirectories 2013-04-15 18:19:25 +02:00
misc Merge remote-tracking branch 'stefanha/trivial-patches' into staging 2013-04-19 08:38:16 -05:00
moxie hw: move MC146818RTC to hw/timer/, configure via default-configs/ 2013-04-08 18:13:13 +02:00
net qdev: Drop taddr properties 2013-04-20 17:54:52 +00:00
nvram hw: move NVRAM interfaces to hw/nvram/, configure with default-configs/ 2013-04-08 18:13:16 +02:00
openrisc hw: move headers to include/ 2013-04-08 18:13:10 +02:00
pci hw: move PCI bridges to hw/pci-* or hw/ARCH 2013-04-08 18:13:14 +02:00
pci-bridge hw: move private headers to hw/ subdirectories. 2013-04-08 18:13:16 +02:00
pci-host hw/versatile_pci: Drop unnecessary vpb_pci_config_addr() 2013-04-19 11:15:21 +01:00
ppc Remove unneeded type casts 2013-04-19 11:36:33 +02:00
s390x vhost-scsi-s390: new device supporting the tcm_vhost Linux kernel module 2013-04-19 16:19:13 +02:00
scsi vhost-scsi: new device supporting the tcm_vhost Linux kernel module 2013-04-19 16:18:11 +02:00
sd Typo, spelling and grammatical fixes 2013-04-12 14:33:20 +02:00
sh4 arm: fix location of some include files 2013-04-15 15:16:01 +02:00
sparc qdev: Drop taddr properties 2013-04-20 17:54:52 +00:00
sparc64 hw: move PCI bridges to hw/pci-* or hw/ARCH 2013-04-08 18:13:14 +02:00
ssi hw: move SSI controllers to hw/ssi/, configure via default-configs/ 2013-04-08 18:13:13 +02:00
timer arm: fix location of some include files 2013-04-15 15:16:01 +02:00
tpm tpm: Simplify creation of cancel path 2013-04-22 09:30:13 -05:00
unicore32 console: add GraphicHwOps 2013-04-16 09:03:49 +02:00
usb ehci_free_packet: Discard finished packets when the queue is halted 2013-04-23 08:43:10 +02:00
virtio Merge remote-tracking branch 'bonzini/scsi-next' into staging 2013-04-22 08:05:05 -05:00
watchdog hw: move watchdogs to hw/watchdog, configure via default-configs/ 2013-04-08 18:13:13 +02:00
xen sysemu: avoid proliferation of include/ subdirectories 2013-04-15 18:19:25 +02:00
xtensa sysemu: avoid proliferation of include/ subdirectories 2013-04-15 18:19:25 +02:00
Makefile.objs virtio: simplify Makefile conditionals 2013-04-19 16:18:11 +02:00