X-Git-Url: https://git.proxmox.com/?a=blobdiff_plain;f=translate-common.c;h=40fe5a19bb3c2ec14f0f2ac58e78db95cbc89aea;hb=b8adbc657802482e4da1767bf983ebfdf9bfe9fc;hp=77762fd86c3fcd77519785ca3785f9171a1db7e5;hpb=1aab16c28a0232d898d6f56f5a56019472296ee7;p=mirror_qemu.git diff --git a/translate-common.c b/translate-common.c index 77762fd86c..40fe5a19bb 100644 --- a/translate-common.c +++ b/translate-common.c @@ -21,6 +21,7 @@ #include "qemu-common.h" #include "qom/cpu.h" #include "sysemu/cpus.h" +#include "qemu/main-loop.h" uintptr_t qemu_real_host_page_size; intptr_t qemu_real_host_page_mask; @@ -30,6 +31,7 @@ intptr_t qemu_real_host_page_mask; static void tcg_handle_interrupt(CPUState *cpu, int mask) { int old_mask; + g_assert(qemu_mutex_iothread_locked()); old_mask = cpu->interrupt_request; cpu->interrupt_request |= mask; @@ -40,14 +42,13 @@ static void tcg_handle_interrupt(CPUState *cpu, int mask) */ if (!qemu_cpu_is_self(cpu)) { qemu_cpu_kick(cpu); - return; - } - - cpu->icount_decr.u16.high = -1; - if (use_icount && - !cpu->can_do_io - && (mask & ~old_mask) != 0) { - cpu_abort(cpu, "Raised interrupt while not in I/O function"); + } else { + cpu->icount_decr.u16.high = -1; + if (use_icount && + !cpu->can_do_io + && (mask & ~old_mask) != 0) { + cpu_abort(cpu, "Raised interrupt while not in I/O function"); + } } }