On Fri, Feb 10, 2012 at 18:31, Jan Kiszka <jan.kiszka@xxxxxxxxxxx> wrote: > 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@xxxxxxxxxx> > Signed-off-by: Jan Kiszka <jan.kiszka@xxxxxxxxxxx> > --- > cpus.c | 12 ++++++++++++ > 1 files changed, 12 insertions(+), 0 deletions(-) > > diff --git a/cpus.c b/cpus.c > index d0c8340..5adfc6b 100644 > --- a/cpus.c > +++ b/cpus.c > @@ -870,6 +870,18 @@ void pause_all_vcpus(void) > penv = (CPUState *)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 = (CPUState *)penv->next_cpu; The cast is useless, next_cpu is already CPUState *. I wonder why it is used in other cases too. > + } > + return; > + } > + } > + > while (!all_vcpus_paused()) { > qemu_cond_wait(&qemu_pause_cond, &qemu_global_mutex); > penv = first_cpu; > -- > 1.7.3.4 > > -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html