QEMU With E2K User Support
Go to file
Denis V. Lunev 60be634079 migration: fix deadlock
Release qemu global mutex before call synchronize_rcu().
synchronize_rcu() waiting for all readers to finish their critical
sections. There is at least one critical section in which we try
to get QGM (critical section is in address_space_rw() and
prepare_mmio_access() is trying to aquire QGM).

Both functions (migration_end() and migration_bitmap_extend())
are called from main thread which is holding QGM.

Thus there is a race condition that ends up with deadlock:
main thread     working thread
Lock QGA                |
|             Call KVM_EXIT_IO handler
|                       |
|        Open rcu reader's critical section
Migration cleanup bh    |
|                       |
synchronize_rcu() is    |
waiting for readers     |
|            prepare_mmio_access() is waiting for QGM
  \                   /
         deadlock

The patch changes bitmap freeing from direct g_free after synchronize_rcu
to free inside call_rcu.

Signed-off-by: Denis V. Lunev <den@openvz.org>
Reported-by: Igor Redko <redkoi@virtuozzo.com>
Tested-by: Igor Redko <redkoi@virtuozzo.com>
Reviewed-by: Paolo Bonzini <pbonzini@redhat.com>
Reviewed-by: Juan Quintela <quintela@redhat.com>
Signed-off-by: Juan Quintela <quintela@redhat.com>

