Re: [Qemu-devel] [PATCH v2 2/8] Allow to use pause_all_vcpus from VCPU context

2012-02-11 Thread Blue Swirl
On Fri, Feb 10, 2012 at 18:31, Jan Kiszka jan.kis...@siemens.com 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 pbonz...@redhat.com
 Signed-off-by: Jan Kiszka jan.kis...@siemens.com
 ---
  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





Re: [Qemu-devel] [PATCH v2 2/8] Allow to use pause_all_vcpus from VCPU context

2012-02-11 Thread Jan Kiszka
On 2012-02-11 15:16, Blue Swirl wrote:
 On Fri, Feb 10, 2012 at 18:31, Jan Kiszka jan.kis...@siemens.com 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 pbonz...@redhat.com
 Signed-off-by: Jan Kiszka jan.kis...@siemens.com
 ---
  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.

Indeed, weird. We can clean the others up separately.

Jan



signature.asc
Description: OpenPGP digital signature