All of lore.kernel.org
 help / color / mirror / Atom feed
From: David Gibson <david@gibson.dropbear.id.au>
To: Bharata B Rao <bharata@linux.vnet.ibm.com>
Cc: Zhu Guihua <zhugh.fnst@cn.fujitsu.com>,
	mdroth@linux.vnet.ibm.com, aik@ozlabs.ru, agraf@suse.de,
	qemu-devel@nongnu.org, Chen Fan <chen.fan.fnst@cn.fujitsu.com>,
	qemu-ppc@nongnu.org, tyreld@linux.vnet.ibm.com,
	nfont@linux.vnet.ibm.com, Gu Zheng <guz.fnst@cn.fujitsu.com>,
	imammedo@redhat.com, afaerber@suse.de
Subject: Re: [Qemu-devel] [RFC PATCH v3 17/24] cpus: Reclaim vCPU objects
Date: Thu, 7 May 2015 11:06:51 +1000	[thread overview]
Message-ID: <20150507010651.GF1407@voom.redhat.com> (raw)
In-Reply-To: <20150506063757.GP18380@in.ibm.com>

[-- Attachment #1: Type: text/plain, Size: 4357 bytes --]

On Wed, May 06, 2015 at 12:07:57PM +0530, Bharata B Rao wrote:
> On Tue, May 05, 2015 at 05:20:04PM +1000, David Gibson wrote:
> > On Fri, Apr 24, 2015 at 12:17:39PM +0530, Bharata B Rao wrote:
> > > From: Gu Zheng <guz.fnst@cn.fujitsu.com>
> > > 
> > > In order to deal well with the kvm vcpus (which can not be removed without any
> > > protection), we do not close KVM vcpu fd, just record and mark it as stopped
> > > into a list, so that we can reuse it for the appending cpu hot-add request if
> > > possible. It is also the approach that kvm guys suggested:
> > > https://www.mail-archive.com/kvm@vger.kernel.org/msg102839.html
> > > 
> > > This patch also adds a QOM API object_has_no_children(Object *obj)
> > > that checks whether a given object has any child objects. This API
> > > is needed to release CPU core and socket objects when a vCPU is destroyed.
> > 
> > I'm guessing this commit message needs updating, since you seem to
> > have split this out into the previous patch.
> > 
> > > Signed-off-by: Chen Fan <chen.fan.fnst@cn.fujitsu.com>
> > > Signed-off-by: Gu Zheng <guz.fnst@cn.fujitsu.com>
> > > Signed-off-by: Zhu Guihua <zhugh.fnst@cn.fujitsu.com>
> > > Signed-off-by: Bharata B Rao <bharata@linux.vnet.ibm.com>
> > >                [Added core and socket removal bits]
> > > ---
> > >  cpus.c               | 67 ++++++++++++++++++++++++++++++++++++++++++++++++++++
> > >  include/qom/cpu.h    | 11 +++++++++
> > >  include/sysemu/kvm.h |  1 +
> > >  kvm-all.c            | 57 +++++++++++++++++++++++++++++++++++++++++++-
> > >  kvm-stub.c           |  5 ++++
> > >  5 files changed, 140 insertions(+), 1 deletion(-)
> > > 
> > > diff --git a/cpus.c b/cpus.c
> > > index 0fac143..325f8a6 100644
> > > --- a/cpus.c
> > > +++ b/cpus.c
> > > @@ -858,6 +858,47 @@ void async_run_on_cpu(CPUState *cpu, void (*func)(void *data), void *data)
> > >      qemu_cpu_kick(cpu);
> > >  }
> > >  
> > > +static void qemu_destroy_cpu_core(Object *core)
> > > +{
> > > +    Object *socket = core->parent;
> > > +
> > > +    object_unparent(core);
> > > +    if (socket && object_has_no_children(socket)) {
> > > +        object_unparent(socket);
> > > +    }
> > 
> > This seems a bit odd to me.  I thought the general idea of the new
> > approaches to cpu hotplug meant that the hotplug sequence started from
> > the top (the socket or core) and worked down to the threads.  Rather
> > than starting at the thread, and working up to the core and socket
> > level.
> 
> Yes that's true for hotplug as well as hot unplug curently. Plug or
> unplug starts at socket, moves down to cores and threads.
> 
> However when the unplug request comes down to the thread, we have to
> destroy the vCPU and that's when we end up in this part of the code. Here
> the thread (vCPU) unparents itself from the core. The core can't unparent
> untill all its threads have unparented themselves. When all threads of a
> core are done unparenting, core goes ahead and unparents itself from
> its parent socket. Similarly socket can unparent when all cores under
> it have unparented themselves from the socket.

Why can't the core unplug routine propagte the unplug down to the
threads, let that complete, then do the per-core unplug stuff and
remove itself?

Is there an asynchronous callback in here somewhere?

> This is the code that ensures that the socket device object finally
> gets cleared and the id associated with the hot removed socket device
> is available for reuse with next hotplug.
> 
> > 
> > > +}
> > > +
> > > +static void qemu_kvm_destroy_vcpu(CPUState *cpu)
> > > +{
> > > +    Object *thread = OBJECT(cpu);
> > > +    Object *core = thread->parent;
> > > +
> > > +    CPU_REMOVE(cpu);
> > > +
> > > +    if (kvm_destroy_vcpu(cpu) < 0) {
> > > +        error_report("kvm_destroy_vcpu failed.\n");
> > > +        exit(EXIT_FAILURE);
> > > +    }
> > > +
> > > +    object_unparent(thread);
> > > +    if (core && object_has_no_children(core)) {
> > > +        qemu_destroy_cpu_core(core);
> > > +    }
> > > +}
> > > +
> 
> Regards,
> Bharata.
> 

