qemu/hw/core
Jan Kiszka 8d04fb55de tcg: drop global lock during TCG code execution
This finally allows TCG to benefit from the iothread introduction: Drop
the global mutex while running pure TCG CPU code. Reacquire the lock
when entering MMIO or PIO emulation, or when leaving the TCG loop.

We have to revert a few optimization for the current TCG threading
model, namely kicking the TCG thread in qemu_mutex_lock_iothread and not
kicking it in qemu_cpu_kick. We also need to disable RAM block
reordering until we have a more efficient locking mechanism at hand.

Still, a Linux x86 UP guest and my Musicpal ARM model boot fine here.
These numbers demonstrate where we gain something:

20338 jan       20   0  331m  75m 6904 R   99  0.9   0:50.95 qemu-system-arm
20337 jan       20   0  331m  75m 6904 S   20  0.9   0:26.50 qemu-system-arm

The guest CPU was fully loaded, but the iothread could still run mostly
independent on a second core. Without the patch we don't get beyond

32206 jan       20   0  330m  73m 7036 R   82  0.9   1:06.00 qemu-system-arm
32204 jan       20   0  330m  73m 7036 S   21  0.9   0:17.03 qemu-system-arm

We don't benefit significantly, though, when the guest is not fully
loading a host CPU.

Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
Message-Id: <1439220437-23957-10-git-send-email-fred.konrad@greensocs.com>
[FK: Rebase, fix qemu_devices_reset deadlock, rm address_space_* mutex]
Signed-off-by: KONRAD Frederic <fred.konrad@greensocs.com>
[EGC: fixed iothread lock for cpu-exec IRQ handling]
Signed-off-by: Emilio G. Cota <cota@braap.org>
[AJB: -smp single-threaded fix, clean commit msg, BQL fixes]
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Reviewed-by: Richard Henderson <rth@twiddle.net>
Reviewed-by: Pranith Kumar <bobby.prani@gmail.com>
[PM: target-arm changes]
Acked-by: Peter Maydell <peter.maydell@linaro.org>
2017-02-24 10:32:45 +00:00
..
bus.c bus: simplify name handling 2016-09-08 18:05:22 +04:00
empty_slot.c
fw-path-provider.c
generic-loader.c hw: Fix typos found by codespell 2017-01-24 23:26:52 +03:00
hotplug.c qdev: hotplug: drop HotplugHandler.post_plug callback 2016-11-15 17:20:37 +02:00
irq.c tcg: drop global lock during TCG code execution 2017-02-24 10:32:45 +00:00
loader-fit.c loader: Support Flattened Image Trees (FIT images) 2017-02-21 23:47:40 +00:00
loader.c loader: Support Flattened Image Trees (FIT images) 2017-02-21 23:47:40 +00:00
machine.c machine: Register TYPE_MACHINE properties as class properties 2016-10-17 15:48:40 -02:00
Makefile.objs loader: Support Flattened Image Trees (FIT images) 2017-02-21 23:47:40 +00:00
nmi.c
null-machine.c hw/core/null-machine: Add the possibility to instantiate a CPU and RAM 2017-01-23 21:26:27 -02:00
or-irq.c irq: Add a new irq device that allows the ORing of lines 2016-10-04 13:28:07 +01:00
platform-bus.c sysbus: Remove ignored return value of FindSysbusDeviceFunc 2016-09-27 17:03:34 -03:00
ptimer.c hw/ptimer: Add "no counter round down" policy 2016-10-24 16:26:52 +01:00
qdev-properties-system.c char: rename CharDriverState Chardev 2017-01-27 18:07:59 +01:00
qdev-properties.c hw: Fix typos found by codespell 2017-01-24 23:26:52 +03:00
qdev.c vmstate registration: check return values 2017-02-06 13:36:49 +01:00
register.c
reset.c hw: move reset handlers from vl.c to hw/core 2017-01-16 17:52:35 +01:00
stream.c
sysbus.c
uboot_image.h Clean up ill-advised or unusual header guards 2016-07-12 16:20:46 +02:00