[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-ppc] [RFC PATCH v0 3/5] spapr: Revert to address@hidden repres
From: |
Nathan Fontenot |
Subject: |
Re: [Qemu-ppc] [RFC PATCH v0 3/5] spapr: Revert to address@hidden representation for non-hotplugged memory |
Date: |
Tue, 04 Aug 2015 09:33:56 -0500 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Thunderbird/31.7.0 |
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 address@hidden
> 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 address@hidden would get initialized very early in boot, the same
time we currently init the address@hidden 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 address@hidden nodes is not removable
this
should not break any of the userspace tools.
-Nathan
> Signed-off-by: Bharata B Rao <address@hidden>
> ---
> 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 address@hidden 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 address@hidden 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);
>
- [Qemu-ppc] [RFC PATCH v0 0/5] spapr-next: Memory hotplug updates, Bharata B Rao, 2015/08/03
- [Qemu-ppc] [RFC PATCH v0 1/5] spapr: Provide better error message when slots exceed max allowed, Bharata B Rao, 2015/08/03
- [Qemu-ppc] [RFC PATCH v0 5/5] spapr: Move memory hotplug to RTAS_LOG_V6_HP_ID_DRC_COUNT type, Bharata B Rao, 2015/08/03
- [Qemu-ppc] [RFC PATCH v0 2/5] spapr: Populate ibm, associativity-lookup-arrays correctly for non-NUMA, Bharata B Rao, 2015/08/03
- [Qemu-ppc] [RFC PATCH v0 3/5] spapr: Revert to address@hidden representation for non-hotplugged memory, Bharata B Rao, 2015/08/03
- Re: [Qemu-ppc] [RFC PATCH v0 3/5] spapr: Revert to address@hidden representation for non-hotplugged memory,
Nathan Fontenot <=
- [Qemu-ppc] [RFC PATCH v0 4/5] spapr: Support hotplug by specifying DRC count, Bharata B Rao, 2015/08/03
Re: [Qemu-ppc] [RFC PATCH v0 0/5] spapr-next: Memory hotplug updates, David Gibson, 2015/08/11