-- 
David Gibson			| I'll have my music baroque, and my code
david AT gibson.dropbear.id.au	| minimalist, thank you.  NOT _the_ _other_
				| _way_ _around_!
http://www.ozlabs.org/~dgibson

[-- Attachment #2: Type: application/pgp-signature, Size: 819 bytes --]

  reply	other threads:[~2015-05-07  1:32 UTC|newest]

Thread overview: 74+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-04-24  6:47 [Qemu-devel] [RFC PATCH v3 00/24] CPU and Memory hotplug for PowerPC sPAPR guests Bharata B Rao
2015-04-24  6:47 ` [Qemu-devel] [RFC PATCH v3 01/24] spapr: enable PHB/CPU/LMB hotplug for pseries-2.3 Bharata B Rao
2015-04-24  6:47 ` [Qemu-devel] [RFC PATCH v3 02/24] spapr: Add DRC dt entries for CPUs Bharata B Rao
2015-05-04 11:46   ` David Gibson
2015-04-24  6:47 ` [Qemu-devel] [RFC PATCH v3 03/24] spapr: Consider max_cpus during xics initialization Bharata B Rao
2015-04-24  6:47 ` [Qemu-devel] [RFC PATCH v3 04/24] spapr: Support ibm, lrdr-capacity device tree property Bharata B Rao
2015-04-24  6:47 ` [Qemu-devel] [RFC PATCH v3 05/24] spapr: Reorganize CPU dt generation code Bharata B Rao
2015-04-26 11:47   ` Bharata B Rao
2015-04-27  5:36     ` Bharata B Rao
2015-05-04 12:01       ` David Gibson
2015-05-04 11:59   ` David Gibson
2015-04-24  6:47 ` [Qemu-devel] [RFC PATCH v3 06/24] spapr: Consolidate cpu init code into a routine Bharata B Rao
2015-05-04 16:10   ` Thomas Huth
2015-05-06  4:28     ` Bharata B Rao
2015-05-06  6:32       ` Thomas Huth
2015-05-06  8:45         ` Bharata B Rao
2015-05-06  9:37           ` Thomas Huth
2015-04-24  6:47 ` [Qemu-devel] [RFC PATCH v3 07/24] cpu: Prepare Socket container type Bharata B Rao
2015-05-05  1:47   ` David Gibson
2015-05-06  4:36     ` Bharata B Rao
2015-04-24  6:47 ` [Qemu-devel] [RFC PATCH v3 08/24] ppc: Prepare CPU socket/core abstraction Bharata B Rao
2015-05-04 15:15   ` Thomas Huth
2015-05-06  4:40     ` Bharata B Rao
2015-05-06  6:52       ` Thomas Huth
2015-05-05  6:46   ` David Gibson
2015-04-24  6:47 ` [Qemu-devel] [RFC PATCH v3 09/24] spapr: Add CPU hotplug handler Bharata B Rao
2015-04-24  6:47 ` [Qemu-devel] [RFC PATCH v3 10/24] ppc: Update cpu_model in MachineState Bharata B Rao
2015-05-05  6:49   ` David Gibson
2015-05-06  4:49     ` Bharata B Rao
2015-04-24  6:47 ` [Qemu-devel] [RFC PATCH v3 11/24] ppc: Create sockets and cores for CPUs Bharata B Rao
2015-05-05  6:52   ` David Gibson
2015-04-24  6:47 ` [Qemu-devel] [RFC PATCH v3 12/24] spapr: CPU hotplug support Bharata B Rao
2015-05-04 15:53   ` Thomas Huth
2015-05-06  5:37     ` Bharata B Rao
2015-05-05  6:59   ` David Gibson
2015-05-06  6:14     ` Bharata B Rao
2015-05-07  1:03       ` David Gibson
2015-04-24  6:47 ` [Qemu-devel] [RFC PATCH v3 13/24] cpus: Add Error argument to cpu_exec_init() Bharata B Rao
2015-05-05  7:01   ` David Gibson
2015-04-24  6:47 ` [Qemu-devel] [RFC PATCH v3 14/24] cpus: Convert cpu_index into a bitmap Bharata B Rao
2015-05-05  7:10   ` David Gibson
2015-04-24  6:47 ` [Qemu-devel] [RFC PATCH v3 15/24] ppc: Move cpu_exec_init() call to realize function Bharata B Rao
2015-05-05  7:12   ` David Gibson
2015-04-24  6:47 ` [Qemu-devel] [RFC PATCH v3 16/24] qom: Introduce object_has_no_children() API Bharata B Rao
2015-05-05  7:13   ` David Gibson
2015-04-24  6:47 ` [Qemu-devel] [RFC PATCH v3 17/24] cpus: Reclaim vCPU objects Bharata B Rao
2015-05-05  7:20   ` David Gibson
2015-05-06  6:37     ` Bharata B Rao
2015-05-07  1:06       ` David Gibson [this message]
2015-04-24  6:47 ` [Qemu-devel] [RFC PATCH v3 18/24] xics_kvm: Don't enable KVM_CAP_IRQ_XICS if already enabled Bharata B Rao
2015-05-05  7:22   ` David Gibson
2015-05-06  5:42     ` Bharata B Rao
2015-05-07  1:07       ` David Gibson
2015-04-24  6:47 ` [Qemu-devel] [RFC PATCH v3 19/24] xics_kvm: Add cpu_destroy method to XICS Bharata B Rao
2015-04-24  6:47 ` [Qemu-devel] [RFC PATCH v3 20/24] spapr: CPU hot unplug support Bharata B Rao
2015-05-05  7:28   ` David Gibson
2015-05-06  7:55     ` Bharata B Rao
2015-05-07  1:09       ` David Gibson
2015-04-24  6:47 ` [Qemu-devel] [RFC PATCH v3 21/24] spapr: Initialize hotplug memory address space Bharata B Rao
2015-05-05  7:33   ` David Gibson
2015-05-06  7:58     ` Bharata B Rao
2015-05-05  8:48   ` Igor Mammedov
2015-05-06  8:23     ` Bharata B Rao
2015-05-07  1:12       ` David Gibson
2015-05-07  5:01         ` Bharata B Rao
2015-04-24  6:47 ` [Qemu-devel] [RFC PATCH v3 22/24] numa: API to lookup NUMA node by address Bharata B Rao
2015-05-05  7:35   ` David Gibson
2015-04-24  6:47 ` [Qemu-devel] [RFC PATCH v3 23/24] spapr: Support ibm, dynamic-reconfiguration-memory Bharata B Rao
2015-05-05  7:40   ` David Gibson
2015-05-06  8:27     ` Bharata B Rao
2015-05-07  1:13       ` David Gibson
2015-04-24  6:47 ` [Qemu-devel] [RFC PATCH v3 24/24] spapr: Memory hotplug support Bharata B Rao
2015-05-05  7:45   ` David Gibson
2015-05-06  8:30     ` Bharata B Rao

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20150507010651.GF1407@voom.redhat.com \
    --to=david@gibson.dropbear.id.au \
    --cc=afaerber@suse.de \
    --cc=agraf@suse.de \
    --cc=aik@ozlabs.ru \
    --cc=bharata@linux.vnet.ibm.com \
    --cc=chen.fan.fnst@cn.fujitsu.com \
    --cc=guz.fnst@cn.fujitsu.com \
    --cc=imammedo@redhat.com \
    --cc=mdroth@linux.vnet.ibm.com \
    --cc=nfont@linux.vnet.ibm.com \
    --cc=qemu-devel@nongnu.org \
    --cc=qemu-ppc@nongnu.org \
    --cc=tyreld@linux.vnet.ibm.com \
    --cc=zhugh.fnst@cn.fujitsu.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.