On Thu, 2011-08-11 at 13:02 +0300, Pekka Enberg wrote: > On Thu, Aug 11, 2011 at 12:47 PM, Sasha Levin <levinsasha928@xxxxxxxxx> wrote: > > This patch changes kvm_cpu__reboot() behaviour to block until all VCPU > > threads have ended, this allows us to assume that the guest is stopped > > when the function has returned. > > > > This fixes errors on close caused by releasing KVM_RUN structure while > > VCPUs were still running. > > > > Signed-off-by: Sasha Levin <levinsasha928@xxxxxxxxx> > > --- > > tools/kvm/kvm-cpu.c | 10 ++++++++-- > > 1 files changed, 8 insertions(+), 2 deletions(-) > > > > diff --git a/tools/kvm/kvm-cpu.c b/tools/kvm/kvm-cpu.c > > index 2f5d23c..64c0997 100644 > > --- a/tools/kvm/kvm-cpu.c > > +++ b/tools/kvm/kvm-cpu.c > > @@ -421,7 +421,13 @@ static void kvm_cpu__handle_coalesced_mmio(struct kvm_cpu *cpu) > > > > void kvm_cpu__reboot(void) > > { > > - pthread_kill(kvm_cpus[0]->thread, SIGKVMEXIT); > > + int i; > > + > > + for (i = 0; i < KVM_NR_CPUS; i++) > > + if (kvm_cpus[i]) { > > + pthread_kill(kvm_cpus[i]->thread, SIGKVMEXIT); > > + pthread_join(kvm_cpus[i]->thread, NULL); > > + } > > Wouldn't it be better to first pthread_kill() all CPUs first and do > pthread_join() in separate loop? That should be faster especially if > there's lots of CPUs. Actually, we don't even need a pthread_kill() there. I'll send a new version :) -- Sasha. -- 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