summaryrefslogtreecommitdiff
path: root/hw/sparc
diff options
context:
space:
mode:
authorAlex Bennée <alex.bennee@linaro.org>2017-03-01 13:20:02 +0000
committerAlex Bennée <alex.bennee@linaro.org>2017-03-09 10:41:38 +0000
commit5ee5993001cf32addb86a92e2ae8cb090fbc1462 (patch)
tree5c54fe7fef9dddfcc18ec6c56ae2e17903e2b726 /hw/sparc
parentc34c762015fec023c3ea5cf3629cbac462a80973 (diff)
sparc/sparc64: grab BQL before calling cpu_check_irqs
IRQ modification is part of device emulation and should be done while the BQL is held to prevent races when MTTCG is enabled. This adds assertions in the hw emulation layer and wraps the calls from helpers in the BQL. Reported-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk> Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Diffstat (limited to 'hw/sparc')
-rw-r--r--hw/sparc/sun4m.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/hw/sparc/sun4m.c b/hw/sparc/sun4m.c
index 61416a6426..873cd7df9a 100644
--- a/hw/sparc/sun4m.c
+++ b/hw/sparc/sun4m.c
@@ -142,6 +142,9 @@ void cpu_check_irqs(CPUSPARCState *env)
{
CPUState *cs;
+ /* We should be holding the BQL before we mess with IRQs */
+ g_assert(qemu_mutex_iothread_locked());
+
if (env->pil_in && (env->interrupt_index == 0 ||
(env->interrupt_index & ~15) == TT_EXTINT)) {
unsigned int i;