mirror of https://github.com/xemu-project/xemu.git
Prevent abortion on multiple VCPU kicks
If we call qemu_cpu_kick more than once before the target was able to process the signal, pthread_kill will fail, and qemu will abort. Prevent this by avoiding the redundant signal. This logic can be found in qemu-kvm as well. Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com> Signed-off-by: Marcelo Tosatti <mtosatti@redhat.com>
This commit is contained in:
parent
8668f61d20
commit
aa2c364b4c
|
@ -205,6 +205,7 @@ typedef struct CPUWatchpoint {
|
||||||
uint32_t stopped; /* Artificially stopped */ \
|
uint32_t stopped; /* Artificially stopped */ \
|
||||||
struct QemuThread *thread; \
|
struct QemuThread *thread; \
|
||||||
struct QemuCond *halt_cond; \
|
struct QemuCond *halt_cond; \
|
||||||
|
int thread_kicked; \
|
||||||
struct qemu_work_item *queued_work_first, *queued_work_last; \
|
struct qemu_work_item *queued_work_first, *queued_work_last; \
|
||||||
const char *cpu_model_str; \
|
const char *cpu_model_str; \
|
||||||
struct KVMState *kvm_state; \
|
struct KVMState *kvm_state; \
|
||||||
|
|
6
cpus.c
6
cpus.c
|
@ -481,6 +481,7 @@ static void qemu_wait_io_event_common(CPUState *env)
|
||||||
qemu_cond_signal(&qemu_pause_cond);
|
qemu_cond_signal(&qemu_pause_cond);
|
||||||
}
|
}
|
||||||
flush_queued_work(env);
|
flush_queued_work(env);
|
||||||
|
env->thread_kicked = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void qemu_tcg_wait_io_event(void)
|
static void qemu_tcg_wait_io_event(void)
|
||||||
|
@ -648,7 +649,10 @@ void qemu_cpu_kick(void *_env)
|
||||||
{
|
{
|
||||||
CPUState *env = _env;
|
CPUState *env = _env;
|
||||||
qemu_cond_broadcast(env->halt_cond);
|
qemu_cond_broadcast(env->halt_cond);
|
||||||
qemu_thread_signal(env->thread, SIG_IPI);
|
if (!env->thread_kicked) {
|
||||||
|
qemu_thread_signal(env->thread, SIG_IPI);
|
||||||
|
env->thread_kicked = true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int qemu_cpu_self(void *_env)
|
int qemu_cpu_self(void *_env)
|
||||||
|
|
Loading…
Reference in New Issue