From mboxrd@z Thu Jan 1 00:00:00 1970 From: Sasha Levin Subject: [PATCH] kvm tools: Wait for all VCPU threads to exit while rebooting Date: Thu, 11 Aug 2011 12:47:23 +0300 Message-ID: <1313056043-17405-2-git-send-email-levinsasha928@gmail.com> References: <1313056043-17405-1-git-send-email-levinsasha928@gmail.com> Cc: kvm@vger.kernel.org, mingo@elte.hu, asias.hejun@gmail.com, gorcunov@gmail.com, Sasha Levin To: penberg@kernel.org Return-path: Received: from mail-fx0-f46.google.com ([209.85.161.46]:64154 "EHLO mail-fx0-f46.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754941Ab1HKJsh (ORCPT ); Thu, 11 Aug 2011 05:48:37 -0400 Received: by mail-fx0-f46.google.com with SMTP id 19so1542924fxh.19 for ; Thu, 11 Aug 2011 02:48:37 -0700 (PDT) In-Reply-To: <1313056043-17405-1-git-send-email-levinsasha928@gmail.com> Sender: kvm-owner@vger.kernel.org List-ID: 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 --- 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); + } } int kvm_cpu__start(struct kvm_cpu *cpu) @@ -442,7 +448,7 @@ int kvm_cpu__start(struct kvm_cpu *cpu) if (cpu->kvm->single_step) kvm_cpu__enable_singlestep(cpu); - for (;;) { + while (cpu->is_running) { if (cpu->paused) { kvm__notify_paused(); cpu->paused = 0; -- 1.7.6