CC: Anna Melekhova <annam@virtuozzo.com>
CC: Juan Quintela <quintela@redhat.com>
CC: Amit Shah <amit.shah@redhat.com>
CC: Paolo Bonzini <pbonzini@redhat.com>
CC: Wen Congyang <wency@cn.fujitsu.com>
2015-10-15 08:14:13 +02:00
audio ossaudio: fix memory leak 2015-07-08 13:11:01 +02:00
backends qemu-char: Use g_new() & friends where that makes obvious sense 2015-09-16 17:33:33 +02:00
block block: switch from g_slice allocator to malloc 2015-10-12 11:17:45 +01:00
bsd-user s/cpu_get_real_ticks/cpu_get_host_ticks/ 2015-10-08 19:46:01 +03:00
crypto crypto: introduce new module for handling TLS sessions 2015-09-15 15:07:43 +01:00
default-configs icc_bus: drop the unused files 2015-10-02 16:22:02 -03:00
disas disas/cris: Fix typo in comment 2015-10-01 17:24:02 -07:00
docs qapi: Consistent generated code: prefer visitor 'v' 2015-10-12 18:46:49 +02:00
dtc@65cc4d2748
fpu
fsdev maint: remove unused include for dirent.h 2015-09-11 10:21:38 +03:00
gdb-xml s390x/gdb: expose virtualization specific registers 2015-10-02 13:31:52 +02:00
hw Pull request 2015-10-12 15:52:54 +01:00
include Pull request 2015-10-12 15:52:54 +01:00
libdecnumber typofixes - v4 2015-09-11 10:45:43 +03:00
linux-headers vhost: rename VHOST_RESET_OWNER to VHOST_RESET_DEVICE 2015-09-24 16:27:52 +03:00
linux-user linux-user: Remove type casts to union type 2015-10-08 19:46:47 +03:00
migration migration: fix deadlock 2015-10-15 08:14:13 +02:00
net netfilter: add a netbuffer filter 2015-10-12 13:31:28 +08:00
pc-bios pc-bios/s390-ccw: avoid floating point operations 2015-10-02 13:31:52 +02:00
pixman@87eea99e44
po Update language files for QEMU 2.4.0 2015-09-11 10:21:38 +03:00
qapi qapi: add missing @ 2015-10-08 19:46:47 +03:00
qga typofixes - v4 2015-09-11 10:45:43 +03:00
qobject Include qapi/qmp/qerror.h exactly where needed 2015-06-22 18:20:41 +02:00
qom qapi: Consistent generated code: prefer visitor 'v' 2015-10-12 18:46:49 +02:00
roms pseries: Update SLOF firmware image to qemu-slof-20150813 2015-09-23 10:51:09 +10:00
scripts qapi: Simplify gen_visit_fields() error handling 2015-10-12 18:46:50 +02:00
slirp slirp: Fix non blocking connect for w32 2015-09-24 20:52:28 +02:00
stubs monitor: remove target-specific code from monitor.c 2015-09-16 17:33:32 +02:00
target-alpha qdev: Protect device-list-properties against broken devices 2015-10-09 15:25:57 +02:00
target-arm qdev: Protect device-list-properties against broken devices 2015-10-09 15:25:57 +02:00
target-cris qdev: Protect device-list-properties against broken devices 2015-10-09 15:25:57 +02:00
target-i386 qdev: Protect device-list-properties against broken devices 2015-10-09 15:25:57 +02:00
target-lm32 qdev: Protect device-list-properties against broken devices 2015-10-09 15:25:57 +02:00
target-m68k qdev: Protect device-list-properties against broken devices 2015-10-09 15:25:57 +02:00
target-microblaze qdev: Protect device-list-properties against broken devices 2015-10-09 15:25:57 +02:00
target-mips qdev: Protect device-list-properties against broken devices 2015-10-09 15:25:57 +02:00
target-moxie qdev: Protect device-list-properties against broken devices 2015-10-09 15:25:57 +02:00
target-openrisc qdev: Protect device-list-properties against broken devices 2015-10-09 15:25:57 +02:00
target-ppc qdev: Protect device-list-properties against broken devices 2015-10-09 15:25:57 +02:00
target-s390x qdev: Protect device-list-properties against broken devices 2015-10-09 15:25:57 +02:00
target-sh4 qdev: Protect device-list-properties against broken devices 2015-10-09 15:25:57 +02:00
target-sparc qdev: Protect device-list-properties against broken devices 2015-10-09 15:25:57 +02:00
target-tilegx qdev: Protect device-list-properties against broken devices 2015-10-09 15:25:57 +02:00
target-tricore qdev: Protect device-list-properties against broken devices 2015-10-09 15:25:57 +02:00
target-unicore32 qdev: Protect device-list-properties against broken devices 2015-10-09 15:25:57 +02:00
target-xtensa qdev: Protect device-list-properties against broken devices 2015-10-09 15:25:57 +02:00
tcg tcg: Check for overflow via highwater mark 2015-10-07 20:36:53 +11:00
tests qapi: Reuse code for flat union base validation 2015-10-12 18:46:49 +02:00
trace
ui gtk/opengl: add opengl context and scanout support (GtkGLArea) 2015-10-08 10:34:53 +02:00
util oslib: allocate PROT_NONE pages on top of RAM 2015-10-01 16:16:52 +03:00
.dir-locals.el Add .dir-locals.el file to configure emacs coding style 2015-10-08 19:46:01 +03:00
.exrc
.gitignore libcacard: use the standalone project 2015-09-23 23:34:17 +02:00
.gitmodules
.mailmap
.travis.yml .travis.yml: Run make check for all targets, not just some 2015-10-08 19:46:47 +03:00
accel.c
aio-posix.c AioContext: optimize clearing the EventNotifier 2015-07-22 12:41:40 +01:00
aio-win32.c AioContext: optimize clearing the EventNotifier 2015-07-22 12:41:40 +01:00
arch_init.c smbios: move smbios code into a common folder 2015-08-13 14:08:30 +03:00
async.c AioContext: force event loop iteration using BH 2015-07-29 10:02:06 +01:00
balloon.c Include monitor/monitor.h exactly where needed 2015-06-22 18:20:41 +02:00
block.c block: disable I/O limits at the beginning of bdrv_close() 2015-10-02 13:48:29 +02:00
blockdev-nbd.c Include monitor/monitor.h exactly where needed 2015-06-22 18:20:41 +02:00
blockdev.c block: Drop drv parameter from bdrv_open() 2015-09-14 16:51:36 +02:00
blockjob.c blockjob: add block_job_release function 2015-07-07 14:27:14 +01:00
bootdevice.c
bt-host.c
bt-vhci.c
Changelog
CODING_STYLE CODING_STYLE: update mixed declaration rules 2015-09-09 15:34:54 +02:00
configure virtio-gpu: add 3d rendering support using virgl, misc fixes. 2015-10-09 17:30:03 +01:00
COPYING
COPYING.LIB
coroutine-gthread.c
coroutine-sigaltstack.c
coroutine-ucontext.c
coroutine-win32.c
cpu-exec-common.c cpu-exec: Migrate some generic fns to cpu-exec-common 2015-09-16 17:33:33 +02:00
cpu-exec.c i386: partial revert of interrupt poll fix 2015-09-25 12:04:44 +02:00
cpus.c s/cpu_get_real_ticks/cpu_get_host_ticks/ 2015-10-08 19:46:01 +03:00
cputlb.c cputlb: Change tlb_set_dirty() arg to cpu 2015-09-16 17:33:33 +02:00
device_tree.c device_tree: Fix a typo 2015-07-27 22:44:47 +03:00
device-hotplug.c
disas.c monitor: make monitor_fprintf and mon_get_cpu externally visible 2015-09-25 12:04:42 +02:00
dma-helpers.c
dump.c Include qapi/qmp/qerror.h exactly where needed 2015-06-22 18:20:41 +02:00
exec.c exec: allocate PROT_NONE pages on top of RAM 2015-10-01 16:16:52 +03:00
gdbstub.c * Support for jemalloc 2015-09-14 16:13:16 +01:00
HACKING
hmp-commands-info.hx hmp: added io apic dump state 2015-09-25 12:04:42 +02:00
hmp-commands.hx monitor: allow device_del to accept QOM paths 2015-09-22 11:31:56 +02:00
hmp.c qmp/hmp: Add throttle ratio to query-migrate and info migrate 2015-09-30 09:42:04 +02:00
hmp.h hmp: add info iothreads command 2015-09-04 13:26:26 +02:00
iohandler.c iohandler: Use aio API 2015-09-07 18:14:03 +02:00
ioport.c
iothread.c rcu: actually register threads that have RCU read-side critical sections 2015-07-24 13:57:45 +02:00
kvm-all.c intc/gic: Extract some reusable vGIC code 2015-09-24 01:29:36 +01:00
kvm-stub.c kvm: some fixes to kvm_resamplefds_allowed 2015-07-06 12:15:14 -06:00
LICENSE
main-loop.c iohandler: Use aio API 2015-09-07 18:14:03 +02:00
MAINTAINERS MAINTAINERS: Specify QAPI include and test files 2015-10-12 18:44:53 +02:00
Makefile Makefile: fix build when VPATH is outside GIT tree 2015-09-25 12:04:41 +02:00
Makefile.objs libcacard: use the standalone project 2015-09-23 23:34:17 +02:00
Makefile.target * Linux header update and cleanup 2015-09-16 18:06:54 +01:00
memory_mapping.c memory_mapping: Rework cpu related includes 2015-06-26 16:00:50 +02:00
memory.c memory: allow destroying a non-empty MemoryRegion 2015-10-09 15:25:56 +02:00
module-common.c
monitor.c monitor: make monitor_fprintf and mon_get_cpu externally visible 2015-09-25 12:04:42 +02:00
nbd.c nbd: release exp->blk after all clients are closed 2015-09-16 17:33:33 +02:00
numa.c Fix bad error handling after memory_region_init_ram() 2015-09-18 14:39:29 +02:00
os-posix.c
os-win32.c maint: remove unused include for signal.h 2015-09-11 10:21:38 +03:00
page_cache.c maint: remove unused include for strings.h 2015-09-11 10:21:38 +03:00
qapi-schema.json init/cleanup of netfilter object 2015-10-12 13:23:40 +08:00
qdev-monitor.c -----BEGIN PGP SIGNATURE----- 2015-10-12 14:29:29 +01:00
qdict-test-data.txt
qemu-bridge-helper.c
qemu-char.c qemu-char: Use g_new() & friends where that makes obvious sense 2015-09-16 17:33:33 +02:00
qemu-coroutine-io.c
qemu-coroutine-lock.c
qemu-coroutine-sleep.c
qemu-coroutine.c
qemu-doc.texi monitor: added generation of documentation for hmp-commands-info.hx 2015-09-16 17:33:33 +02:00
qemu-ga.texi qga: start a man page 2015-09-01 13:16:26 -05:00
qemu-img-cmds.hx
qemu-img.c utils: rename strtosz to use qemu prefix 2015-09-25 12:04:41 +02:00
qemu-img.texi maint: remove / fix many doubled words 2015-09-11 10:21:38 +03:00
qemu-io-cmds.c utils: rename strtosz to use qemu prefix 2015-09-25 12:04:41 +02:00
qemu-io.c qemu-io: Remove duplicate 'open' error message 2015-09-14 16:51:36 +02:00
qemu-log.c
qemu-nbd.c qemu-nbd: convert to use the QAPI SocketAddress object 2015-09-25 12:04:40 +02:00
qemu-nbd.texi
qemu-options-wrapper.h
qemu-options.h
qemu-options.hx netfilter: add a netbuffer filter 2015-10-12 13:31:28 +08:00
qemu-seccomp.c
qemu-tech.texi doc: Refresh URLs in the qemu-tech documentation 2015-09-25 12:20:21 +02:00
qemu-timer.c qemu-timer: initialize "timers_done_ev" to set 2015-07-22 12:41:32 +01:00
qemu.nsi nsis: Add QEMU version information to Windows registry 2015-09-24 20:52:28 +02:00
qemu.sasl
qjson.c
qmp-commands.hx monitor: allow device_del to accept QOM paths 2015-09-22 11:31:56 +02:00
qmp.c qdev: Protect device-list-properties against broken devices 2015-10-09 15:25:57 +02:00
qtest.c Init page sizes in qtest 2015-09-29 11:33:02 +05:30
README
rules.mak make: load only required dependency files. 2015-08-13 14:08:25 +03:00
softmmu_template.h softmmu: remove now unused functions 2015-09-11 08:16:05 -07:00
spice-qemu-char.c
tcg-runtime.c
tci.c tcg: Rename debug_insn_start to insn_start 2015-10-07 20:36:26 +11:00
thread-pool.c
thunk.c linux-user: Allocate thunk size dynamically 2015-06-15 11:36:58 +03:00
tpm.c Include monitor/monitor.h exactly where needed 2015-06-22 18:20:41 +02:00
trace-events virtio-gpu: add 3d rendering support using virgl, misc fixes. 2015-10-09 17:30:03 +01:00
translate-all.c tcg: Check for overflow via highwater mark 2015-10-07 20:36:53 +11:00
translate-all.h
translate-common.c translate: move real_host_page setting to -common 2015-09-16 17:33:33 +02:00
user-exec.c osdep.h: Remove qemu_printf 2015-08-19 16:29:53 +01:00
VERSION Open 2.5 development tree 2015-08-11 23:15:55 +01:00
version.rc
vl.c -----BEGIN PGP SIGNATURE----- 2015-10-12 14:29:29 +01:00
xen-common-stub.c
xen-common.c migration: Fix regression for xenfv and pc,accel=xen machine. 2015-08-03 16:13:40 +00:00
xen-hvm-stub.c pc: Remove redundant arguments from xen_hvm_init() 2015-09-10 11:05:40 +03:00
xen-hvm.c Fix bad error handling after memory_region_init_ram() 2015-09-18 14:39:29 +02:00
xen-mapcache.c maint: avoid useless "if (foo) free(foo)" pattern 2015-09-11 10:21:38 +03:00

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

- QEMU team