QEMU With E2K User Support
Go to file
Stefan Hajnoczi 68e5ec6400 tap: avoid deadlocking rx
The net subsystem has a control flow mechanism so peer NetClientStates
can tell each other to stop sending packets.  This is used to stop
monitoring the tap file descriptor for incoming packets if the guest rx
ring has no spare buffers.

There is a corner case when tap_can_send() is true at the beginning of
an event loop iteration but becomes false before the tap_send() fd
handler is invoked.

tap_send() will read the packet from the tap file descriptor and attempt
to send it.  The net queue will hold on to the packet and return 0,
indicating that further I/O is not possible.  tap then stops monitoring
the file descriptor for reads.

This is unlike the normal case where tap_can_send() is the same before
and during the event loop iteration.  The event loop would simply not
monitor the file descriptor if tap_can_send() returns true.  Upon next
iteration it would check tap_can_send() again and begin monitoring if we
can send.

The deadlock happens because tap_send() explicitly disabled read_poll.
This is done with the expectation that the peer will call
qemu_net_queue_flush().  But hw/net/virtio-net.c does not monitor
vm_running transitions and issue the flush.  Hence we're left with a
broken tap device.

Cc: qemu-stable@nongnu.org
Reported-by: Neil Skrypuch <neil@tembosocial.com>
Tested-by: Neil Skrypuch <neil@tembosocial.com>
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
2014-03-12 10:12:00 +01:00
audio Add the ability to vary Spice playback and record rates, to facilitate Opus support. 2014-02-03 11:05:15 +01:00
backends ui/sdl2 : initial port to SDL 2.0 (v2.0) 2014-03-05 09:52:05 +01:00
block block/raw-win32: Strip "file:" prefix on creation 2014-03-06 16:18:12 +01:00
bsd-user *-user: Improve documentation for lock_user function 2013-09-20 20:09:24 +04:00
default-configs Add Enhanced Three-Speed Ethernet Controller (eTSEC) 2014-03-05 03:06:45 +01:00
disas libvixl: Fix format strings for several int64_t values 2014-03-10 14:56:29 +00:00
docs qmp: Make Quorum error events more palatable. 2014-02-28 18:59:06 +01:00
dtc@bc895d6d09
fpu softfloat: Support halving the result of muladd operation 2014-02-20 10:35:50 +00:00
fsdev hw/9pfs: Include virtio-9p-device.o in build 2014-03-04 09:20:49 +05:30
gdb-xml target-arm: Support fp registers in gdb stub 2013-12-17 19:42:32 +00:00
hw target-arm queue: 2014-03-11 13:20:23 +00:00
include target-arm queue: 2014-03-11 13:20:23 +00:00
libcacard Add a 'name' parameter to qemu_thread_create 2014-03-09 21:09:38 +02:00
linux-headers update linux headers to kvm/next 2014-02-27 09:50:45 +01:00
linux-user Merge remote-tracking branch 'remotes/riku/linux-user-for-upstream' into staging 2014-03-10 16:22:39 +00:00
net tap: avoid deadlocking rx 2014-03-12 10:12:00 +01:00
pc-bios Update OpenBIOS images 2014-03-10 08:48:31 +00:00
pixman@97336fad32
po po: Update all *.po files 2013-08-07 12:48:00 -05:00
qapi qapi: Add missing null check to opts_start_struct() 2014-03-03 11:17:45 -05:00
qga qga: Remove unneeded include file 2014-03-03 09:46:27 +04:00
qobject qdict: Extract non-QDicts in qdict_array_split() 2014-02-21 22:11:23 +01:00
qom qapi: Add human mode to StringOutputVisitor 2014-02-14 21:12:03 +01:00
roms Update OpenBIOS images 2014-03-10 08:48:31 +00:00
scripts qapi: Clean up null checking in generated visitors 2014-03-03 11:17:20 -05:00
slirp misc: Spelling and grammar fixes in comments 2013-10-26 13:06:45 +04:00
stubs stubs: Optimize dependencies for gdbstub.c 2014-03-02 17:13:31 +04:00
sysconfigs/target
target-alpha exec: Make stl_*_phys input an AddressSpace 2014-02-11 22:57:18 +10:00
target-arm target-arm: Implement WFE as a yield operation 2014-03-10 14:56:30 +00:00
target-cris cris: Add interrupt signals to the CPU device 2014-02-03 14:03:59 +00:00
target-i386 Merge remote-tracking branch 'remotes/kvm/uq/master' into staging 2014-03-11 19:39:17 +00:00
target-lm32 target-lm32: stop VM on illegal or unknown instruction 2014-02-04 19:47:39 +01:00
target-m68k Merge remote-tracking branch 'rth/tcg-pull' into staging 2013-10-11 09:36:52 -07:00
target-microblaze Microblaze: Convert Microblaze-pic handling to GPIOs 2014-01-14 11:08:36 +10:00
target-mips target-mips: add user-mode FR switch support for MIPS32r5 2014-02-10 16:46:38 +01:00
target-moxie cpu: Drop cpu_model_str from CPU_COMMON 2013-10-07 11:48:47 +02:00
target-openrisc target-openrisc: Use new qemu_ld/st opcodes 2014-02-12 08:47:57 +08:00
target-ppc target-ppc: spapr: e500: fix to use cpu_dt_id 2014-03-05 03:07:04 +01:00
target-s390x s390x/virtio-ccw: Adapter interrupt support. 2014-03-05 09:42:05 +01:00
target-sh4 target-sh4: Use new qemu_ld/st opcodes 2013-12-21 16:42:15 +01:00
target-sparc exec: Make stb_phys input an AddressSpace 2014-02-11 22:57:38 +10:00
target-unicore32 exec: Make ldl_*_phys input an AddressSpace 2014-02-11 22:56:54 +10:00
target-xtensa target-xtensa: provide HW confg ID registers 2014-02-24 04:47:02 +04:00
tcg tcg-aarch64: Remove nop from qemu_st slow path 2014-03-08 21:23:25 -08:00
tests acpi-test: issue errors instead of warnings when possible 2014-03-09 21:09:38 +02:00
trace Adapt Makefiles to the new LTTng ust interface 2014-02-19 11:08:53 +01:00
ui minor spice patches. 2014-03-11 13:03:22 +00:00
util qemu-thread-posix: Fix build against older glibc version 2014-03-11 18:19:21 +00:00
.exrc
.gitignore Merge remote-tracking branch 'remotes/bonzini/configure' into staging 2014-02-24 15:38:00 +00:00
.gitmodules Use qemu-project.org domain name 2013-10-11 09:34:56 -07:00
.mailmap Update mailmap 2013-09-05 09:40:31 -05:00
.travis.yml .travis.yml: Add aarch64-* targets 2014-01-08 19:07:20 +00:00
aio-posix.c aio: make aio_poll(ctx, true) block with no fds 2013-12-06 16:53:51 +01:00
aio-win32.c aio: make aio_poll(ctx, true) block with no fds 2013-12-06 16:53:51 +01:00
arch_init.c XBZRLE: Fix qemu crash when resize the xbzrle cache 2014-03-08 22:22:34 +01:00
async.c aio / timers: aio_ctx_prepare sets timeout from AioContext timers 2013-08-22 19:10:28 +02:00
balloon.c
block-migration.c block: per caller dirty bitmap 2013-11-29 13:40:33 +01:00
block.c block: Fix error path segfault in bdrv_open() 2014-03-06 17:29:24 +01:00
blockdev-nbd.c nbd: use BlockDriverState refcnt 2013-09-06 15:25:08 +02:00
blockdev.c blockdev: Fix NULL pointer dereference in blockdev-add 2014-03-06 17:27:28 +01:00
blockjob.c Use error_is_set() only when necessary 2014-02-17 11:57:23 -05:00
bt-host.c
bt-vhci.c
Changelog Use qemu-project.org domain name 2013-10-11 09:34:56 -07:00
CODING_STYLE
configure minor spice patches. 2014-03-11 13:03:22 +00:00
COPYING
COPYING.LIB
coroutine-gthread.c
coroutine-sigaltstack.c
coroutine-ucontext.c
coroutine-win32.c
cpu-exec.c target-arm: Store AIF bits in env->pstate for AArch32 2014-02-26 17:20:06 +00:00
cpus.c Add a 'name' parameter to qemu_thread_create 2014-03-09 21:09:38 +02:00
cputlb.c cpu: Add per-cpu address space 2014-02-11 22:56:37 +10:00
device_tree.c device_tree: qemu_fdt_setprop: Rename val_array arg 2013-12-20 01:58:12 +01:00
device-hotplug.c
disas.c disas: Implement disassembly output for A64 2014-02-08 14:50:48 +00:00
dma-helpers.c aio / timers: Untangle include files 2013-08-22 19:10:27 +02:00
dump.c dump: add 'query-dump-guest-memory-capability' command 2014-02-28 11:52:03 -05:00
exec.c Merge remote-tracking branch 'remotes/kvm/uq/master' into staging 2014-03-11 19:39:17 +00:00
gdbstub.c vl: allow "cont" from panicked state 2013-11-04 15:39:41 +02:00
HACKING HACKING: Document vaddr type usage 2013-07-23 02:41:31 +02:00
hmp-commands.hx block: update block commit documentation regarding image truncation 2014-01-24 16:12:49 +01:00
hmp.c dump: make kdump-compressed format available for 'dump-guest-memory' 2014-02-28 11:52:03 -05:00
hmp.h monitor: add object-add (QMP) and object_add (HMP) command 2014-01-06 13:45:47 -05:00
iohandler.c
ioport.c portio: Allow to mark portio lists as coalesced MMIO flushing 2013-10-17 17:24:15 +02:00
kvm-all.c Merge remote-tracking branch 'remotes/kvm/uq/master' into staging 2014-03-11 19:39:17 +00:00
kvm-stub.c kvm: Add a new machine option kvm-type 2014-03-05 03:06:24 +01:00
LICENSE LICENSE: clarify 2013-08-12 09:15:12 -05:00
main-loop.c slirp: set mainloop timeout with more precise value 2013-09-17 12:26:05 +02:00
MAINTAINERS acpi,pc,pci,virtio,memory bug fixes 2014-03-10 19:14:11 +00:00
Makefile build: Fix installation of target-dependent files 2014-03-08 12:08:11 +00:00
Makefile.objs hw/9pfs: Include virtio-9p-device.o in build 2014-03-04 09:20:49 +05:30
Makefile.target build: softmmu targets do not have a "main.o" file 2014-02-20 13:14:18 +01:00
memory_mapping.c cpu: Use QTAILQ for CPU list 2013-09-03 12:25:55 +02:00
memory.c memory_region_present: return false if address is not found in child MemoryRegion 2014-03-09 21:09:37 +02:00
migration-exec.c aio / timers: Untangle include files 2013-08-22 19:10:27 +02:00
migration-fd.c aio / timers: Untangle include files 2013-08-22 19:10:27 +02:00
migration-rdma.c rdma: rename 'x-rdma' => 'rdma' 2014-02-25 14:30:28 +01:00
migration-tcp.c aio / timers: Untangle include files 2013-08-22 19:10:27 +02:00
migration-unix.c aio / timers: Untangle include files 2013-08-22 19:10:27 +02:00
migration.c Add a 'name' parameter to qemu_thread_create 2014-03-09 21:09:38 +02:00
module-common.c module: implement module loading 2014-02-20 13:14:18 +01:00
monitor.c input: mouse: switch monitor to new core 2014-03-05 09:52:03 +01:00
nbd.c nbd: move socket wrappers to qemu-nbd 2014-02-21 21:02:23 +01:00
os-posix.c util: Split out exec_dir from os_find_datadir 2014-02-20 13:12:54 +01:00
os-win32.c util: Split out exec_dir from os_find_datadir 2014-02-20 13:12:54 +01:00
page_cache.c Fix two XBZRLE corruption issues 2014-02-25 14:30:28 +01:00
qapi-schema.json input: qapi: add pause key 2014-03-05 09:50:17 +01:00
qdev-monitor.c qdev-monitor: set DeviceState opts before calling realize 2014-02-26 10:32:40 -07:00
qdict-test-data.txt
qemu-bridge-helper.c
qemu-char.c qmp: expose list of supported character device backends 2014-02-17 11:57:23 -05:00
qemu-coroutine-io.c aio / timers: Untangle include files 2013-08-22 19:10:27 +02:00
qemu-coroutine-lock.c coroutine: remove qemu_co_queue_wait_insert_head 2013-12-02 17:11:49 +01:00
qemu-coroutine-sleep.c coroutine: add co_aio_sleep_ns() to allow sleep in block drivers 2013-10-30 12:22:09 +01:00
qemu-coroutine.c coroutine: add ./configure --disable-coroutine-pool 2013-09-12 10:12:48 +02:00
qemu-doc.texi Describe flaws in qcow/qcow2 encryption in the docs 2014-01-31 22:05:03 +01:00
qemu-file.c qemu_file: Fix mismerge of "use fwrite() correctly" 2014-03-08 22:22:34 +01:00
qemu-img-cmds.hx qemu-img: add -l for snapshot in convert 2013-12-04 15:19:00 +01:00
qemu-img.c qemu-img convert: Fix progress output 2014-03-05 15:58:32 +01:00
qemu-img.texi Describe flaws in qcow/qcow2 encryption in the docs 2014-01-31 22:05:03 +01:00
qemu-io-cmds.c qemu-io: New command 'sleep' 2014-01-24 17:40:03 +01:00
qemu-io.c Block patches 2014-02-25 10:50:11 +00:00
qemu-log.c
qemu-nbd.c Block patches 2014-02-25 10:50:11 +00:00
qemu-nbd.texi qemu-nbd: add doc for option -f 2013-12-04 15:19:00 +01:00
qemu-options-wrapper.h
qemu-options.h
qemu-options.hx Add 'debug-threads' suboption to --name 2014-03-09 21:09:37 +02:00
qemu-seccomp.c seccomp: add some basic shared memory syscalls to the whitelist 2014-01-20 11:19:34 -02:00
qemu-tech.texi
qemu-timer.c timer: add timer_mod_anticipate and timer_mod_anticipate_ns 2013-10-17 17:31:00 +02:00
qemu.nsi nsis: Improved support for parallel installation of 32 and 64 bit code 2013-11-07 07:02:44 +01:00
qemu.sasl Fix command example in qemu.sasl 2013-07-19 12:52:03 +04:00
qmp-commands.hx dump: add 'query-dump-guest-memory-capability' command 2014-02-28 11:52:03 -05:00
qmp.c object: Report type in error when not user creatable. 2014-03-02 17:12:41 +04:00
qtest.c kvm: Add a new machine option kvm-type 2014-03-05 03:06:24 +01:00
README Use qemu-project.org domain name 2013-10-11 09:34:56 -07:00
rules.mak module: implement module loading 2014-02-20 13:14:18 +01:00
savevm.c migration: extend section_start/end traces 2014-03-08 22:22:34 +01:00
spice-qemu-char.c spice: hook qemu_chr_fe_set_open() event to ports 2014-02-03 11:05:15 +01:00
tcg-runtime.c
tci.c misc: Use new rotate functions 2013-09-25 21:23:05 +02:00
thread-pool.c Add a 'name' parameter to qemu_thread_create 2014-03-09 21:09:38 +02:00
thunk.c
tpm.c Use error_is_set() only when necessary 2014-02-17 11:57:23 -05:00
trace-events migration: extend section_start/end traces 2014-03-08 22:22:34 +01:00
translate-all.c exec: Make tb_invalidate_phys_addr input an AS 2014-02-11 22:55:55 +10:00
translate-all.h split definitions for exec.c and translate-all.c radix trees 2013-12-10 12:29:56 +02:00
user-exec.c linux-user: fix segmentation fault passing with h2g(x) != x 2013-07-23 17:28:28 +03:00
VERSION Open 2.0 development tree 2013-11-27 14:02:45 -08:00
version.rc Use qemu-project.org domain name 2013-10-11 09:34:56 -07:00
vl.c acpi,pc,pci,virtio,memory bug fixes 2014-03-10 19:14:11 +00:00
vmstate.c Fix vmstate_info_int32_le comparison/assign 2014-02-25 14:30:28 +01:00
xbzrle.c
xen-all.c kvm: Add a new machine option kvm-type 2014-03-05 03:06:24 +01:00
xen-mapcache.c
xen-stub.c kvm: Add a new machine option kvm-type 2014-03-05 03:06:24 +01:00

Read the documentation in qemu-doc.html or on http://wiki.qemu-project.org

- QEMU team