diff options
Diffstat (limited to 'qom')
-rw-r--r-- | qom/cpu.c | 12 | ||||
-rw-r--r-- | qom/qom-qobject.c | 4 |
2 files changed, 13 insertions, 3 deletions
@@ -113,9 +113,19 @@ static void cpu_common_get_memory_mapping(CPUState *cpu, error_setg(errp, "Obtaining memory mappings is unsupported on this CPU."); } +/* Resetting the IRQ comes from across the code base so we take the + * BQL here if we need to. cpu_interrupt assumes it is held.*/ void cpu_reset_interrupt(CPUState *cpu, int mask) { + bool need_lock = !qemu_mutex_iothread_locked(); + + if (need_lock) { + qemu_mutex_lock_iothread(); + } cpu->interrupt_request &= ~mask; + if (need_lock) { + qemu_mutex_unlock_iothread(); + } } void cpu_exit(CPUState *cpu) @@ -123,7 +133,7 @@ void cpu_exit(CPUState *cpu) atomic_set(&cpu->exit_request, 1); /* Ensure cpu_exec will see the exit request after TCG has exited. */ smp_wmb(); - atomic_set(&cpu->tcg_exit_req, 1); + atomic_set(&cpu->icount_decr.u16.high, -1); } int cpu_write_elf32_qemunote(WriteCoreDumpFunction f, CPUState *cpu, diff --git a/qom/qom-qobject.c b/qom/qom-qobject.c index 447e4a0560..4aec20d73c 100644 --- a/qom/qom-qobject.c +++ b/qom/qom-qobject.c @@ -22,8 +22,8 @@ void object_property_set_qobject(Object *obj, QObject *value, const char *name, Error **errp) { Visitor *v; - /* TODO: Should we reject, rather than ignore, excess input? */ - v = qobject_input_visitor_new(value, false); + + v = qobject_input_visitor_new(value); object_property_set(obj, v, name, errp); visit_free(v); } |