qemu/hw/intc
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
..
allwinner-a10-pic.c hw: explicitly include qemu/log.h 2016-05-19 16:42:29 +02:00
apic_common.c apic: reset apic_delivered global variable on machine reset 2017-02-16 14:06:55 +01:00
apic.c apic: add send_msi() to APICCommonClass 2016-10-17 15:44:49 -02:00
arm_gic_common.c hw/intc/arm_gic: Add external IRQ lines for VIRQ and VFIQ 2017-01-20 11:15:09 +00:00
arm_gic_kvm.c migration: disallow migrate_add_blocker during migration 2017-01-24 18:00:30 +00:00
arm_gic.c nvic: set pending status for not active interrupts 2016-11-07 10:00:24 +00:00
arm_gicv2m.c hw: explicitly include qemu/log.h 2016-05-19 16:42:29 +02:00
arm_gicv3_common.c hw/intc/gicv3: Add data fields for virtualization support 2017-01-20 11:15:09 +00:00
arm_gicv3_cpuif.c tcg: drop global lock during TCG code execution 2017-02-24 10:32:45 +00:00
arm_gicv3_dist.c hw/intc/arm_gicv3: Fix compilation with simple trace backend 2016-06-20 11:35:15 +01:00
arm_gicv3_its_common.c hw/intc/arm_gicv3_its: Implement ITS base class 2016-10-04 13:28:08 +01:00
arm_gicv3_its_kvm.c migration: disallow migrate_add_blocker during migration 2017-01-24 18:00:30 +00:00
arm_gicv3_kvm.c migration: disallow migrate_add_blocker during migration 2017-01-24 18:00:30 +00:00
arm_gicv3_redist.c arm_gicv3: Add assert()s to tell Coverity that offsets are aligned 2016-07-19 17:56:27 +01:00
arm_gicv3.c hw/intc/arm_gicv3: Don't signal Pending+Active interrupts to CPU 2016-12-27 14:59:25 +00:00
armv7m_nvic.c armv7m: Honour CCR.USERSETMPEND 2017-01-27 15:29:08 +00:00
aspeed_vic.c hw: Clean up includes 2016-06-07 18:19:23 +03:00
bcm2835_ic.c hw: explicitly include qemu/log.h 2016-05-19 16:42:29 +02:00
bcm2836_control.c hw: explicitly include qemu/log.h 2016-05-19 16:42:29 +02:00
etraxfs_pic.c hw/intc: QOM'ify etraxfs_pic.c 2016-05-12 13:22:24 +01:00
exynos4210_combiner.c hw/intc: QOM'ify exynos4210_combiner.c 2016-05-12 13:22:24 +01:00
exynos4210_gic.c migration: consolidate VMStateField.start 2017-02-13 17:27:13 +00:00
gic_internal.h Clean up decorations and whitespace around header guards 2016-07-12 16:20:46 +02:00
gicv3_internal.h hw/intc/gicv3: Add defines for ICH system register fields 2017-01-20 11:15:09 +00:00
grlib_irqmp.c hw/intc: QOM'ify grlib_irqmp.c 2016-05-12 13:22:25 +01:00
heathrow_pic.c hw/intc: Clean up includes 2016-01-29 15:07:24 +00:00
i8259_common.c i8259: give ISA device when registering ISA ioports 2016-10-04 10:00:26 +02:00
i8259.c intc: make HMP 'info irq' and 'info pic' commands use InterruptStatsProvider interface 2016-10-04 10:00:25 +02:00
imx_avic.c hw: explicitly include qemu/log.h 2016-05-19 16:42:29 +02:00
intc.c intc: add an interface to gather statistics/informations on interrupt controllers 2016-10-04 10:00:25 +02:00
ioapic_common.c x86: ioapic: dump version for "info ioapic" 2017-01-16 17:52:35 +01:00
ioapic.c ioapic: fix error report value of def version 2017-02-16 14:06:55 +01:00
lm32_pic.c intc: make HMP 'info irq' and 'info pic' commands use InterruptStatsProvider interface 2016-10-04 10:00:25 +02:00
Makefile.objs nios2: Add IIC interrupt controller emulation 2017-01-24 13:10:35 -08:00
mips_gic.c hw/mips_gic: Update pin state on mask changes 2017-02-21 22:24:58 +00:00
nios2_iic.c nios2: Add IIC interrupt controller emulation 2017-01-24 13:10:35 -08:00
omap_intc.c hw/intc: QOM'ify omap_intc.c 2016-05-12 13:22:25 +01:00
openpic_kvm.c qemu-common: push cpu.h inclusion out of qemu-common.h 2016-05-19 16:42:29 +02:00
openpic.c hw: explicitly include qemu/log.h 2016-05-19 16:42:29 +02:00
pl190.c hw: explicitly include qemu/log.h 2016-05-19 16:42:29 +02:00
puv3_intc.c unicore: Clean up includes 2016-01-29 15:07:22 +00:00
realview_gic.c include/qemu/osdep.h: Don't include qapi/error.h 2016-03-22 22:20:15 +01:00
s390_flic_kvm.c s390x/flic: fix compilation of kvm flic 2017-01-26 10:33:48 +01:00
s390_flic.c s390x/kvm: add interface for clearing IO irqs 2016-06-14 13:34:50 +02:00
sh_intc.c hw: explicitly include qemu-common.h and cpu.h 2016-03-22 22:20:17 +01:00
slavio_intctl.c intc: make HMP 'info irq' and 'info pic' commands use InterruptStatsProvider interface 2016-10-04 10:00:25 +02:00
trace-events trace: clean up trace-events files 2017-01-31 17:12:15 +00:00
vgic_common.h intc/gic: Extract some reusable vGIC code 2015-09-24 01:29:36 +01:00
xics_kvm.c ppc/xics: add a xics_set_nr_servers common routine 2016-10-28 09:36:58 +11:00
xics_spapr.c pseries: Move construction of /interrupt-controller fdt node 2016-10-28 09:38:26 +11:00
xics.c ppc/xics: change the icp_ routines API to use an 'ICPState *' argument 2016-10-28 09:36:58 +11:00
xilinx_intc.c hw/intc: Clean up includes 2016-01-29 15:07:24 +00:00