Allow to use pause_all_vcpus from VCPU context
In order to perform critical manipulations on the VM state in the context of a VCPU, specifically code patching, stopping and resuming of all VCPUs may be necessary. resume_all_vcpus is already compatible, now enable pause_all_vcpus for this use case by stopping the calling context before starting to wait for the whole gang. CC: Paolo Bonzini <pbonzini@redhat.com> Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com> Signed-off-by: Avi Kivity <avi@redhat.com>
This commit is contained in:
parent
8e564b4ebf
commit
d798e97456
12
cpus.c
12
cpus.c
@ -875,6 +875,18 @@ void pause_all_vcpus(void)
|
||||
penv = penv->next_cpu;
|
||||
}
|
||||
|
||||
if (!qemu_thread_is_self(&io_thread)) {
|
||||
cpu_stop_current();
|
||||
if (!kvm_enabled()) {
|
||||
while (penv) {
|
||||
penv->stop = 0;
|
||||
penv->stopped = 1;
|
||||
penv = penv->next_cpu;
|
||||
}
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
while (!all_vcpus_paused()) {
|
||||
qemu_cond_wait(&qemu_pause_cond, &qemu_global_mutex);
|
||||
penv = first_cpu;
|
||||
|
Loading…
Reference in New Issue
Block a user