Message ID | 1370805206-26574-6-git-send-email-afaerber@suse.de |
---|---|
State | New |
Headers | show |
Reviewed-by: liguang <lig.fnst@cn.fujitsu.com> 在 2013-06-09日的 21:12 +0200,Andreas Färber写道: > Use new qemu_for_each_cpu() to pause, stop and kick CPUs. > > Signed-off-by: Andreas Färber <afaerber@suse.de> > --- > cpus.c | 40 ++++++++++++++++++++-------------------- > 1 file changed, 20 insertions(+), 20 deletions(-) > > diff --git a/cpus.c b/cpus.c > index 85b35f6..ad5edfe 100644 > --- a/cpus.c > +++ b/cpus.c > @@ -962,39 +962,39 @@ static int all_vcpus_paused(void) > return 1; > } > > -void pause_all_vcpus(void) > +static void pause_one_vcpu(CPUState *cpu, void *data) > { > - CPUArchState *penv = first_cpu; > + cpu->stop = true; > + qemu_cpu_kick(cpu); > +} > > +static void stop_one_vcpu(CPUState *cpu, void *data) > +{ > + cpu->stop = false; > + cpu->stopped = true; > +} > + > +static void kick_one_vcpu(CPUState *cpu, void *data) > +{ > + qemu_cpu_kick(cpu); > +} > + > +void pause_all_vcpus(void) > +{ > qemu_clock_enable(vm_clock, false); > - while (penv) { > - CPUState *pcpu = ENV_GET_CPU(penv); > - pcpu->stop = true; > - qemu_cpu_kick(pcpu); > - penv = penv->next_cpu; > - } > + qemu_for_each_cpu(pause_one_vcpu, NULL); > > if (qemu_in_vcpu_thread()) { > cpu_stop_current(); > if (!kvm_enabled()) { > - penv = first_cpu; > - while (penv) { > - CPUState *pcpu = ENV_GET_CPU(penv); > - pcpu->stop = false; > - pcpu->stopped = true; > - penv = penv->next_cpu; > - } > + qemu_for_each_cpu(stop_one_vcpu, NULL); > return; > } > } > > while (!all_vcpus_paused()) { > qemu_cond_wait(&qemu_pause_cond, &qemu_global_mutex); > - penv = first_cpu; > - while (penv) { > - qemu_cpu_kick(ENV_GET_CPU(penv)); > - penv = penv->next_cpu; > - } > + qemu_for_each_cpu(kick_one_vcpu, NULL); > } > } >
diff --git a/cpus.c b/cpus.c index 85b35f6..ad5edfe 100644 --- a/cpus.c +++ b/cpus.c @@ -962,39 +962,39 @@ static int all_vcpus_paused(void) return 1; } -void pause_all_vcpus(void) +static void pause_one_vcpu(CPUState *cpu, void *data) { - CPUArchState *penv = first_cpu; + cpu->stop = true; + qemu_cpu_kick(cpu); +} +static void stop_one_vcpu(CPUState *cpu, void *data) +{ + cpu->stop = false; + cpu->stopped = true; +} + +static void kick_one_vcpu(CPUState *cpu, void *data) +{ + qemu_cpu_kick(cpu); +} + +void pause_all_vcpus(void) +{ qemu_clock_enable(vm_clock, false); - while (penv) { - CPUState *pcpu = ENV_GET_CPU(penv); - pcpu->stop = true; - qemu_cpu_kick(pcpu); - penv = penv->next_cpu; - } + qemu_for_each_cpu(pause_one_vcpu, NULL); if (qemu_in_vcpu_thread()) { cpu_stop_current(); if (!kvm_enabled()) { - penv = first_cpu; - while (penv) { - CPUState *pcpu = ENV_GET_CPU(penv); - pcpu->stop = false; - pcpu->stopped = true; - penv = penv->next_cpu; - } + qemu_for_each_cpu(stop_one_vcpu, NULL); return; } } while (!all_vcpus_paused()) { qemu_cond_wait(&qemu_pause_cond, &qemu_global_mutex); - penv = first_cpu; - while (penv) { - qemu_cpu_kick(ENV_GET_CPU(penv)); - penv = penv->next_cpu; - } + qemu_for_each_cpu(kick_one_vcpu, NULL); } }
Use new qemu_for_each_cpu() to pause, stop and kick CPUs. Signed-off-by: Andreas Färber <afaerber@suse.de> --- cpus.c | 40 ++++++++++++++++++++-------------------- 1 file changed, 20 insertions(+), 20 deletions(-)