From: Bharata B Rao <bharata@linux.vnet.ibm.com>
To: David Gibson <david@gibson.dropbear.id.au>
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
Subject: Re: [Qemu-devel] [RFC PATCH v4 08/11] spapr: CPU hotplug support
Date: Wed, 9 Sep 2015 12:22:28 +0530 [thread overview]
Message-ID: <20150909065228.GG17433@in.ibm.com> (raw)
In-Reply-To: <20150904065838.GA6537@voom.redhat.com>
On Fri, Sep 04, 2015 at 04:58:38PM +1000, David Gibson wrote:
> On Thu, Aug 06, 2015 at 10:57:14AM +0530, Bharata B Rao wrote:
> > Support CPU hotplug via device-add command. Set up device tree
> > entries for the hotplugged CPU core and use the exising EPOW event
> > infrastructure to send CPU hotplug notification to the guest.
> >
> > Create only cores explicitly from boot path as well as hotplug path
> > and let the ->plug() handler of the core create the threads of the core.
> >
> > Also support cold plugged CPUs that are specified by -device option
> > on cmdline.
> >
> > Signed-off-by: Bharata B Rao <bharata@linux.vnet.ibm.com>
> > ---
> > hw/ppc/spapr.c | 166 +++++++++++++++++++++++++++++++++++++++++++-
> > hw/ppc/spapr_events.c | 3 +
> > hw/ppc/spapr_rtas.c | 11 +++
> > target-ppc/translate_init.c | 8 +++
> > 4 files changed, 186 insertions(+), 2 deletions(-)
> >
> > diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c
> > index a106980..74637b3 100644
> > --- a/hw/ppc/spapr.c
> > +++ b/hw/ppc/spapr.c
> > @@ -599,6 +599,18 @@ static void spapr_populate_cpu_dt(CPUState *cs, void *fdt, int offset,
> > unsigned sockets = opts ? qemu_opt_get_number(opts, "sockets", 0) : 0;
> > uint32_t cpus_per_socket = sockets ? (smp_cpus / sockets) : 1;
> > uint32_t pft_size_prop[] = {0, cpu_to_be32(spapr->htab_shift)};
> > + sPAPRMachineClass *smc = SPAPR_MACHINE_GET_CLASS(qdev_get_machine());
> > + sPAPRDRConnector *drc;
> > + sPAPRDRConnectorClass *drck;
> > + int drc_index;
> > +
> > + if (smc->dr_cpu_enabled) {
> > + drc = spapr_dr_connector_by_id(SPAPR_DR_CONNECTOR_TYPE_CPU, index);
> > + g_assert(drc);
> > + drck = SPAPR_DR_CONNECTOR_GET_CLASS(drc);
> > + drc_index = drck->get_index(drc);
> > + _FDT((fdt_setprop_cell(fdt, offset, "ibm,my-drc-index", drc_index)));
> > + }
> >
> > _FDT((fdt_setprop_cell(fdt, offset, "reg", index)));
> > _FDT((fdt_setprop_string(fdt, offset, "device_type", "cpu")));
> > @@ -1686,6 +1698,7 @@ static void ppc_spapr_init(MachineState *machine)
> > char *filename;
> > int smt = kvmppc_smt_threads();
> > int smp_max_cores = DIV_ROUND_UP(max_cpus, smp_threads);
> > + int smp_cores = DIV_ROUND_UP(smp_cpus, smp_threads);
>
> This shadows the global variable 'smp_cores' which has a different
> meaning, so this is a very bad idea.
Oh ok, will fix this.
> > static void spapr_machine_device_plug(HotplugHandler *hotplug_dev,
> > DeviceState *dev, Error **errp)
> > {
> > sPAPRMachineClass *smc = SPAPR_MACHINE_GET_CLASS(qdev_get_machine());
> > + sPAPRMachineState *ms = SPAPR_MACHINE(hotplug_dev);
> >
> > if (object_dynamic_cast(OBJECT(dev), TYPE_PC_DIMM)) {
> > int node;
> > @@ -2192,6 +2330,29 @@ static void spapr_machine_device_plug(HotplugHandler *hotplug_dev,
> > }
> >
> > spapr_memory_plug(hotplug_dev, dev, node, errp);
> > + } else if (object_dynamic_cast(OBJECT(dev), TYPE_CPU)) {
> > + CPUState *cs = CPU(dev);
> > + PowerPCCPU *cpu = POWERPC_CPU(cs);
> > +
> > + if (!smc->dr_cpu_enabled && dev->hotplugged) {
> > + error_setg(errp, "CPU hotplug not supported for this machine");
> > + cpu_remove_sync(cs);
> > + return;
> > + }
> > +
> > + if (((smp_cpus % smp_threads) || (max_cpus % smp_threads)) &&
> > + dev->hotplugged) {
> > + error_setg(errp, "CPU hotplug not supported for the topology "
> > + "with %d threads %d cpus and %d maxcpus since "
> > + "CPUs can't be fit fully into cores",
> > + smp_threads, smp_cpus, max_cpus);
> > + cpu_remove_sync(cs);
>
> I'd kind of prefer to reject partial cores at initial startup, rather
> than only when we actually attempt to hotplug.
I am enforcing correct topologies only while hotplugging to ensure that
existing guests with such topologies continue to work. If that is not
required then this explicit check for only hotplugged CPUs won't be needed.
If Thomas' patch ensures that we never end up in topologies with partially
filled cores, then this check isn't required.
Regards,
Bharata.
next prev parent reply other threads:[~2015-09-09 6:53 UTC|newest]
Thread overview: 36+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-08-06 5:27 [Qemu-devel] [RFC PATCH v4 00/11] sPAPR CPU hotplug Bharata B Rao
2015-08-06 5:27 ` [Qemu-devel] [RFC PATCH v4 01/11] exec: Remove cpu from cpus list during cpu_exec_exit() Bharata B Rao
2015-09-04 5:31 ` David Gibson
2015-09-09 5:52 ` Bharata B Rao
2015-09-09 7:41 ` Zhu Guihua
2015-09-09 7:56 ` Bharata B Rao
2015-11-12 9:11 ` Zhu Guihua
2015-11-12 9:30 ` Bharata B Rao
2015-11-12 9:41 ` Zhu Guihua
2015-11-12 9:56 ` Andreas Färber
2015-11-12 11:40 ` Bharata B Rao
2015-08-06 5:27 ` [Qemu-devel] [RFC PATCH v4 02/11] exec: Do vmstate unregistration from cpu_exec_exit() Bharata B Rao
2015-09-04 6:03 ` David Gibson
2015-09-09 5:56 ` Bharata B Rao
2015-08-06 5:27 ` [Qemu-devel] [RFC PATCH v4 03/11] cpus: Reclaim vCPU objects Bharata B Rao
2015-09-04 6:09 ` David Gibson
2015-08-06 5:27 ` [Qemu-devel] [RFC PATCH v4 04/11] cpus: Add a sync version of cpu_remove() Bharata B Rao
2015-09-04 6:11 ` David Gibson
2015-09-09 5:57 ` Bharata B Rao
2015-08-06 5:27 ` [Qemu-devel] [RFC PATCH v4 05/11] xics_kvm: Add cpu_destroy method to XICS Bharata B Rao
2015-08-07 11:33 ` Bharata B Rao
2015-08-06 5:27 ` [Qemu-devel] [RFC PATCH v4 06/11] spapr: Create pseries-2.5 machine Bharata B Rao
2015-08-06 5:27 ` [Qemu-devel] [RFC PATCH v4 07/11] spapr: Enable CPU hotplug for pseries-2.5 and add CPU DRC DT entries Bharata B Rao
2015-09-04 6:28 ` David Gibson
2015-08-06 5:27 ` [Qemu-devel] [RFC PATCH v4 08/11] spapr: CPU hotplug support Bharata B Rao
2015-09-04 6:58 ` David Gibson
2015-09-09 6:52 ` Bharata B Rao [this message]
2015-08-06 5:27 ` [Qemu-devel] [RFC PATCH v4 09/11] spapr: Support topologies with unfilled cores Bharata B Rao
2015-09-04 7:01 ` David Gibson
2015-09-04 8:44 ` Thomas Huth
2015-09-09 6:58 ` Bharata B Rao
2015-08-06 5:27 ` [Qemu-devel] [RFC PATCH v4 10/11] spapr: CPU hot unplug support Bharata B Rao
2015-08-06 5:27 ` [Qemu-devel] [RFC PATCH v4 11/11] target-ppc: Enable CPU hotplug for POWER8 CPU family Bharata B Rao
2015-08-06 8:42 ` [Qemu-devel] [RFC PATCH v4 00/11] sPAPR CPU hotplug Zhu Guihua
2015-08-10 3:31 ` Bharata B Rao
2015-08-12 2:56 ` David Gibson
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=20150909065228.GG17433@in.ibm.com \
--to=bharata@linux.vnet.ibm.com \
--cc=afaerber@suse.de \
--cc=agraf@suse.de \
--cc=aik@ozlabs.ru \
--cc=david@gibson.dropbear.id.au \
--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 \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).