From: Nathan Fontenot <nfont@linux.vnet.ibm.com>
To: Bharata B Rao <bharata@linux.vnet.ibm.com>, qemu-devel@nongnu.org
Cc: mdroth@linux.vnet.ibm.com, qemu-ppc@nongnu.org, agraf@suse.de,
david@gibson.dropbear.id.au
Subject: Re: [Qemu-devel] [RFC PATCH v0 3/5] spapr: Revert to memory@XXXX representation for non-hotplugged memory
Date: Tue, 04 Aug 2015 09:33:56 -0500 [thread overview]
Message-ID: <55C0CD54.7090108@linux.vnet.ibm.com> (raw)
In-Reply-To: <1438580143-587-4-git-send-email-bharata@linux.vnet.ibm.com>
On 08/03/2015 12:35 AM, Bharata B Rao wrote:
> Don't represent non-hotluggable memory under drconf node. With this
> we don't have to create DRC objects for them.
>
> The effect of this patch is that we revert back to memory@XXXX representation
> for all the memory specified with -m option and represent the cold
> plugged memory and hot-pluggable memory under
> ibm,dynamic-reconfiguration-memory.
>
I was looking through this and looking at the kernel code that inits memory
for power systems and I wanted to make sure this is really working and
you are seeing all the memory you expect to see in the guest.
Looking through the memory init code (powerpc/kerne/prom.c) it appears that
the additional memory@XXX would get initialized very early in boot, the same
time we currently init the memory@0 node. Then later in boot we would init
the rest of memory, lmbs in the dynamic-reconfiguration property.
Just wanting to make sure I'm understanding how this is working.
Also, since the memory specified in the memory@XXX nodes is not removable this
should not break any of the userspace tools.
-Nathan
> Signed-off-by: Bharata B Rao <bharata@linux.vnet.ibm.com>
> ---
> hw/ppc/spapr.c | 47 +++++++++--------------------------------------
> 1 file changed, 9 insertions(+), 38 deletions(-)
>
> diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c
> index 7f94f97..669dc43 100644
> --- a/hw/ppc/spapr.c
> +++ b/hw/ppc/spapr.c
> @@ -562,6 +562,7 @@ static int spapr_populate_memory(sPAPRMachineState *spapr, void *fdt)
> }
> if (!mem_start) {
> /* ppc_spapr_init() checks for rma_size <= node0_size already */
> + spapr_populate_memory_node(fdt, i, 0, spapr->rma_size);
> mem_start += spapr->rma_size;
> node_size -= spapr->rma_size;
> }
> @@ -724,9 +725,7 @@ static int spapr_populate_drconf_memory(sPAPRMachineState *spapr, void *fdt)
> int ret, i, offset;
> uint64_t lmb_size = SPAPR_MEMORY_BLOCK_SIZE;
> uint32_t prop_lmb_size[] = {0, cpu_to_be32(lmb_size)};
> - uint32_t nr_rma_lmbs = spapr->rma_size/lmb_size;
> - uint32_t nr_lmbs = machine->maxram_size/lmb_size - nr_rma_lmbs;
> - uint32_t nr_assigned_lmbs = machine->ram_size/lmb_size - nr_rma_lmbs;
> + uint32_t nr_lmbs = (machine->maxram_size - machine->ram_size)/lmb_size;
> uint32_t *int_buf, *cur_index, buf_len;
> int nr_nodes = nb_numa_nodes ? nb_numa_nodes : 1;
>
> @@ -759,15 +758,9 @@ static int spapr_populate_drconf_memory(sPAPRMachineState *spapr, void *fdt)
> for (i = 0; i < nr_lmbs; i++) {
> sPAPRDRConnector *drc;
> sPAPRDRConnectorClass *drck;
> - uint64_t addr;
> + uint64_t addr = i * lmb_size + spapr->hotplug_memory.base;;
> uint32_t *dynamic_memory = cur_index;
>
> - if (i < nr_assigned_lmbs) {
> - addr = (i + nr_rma_lmbs) * lmb_size;
> - } else {
> - addr = (i - nr_assigned_lmbs) * lmb_size +
> - spapr->hotplug_memory.base;
> - }
> drc = spapr_dr_connector_by_id(SPAPR_DR_CONNECTOR_TYPE_LMB,
> addr/lmb_size);
> g_assert(drc);
> @@ -842,8 +835,6 @@ int spapr_h_cas_compose_response(sPAPRMachineState *spapr,
> /* Generate memory nodes or ibm,dynamic-reconfiguration-memory node */
> if (memory_update && smc->dr_lmb_enabled) {
> _FDT((spapr_populate_drconf_memory(spapr, fdt)));
> - } else {
> - _FDT((spapr_populate_memory(spapr, fdt)));
> }
>
> /* Pack resulting tree */
> @@ -881,23 +872,10 @@ static void spapr_finalize_fdt(sPAPRMachineState *spapr,
> /* open out the base tree into a temp buffer for the final tweaks */
> _FDT((fdt_open_into(spapr->fdt_skel, fdt, FDT_MAX_SIZE)));
>
> - /*
> - * Add memory@0 node to represent RMA. Rest of the memory is either
> - * represented by memory nodes or ibm,dynamic-reconfiguration-memory
> - * node later during ibm,client-architecture-support call.
> - *
> - * If NUMA is configured, ensure that memory@0 ends up in the
> - * first memory-less node.
> - */
> - if (nb_numa_nodes) {
> - for (i = 0; i < nb_numa_nodes; ++i) {
> - if (numa_info[i].node_mem) {
> - spapr_populate_memory_node(fdt, i, 0, spapr->rma_size);
> - break;
> - }
> - }
> - } else {
> - spapr_populate_memory_node(fdt, 0, 0, spapr->rma_size);
> + ret = spapr_populate_memory(spapr, fdt);
> + if (ret < 0) {
> + fprintf(stderr, "couldn't setup memory nodes in fdt\n");
> + exit(1);
> }
>
> ret = spapr_populate_vdevice(spapr->vio_bus, fdt);
> @@ -1604,21 +1582,14 @@ static void spapr_create_lmb_dr_connectors(sPAPRMachineState *spapr)
> {
> MachineState *machine = MACHINE(spapr);
> uint64_t lmb_size = SPAPR_MEMORY_BLOCK_SIZE;
> - uint32_t nr_rma_lmbs = spapr->rma_size/lmb_size;
> - uint32_t nr_lmbs = machine->maxram_size/lmb_size - nr_rma_lmbs;
> - uint32_t nr_assigned_lmbs = machine->ram_size/lmb_size - nr_rma_lmbs;
> + uint32_t nr_lmbs = (machine->maxram_size - machine->ram_size)/lmb_size;
> int i;
>
> for (i = 0; i < nr_lmbs; i++) {
> sPAPRDRConnector *drc;
> uint64_t addr;
>
> - if (i < nr_assigned_lmbs) {
> - addr = (i + nr_rma_lmbs) * lmb_size;
> - } else {
> - addr = (i - nr_assigned_lmbs) * lmb_size +
> - spapr->hotplug_memory.base;
> - }
> + addr = i * lmb_size + spapr->hotplug_memory.base;
> drc = spapr_dr_connector_new(OBJECT(spapr), SPAPR_DR_CONNECTOR_TYPE_LMB,
> addr/lmb_size);
> qemu_register_reset(spapr_drc_reset, drc);
>
next prev parent reply other threads:[~2015-08-04 14:34 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-08-03 5:35 [Qemu-devel] [RFC PATCH v0 0/5] spapr-next: Memory hotplug updates Bharata B Rao
2015-08-03 5:35 ` [Qemu-devel] [RFC PATCH v0 1/5] spapr: Provide better error message when slots exceed max allowed Bharata B Rao
2015-08-03 6:43 ` David Gibson
2015-08-03 5:35 ` [Qemu-devel] [RFC PATCH v0 2/5] spapr: Populate ibm, associativity-lookup-arrays correctly for non-NUMA Bharata B Rao
2015-08-03 5:35 ` [Qemu-devel] [RFC PATCH v0 3/5] spapr: Revert to memory@XXXX representation for non-hotplugged memory Bharata B Rao
2015-08-04 14:33 ` Nathan Fontenot [this message]
2015-08-05 3:42 ` Bharata B Rao
2015-08-03 5:35 ` [Qemu-devel] [RFC PATCH v0 4/5] spapr: Support hotplug by specifying DRC count Bharata B Rao
2015-08-03 6:55 ` David Gibson
2015-08-03 7:53 ` Bharata B Rao
2015-08-03 22:32 ` Michael Roth
2015-08-04 4:36 ` David Gibson
2015-08-03 5:35 ` [Qemu-devel] [RFC PATCH v0 5/5] spapr: Move memory hotplug to RTAS_LOG_V6_HP_ID_DRC_COUNT type Bharata B Rao
2015-08-12 1:32 ` [Qemu-devel] [RFC PATCH v0 0/5] spapr-next: Memory hotplug updates 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=55C0CD54.7090108@linux.vnet.ibm.com \
--to=nfont@linux.vnet.ibm.com \
--cc=agraf@suse.de \
--cc=bharata@linux.vnet.ibm.com \
--cc=david@gibson.dropbear.id.au \
--cc=mdroth@linux.vnet.ibm.com \
--cc=qemu-devel@nongnu.org \
--cc=qemu-ppc@nongnu.org \
/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).