From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:39481) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZZYOt-0003zV-L2 for qemu-devel@nongnu.org; Wed, 09 Sep 2015 01:58:32 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ZZYOp-0005l2-Kq for qemu-devel@nongnu.org; Wed, 09 Sep 2015 01:58:31 -0400 Received: from e23smtp09.au.ibm.com ([202.81.31.142]:57445) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZZYOp-0005jq-3q for qemu-devel@nongnu.org; Wed, 09 Sep 2015 01:58:27 -0400 Received: from /spool/local by e23smtp09.au.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Wed, 9 Sep 2015 15:58:24 +1000 Date: Wed, 9 Sep 2015 11:27:22 +0530 From: Bharata B Rao Message-ID: <20150909055722.GF17433@in.ibm.com> References: <1438838837-28504-1-git-send-email-bharata@linux.vnet.ibm.com> <1438838837-28504-5-git-send-email-bharata@linux.vnet.ibm.com> <20150904061138.GY6537@voom.redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20150904061138.GY6537@voom.redhat.com> Subject: Re: [Qemu-devel] [RFC PATCH v4 04/11] cpus: Add a sync version of cpu_remove() Reply-To: bharata@linux.vnet.ibm.com List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: David Gibson Cc: mdroth@linux.vnet.ibm.com, aik@ozlabs.ru, agraf@suse.de, qemu-devel@nongnu.org, qemu-ppc@nongnu.org, tyreld@linux.vnet.ibm.com, nfont@linux.vnet.ibm.com, imammedo@redhat.com, afaerber@suse.de On Fri, Sep 04, 2015 at 04:11:38PM +1000, David Gibson wrote: > On Thu, Aug 06, 2015 at 10:57:10AM +0530, Bharata B Rao wrote: > > This sync API will be used by the CPU hotplug code to wait for the CPU to > > completely get removed before flagging the failure to the device_add > > command. > > > > Sync version of this call is needed to correctly recover from CPU > > realization failures when ->plug() handler fails. > > > > Signed-off-by: Bharata B Rao > > --- > > cpus.c | 14 ++++++++++++++ > > include/qom/cpu.h | 8 ++++++++ > > 2 files changed, 22 insertions(+) > > > > diff --git a/cpus.c b/cpus.c > > index 73ae2e7..9d9644e 100644 > > --- a/cpus.c > > +++ b/cpus.c > > @@ -999,6 +999,8 @@ static void *qemu_kvm_cpu_thread_fn(void *arg) > > qemu_kvm_wait_io_event(cpu); > > if (cpu->exit && !cpu_can_run(cpu)) { > > qemu_kvm_destroy_vcpu(cpu); > > + cpu->created = false; > > + qemu_cond_signal(&qemu_cpu_cond); > > qemu_mutex_unlock(&qemu_global_mutex); > > return NULL; > > } > > @@ -1104,6 +1106,8 @@ static void *qemu_tcg_cpu_thread_fn(void *arg) > > } > > if (remove_cpu) { > > qemu_tcg_destroy_vcpu(remove_cpu); > > + cpu->created = false; > > + qemu_cond_signal(&qemu_cpu_cond); > > remove_cpu = NULL; > > } > > } > > @@ -1283,6 +1287,16 @@ void cpu_remove(CPUState *cpu) > > qemu_cpu_kick(cpu); > > } > > > > +void cpu_remove_sync(CPUState *cpu) > > +{ > > + cpu->stop = true; > > + cpu->exit = true; > > + qemu_cpu_kick(cpu); > > It would be nicer for this to call the async cpu_remove() above, to > ensure they stay in sync. Makes sense, will incorporate this in the next iteration. Regards, Bharata.