qemu/include
Greg Kurz 94b52958b7 virtio_net: flush uncompleted TX on reset
If the backend could not transmit a packet right away for some reason,
the packet is queued for asynchronous sending. The corresponding vq
element is tracked in the async_tx.elem field of the VirtIONetQueue,
for later freeing when the transmission is complete.

If a reset happens before completion, virtio_net_tx_complete() will push
async_tx.elem back to the guest anyway, and we end up with the inuse flag
of the vq being equal to -1. The next call to virtqueue_pop() is then
likely to fail with "Virtqueue size exceeded".

This can be reproduced easily by starting a guest with an hubport backend
that is not connected to a functional network, eg,

 -device virtio-net-pci,netdev=hub0 -netdev hubport,id=hub0,hubid=0

and no other -netdev hubport,hubid=0 on the command line.

The appropriate fix is to ensure that such an asynchronous transmission
cannot survive a device reset. So for all queues, we first try to send
the packet again, and eventually we purge it if the backend still could
not deliver it.

CC: qemu-stable@nongnu.org
Reported-by: R. Nageswara Sastry <nasastry@in.ibm.com>
Buglink: https://github.com/open-power-host-os/qemu/issues/37
Signed-off-by: Greg Kurz <groug@kaod.org>
Tested-by: R. Nageswara Sastry <nasastry@in.ibm.com>
Signed-off-by: Jason Wang <jasowang@redhat.com>
2018-03-26 14:49:17 +08:00
..
block block/accounting: introduce latency histogram 2018-03-19 14:58:37 -05:00
chardev chardev: introduce chr_machine_done hook 2018-03-12 16:12:46 +01:00
crypto Include less of the generated modular QAPI headers 2018-03-02 13:45:50 -06:00
disas RISC-V Disassembler 2018-03-07 08:30:28 +13:00
exec virtio,vhost,pci,pc: features, cleanups 2018-03-20 15:48:34 +00:00
fpu softfloat: use floatx80_infinity in softfloat 2018-03-04 17:27:35 +01:00
hw mach-virt: Set VM's SMBIOS system version to mc->name 2018-03-23 18:26:46 +00:00
io qio: non-default context for TLS handshake 2018-03-06 10:19:07 +00:00
libdecnumber Clean up ill-advised or unusual header guards 2016-07-12 16:20:46 +02:00
migration migration: add postcopy migration of dirty bitmaps 2018-03-13 17:06:09 -04:00
monitor monitor: unify global init 2018-03-19 14:58:36 -05:00
net virtio_net: flush uncompleted TX on reset 2018-03-26 14:49:17 +08:00
qapi qmp: support out-of-band (oob) execution 2018-03-19 14:58:37 -05:00
qemu compiler: Add QEMU_BUILD_BUG_MSG() macro 2018-03-19 10:00:14 -05:00
qom Use cpu_create(type) instead of cpu_init(cpu_model) 2018-03-19 14:10:36 -03:00
scsi Include qapi/qmp/qdict.h exactly where needed 2018-02-09 13:52:15 +01:00
standard-headers virtio,vhost,pci,pc: features, cleanups 2018-03-20 15:48:34 +00:00
sysemu * Record-replay lockstep execution, log dumper and fixes (Alex, Pavel) 2018-03-16 11:05:03 +00:00
ui console: minimal hotplug suport 2018-03-13 11:17:29 -06:00
elf.h RISC-V ELF Machine Definition 2018-03-07 08:30:28 +13:00
glib-compat.h glib-compat: move G_SOURCE_CONTINUE/REMOVE there 2017-10-10 16:33:55 +02:00
qemu-common.h Move include qemu/option.h from qemu-common.h to actual users 2018-02-09 13:52:16 +01:00
qemu-io.h hmp: Request permissions in qemu-io 2017-02-28 20:47:50 +01:00
trace-tcg.h trace: get rid of generated-events.h/generated-events.c 2016-10-12 09:54:52 +02:00