replay: don't synchronize memory operations in replay mode
Commit 9458a9a1df
added synchronization
of vCPU and migration operations through calling run_on_cpu operation.
However, in replay mode this synchronization is unneeded, because
I/O and vCPU threads are already synchronized.
This patch disables such synchronization for record/replay mode.
Signed-off-by: Pavel Dovgalyuk <Pavel.Dovgaluk@ispras.ru>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Signed-off-by: Pavel Dovgalyuk <pavel.dovgaluk@gmail.com>
This commit is contained in:
parent
b2aca78cb2
commit
86cf9e1546
13
exec.c
13
exec.c
@ -2959,8 +2959,17 @@ static void tcg_log_global_after_sync(MemoryListener *listener)
|
||||
* by pushing the migration thread's memory read after the vCPU thread has
|
||||
* written the memory.
|
||||
*/
|
||||
cpuas = container_of(listener, CPUAddressSpace, tcg_as_listener);
|
||||
run_on_cpu(cpuas->cpu, do_nothing, RUN_ON_CPU_NULL);
|
||||
if (replay_mode == REPLAY_MODE_NONE) {
|
||||
/*
|
||||
* VGA can make calls to this function while updating the screen.
|
||||
* In record/replay mode this causes a deadlock, because
|
||||
* run_on_cpu waits for rr mutex. Therefore no races are possible
|
||||
* in this case and no need for making run_on_cpu when
|
||||
* record/replay is not enabled.
|
||||
*/
|
||||
cpuas = container_of(listener, CPUAddressSpace, tcg_as_listener);
|
||||
run_on_cpu(cpuas->cpu, do_nothing, RUN_ON_CPU_NULL);
|
||||
}
|
||||
}
|
||||
|
||||
static void tcg_commit(MemoryListener *listener)
|
||||
|
Loading…
Reference in New Issue
Block a user