From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:39900) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YpXXV-0001jT-Dd for qemu-devel@nongnu.org; Tue, 05 May 2015 03:45:14 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1YpXXQ-00032V-2o for qemu-devel@nongnu.org; Tue, 05 May 2015 03:45:13 -0400 Date: Tue, 5 May 2015 17:33:33 +1000 From: David Gibson Message-ID: <20150505073333.GR14090@voom.redhat.com> References: <1429858066-12088-1-git-send-email-bharata@linux.vnet.ibm.com> <1429858066-12088-22-git-send-email-bharata@linux.vnet.ibm.com> MIME-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha1; protocol="application/pgp-signature"; boundary="Kuk/n493crKO4rgR" Content-Disposition: inline In-Reply-To: <1429858066-12088-22-git-send-email-bharata@linux.vnet.ibm.com> Subject: Re: [Qemu-devel] [RFC PATCH v3 21/24] spapr: Initialize hotplug memory address space List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Bharata B Rao 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 --Kuk/n493crKO4rgR Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Content-Transfer-Encoding: quoted-printable On Fri, Apr 24, 2015 at 12:17:43PM +0530, Bharata B Rao wrote: > Initialize a hotplug memory region under which all the hotplugged > memory is accommodated. Also enable memory hotplug by setting > CONFIG_MEM_HOTPLUG. >=20 > Modelled on i386 memory hotplug. >=20 > Signed-off-by: Bharata B Rao So, the cpu hotplug stuff has been caught up in these generic level design discussions. Could you split out the memory hotplug part of this series so that we might be able to move forwards with that while the cpu hotplug discussion continues? > --- > default-configs/ppc64-softmmu.mak | 1 + > hw/ppc/spapr.c | 38 +++++++++++++++++++++++++++++++++= +++++ > include/hw/ppc/spapr.h | 12 ++++++++++++ > 3 files changed, 51 insertions(+) >=20 > diff --git a/default-configs/ppc64-softmmu.mak b/default-configs/ppc64-so= ftmmu.mak > index 22ef132..16b3011 100644 > --- a/default-configs/ppc64-softmmu.mak > +++ b/default-configs/ppc64-softmmu.mak > @@ -51,3 +51,4 @@ CONFIG_XICS_KVM=3D$(and $(CONFIG_PSERIES),$(CONFIG_KVM)) > # For PReP > CONFIG_MC146818RTC=3Dy > CONFIG_ISA_TESTDEV=3Dy > +CONFIG_MEM_HOTPLUG=3Dy > diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c > index 910a50f..9dc4c36 100644 > --- a/hw/ppc/spapr.c > +++ b/hw/ppc/spapr.c > @@ -125,6 +125,9 @@ struct sPAPRMachineState { > =20 > /*< public >*/ > char *kvm_type; > + ram_addr_t hotplug_memory_base; > + MemoryRegion hotplug_memory; > + bool enforce_aligned_dimm; As mentioned on the earlier version, on ppc we don't have compatibility reasons we need to have a mode for unaligned dimms. Get rid of this bool and treat it as always on instead. > }; > =20 > sPAPREnvironment *spapr; > @@ -1514,6 +1517,7 @@ static void ppc_spapr_init(MachineState *machine) > QemuOpts *opts =3D qemu_opts_find(qemu_find_opts("smp-opts"), NULL); > int sockets =3D opts ? qemu_opt_get_number(opts, "sockets", 0) : 0; > int cores =3D (smp_cpus/smp_threads) ? smp_cpus/smp_threads : 1; > + sPAPRMachineState *ms =3D SPAPR_MACHINE(machine); > =20 > sockets =3D sockets ? sockets : cores; > msi_supported =3D true; > @@ -1613,6 +1617,36 @@ static void ppc_spapr_init(MachineState *machine) > memory_region_add_subregion(sysmem, 0, rma_region); > } > =20 > + /* initialize hotplug memory address space */ > + if (machine->ram_size < machine->maxram_size) { > + ram_addr_t hotplug_mem_size =3D > + machine->maxram_size - machine->ram_size; > + > + if (machine->ram_slots > SPAPR_MAX_RAM_SLOTS) { > + error_report("unsupported amount of memory slots: %"PRIu64, > + machine->ram_slots); > + exit(EXIT_FAILURE); > + } > + > + ms->hotplug_memory_base =3D ROUND_UP(machine->ram_size, > + SPAPR_HOTPLUG_MEM_ALIGN); > + > + if (ms->enforce_aligned_dimm) { > + hotplug_mem_size +=3D SPAPR_HOTPLUG_MEM_ALIGN * machine->ram= _slots; > + } > + > + if ((ms->hotplug_memory_base + hotplug_mem_size) < hotplug_mem_s= ize) { > + error_report("unsupported amount of maximum memory: " RAM_AD= DR_FMT, > + machine->maxram_size); > + exit(EXIT_FAILURE); > + } > + > + memory_region_init(&ms->hotplug_memory, OBJECT(ms), > + "hotplug-memory", hotplug_mem_size); > + memory_region_add_subregion(sysmem, ms->hotplug_memory_base, > + &ms->hotplug_memory); > + } > + > filename =3D qemu_find_file(QEMU_FILE_TYPE_BIOS, "spapr-rtas.bin"); > spapr->rtas_size =3D get_image_size(filename); > spapr->rtas_blob =3D g_malloc(spapr->rtas_size); > @@ -1844,11 +1878,15 @@ static void spapr_set_kvm_type(Object *obj, const= char *value, Error **errp) > =20 > static void spapr_machine_initfn(Object *obj) > { > + sPAPRMachineState *ms =3D SPAPR_MACHINE(obj); > + > object_property_add_str(obj, "kvm-type", > spapr_get_kvm_type, spapr_set_kvm_type, NULL= ); > object_property_set_description(obj, "kvm-type", > "Specifies the KVM virtualization mo= de (HV, PR)", > NULL); > + > + ms->enforce_aligned_dimm =3D true; > } > =20 > static void ppc_cpu_do_nmi_on_cpu(void *arg) > diff --git a/include/hw/ppc/spapr.h b/include/hw/ppc/spapr.h > index ecac6e3..53560e9 100644 > --- a/include/hw/ppc/spapr.h > +++ b/include/hw/ppc/spapr.h > @@ -542,6 +542,18 @@ struct sPAPREventLogEntry { > =20 > #define SPAPR_MEMORY_BLOCK_SIZE (1 << 28) /* 256MB */ > =20 > +/* > + * This defines the maximum number of DIMM slots we can have for sPAPR > + * guest. This is not defined by sPAPR but we are defining it to 4096 sl= ots > + * here. With the worst case addition of SPAPR_MEMORY_BLOCK_SIZE > + * (256MB) memory per slot, we should be able to support 1TB of guest > + * hotpluggable memory. > + */ > +#define SPAPR_MAX_RAM_SLOTS (1ULL << 12) > + > +/* 1GB alignment for hotplug memory region */ > +#define SPAPR_HOTPLUG_MEM_ALIGN (1ULL << 30) > + > void spapr_events_init(sPAPREnvironment *spapr); > void spapr_events_fdt_skel(void *fdt, uint32_t epow_irq); > int spapr_h_cas_compose_response(target_ulong addr, target_ulong size); --=20 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 --Kuk/n493crKO4rgR Content-Type: application/pgp-signature -----BEGIN PGP SIGNATURE----- Version: GnuPG v1 iQIcBAEBAgAGBQJVSHJNAAoJEGw4ysog2bOSDdsP/R149YL8yUXkjlJUO8gPBvRB rtbblEav2z9zjd+Ytxw00d8Enye2tVd5HHAT8a984eLZPMXEbyMCsU0Vi/GKrQB9 01W5xseHfyyx9i0pQXhfLrPq0vriifyYXfTf+4OJPdsFKR3YffUE5BCCv+5b52sX jUYT0uQJ3GmCCWPv5sUyuqtEGTzwbUzGg8dEU5LbtdB/6sUuStfna/7WGPkqW4dS qhVBWLszHH/syyCDRaKaet+QCo3JYp2Yjs00u0oK/2uQkEVEXR4VeLjYPtogTFXO 26Oa85tl67eKSIDhpkcmvdamBIgJxsV1H49NCbDZ4ErpZnYvcDzZUsuz2dNJvn/t yI1taUT/1Jku55uBVl/aducdOi9LLrs9HUMfMLOieuaFcX2qQ6mBJIl5POzMoU4Q G4H3v+vW91Z8lannDawMWasO3R8UEr5XKLOpFiP6d7cCW6ztWF8f+fRvsK6UclKG 8fc3tFOQSxgrOV8HjdAVtWiIvwoqvCtcaCh8+GxQ4AfwVfk17EYxZwGxOx30GHDk z7A7b6hNN4epSa//IeOwGfWMPWLLZLVmob84QfPiLORYV9WQIMgGHdugPQinMOwl i6lpBoZvtDMLdtld2iJIzDPykTT8paBS2+vFKu3HiGMwQfO1HEmES7ISf4W6S5fP XUKa+QN6d+v4QoKwhRAD =cN7Q -----END PGP SIGNATURE----- --Kuk/n493crKO4rgR--