On 03/11/2017 10:16, Pavel Dovgalyuk wrote: >> From: Paolo Bonzini [mailto:pbonz...@redhat.com] >> On 31/10/2017 12:26, Pavel Dovgalyuk wrote: >>> + /* We need to drop the replay_lock so any vCPU threads woken up >>> + * can finish their replay tasks >>> + */ >>> + if (replay_mode != REPLAY_MODE_NONE) { >>> + g_assert(replay_mutex_locked()); >>> + qemu_mutex_unlock_iothread(); >>> + replay_mutex_unlock(); >>> + qemu_mutex_lock_iothread(); >>> + } >> >> The assert+unlock+lock here is unnecessary; just do >> >> if (replay_mode != REPLAY_MODE_NONE) { >> replay_mutex_unlock(); >> } >> >> which according to a previous suggestion can become just >> >> replay_mutex_unlock(); > > We can't remove qemu_mutex_unlock_iothread(), because there is an assert > inside replay_mutex_unlock(), which checks that iothread is unlocked.
I think the assert is wrong. Lock hierarchy only applies to lock, not unlock. Paolo >> >>> while (!all_vcpus_paused()) { >>> qemu_cond_wait(&qemu_pause_cond, &qemu_global_mutex); >>> CPU_FOREACH(cpu) { >>> qemu_cpu_kick(cpu); >>> } >>> } >>> + >>> + if (replay_mode != REPLAY_MODE_NONE) { >>> + qemu_mutex_unlock_iothread(); >>> + replay_mutex_lock(); >>> + qemu_mutex_lock_iothread(); >>> + } >> > > Pavel Dovgalyuk >