On Fri, Feb 10, 2012 at 18:31, Jan Kiszka <[email protected]> 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 <[email protected]>
> Signed-off-by: Jan Kiszka <[email protected]>
> ---
> 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 [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html