From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([209.51.188.92]:55687) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1guKdd-0006ia-GU for qemu-devel@nongnu.org; Thu, 14 Feb 2019 12:17:30 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1guKcK-0008WP-Qs for qemu-devel@nongnu.org; Thu, 14 Feb 2019 12:16:09 -0500 References: <20190205173306.20483-1-eric.auger@redhat.com> <20190205173306.20483-12-eric.auger@redhat.com> From: David Hildenbrand Message-ID: <278b9b9a-f299-1ce2-2a9d-566ef406c1c7@redhat.com> Date: Thu, 14 Feb 2019 18:15:42 +0100 MIME-Version: 1.0 In-Reply-To: <20190205173306.20483-12-eric.auger@redhat.com> Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [PATCH v6 11/18] hw/arm/virt: Add memory hotplug framework List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Eric Auger , eric.auger.pro@gmail.com, qemu-devel@nongnu.org, qemu-arm@nongnu.org, peter.maydell@linaro.org, shameerali.kolothum.thodi@huawei.com, imammedo@redhat.com Cc: dgilbert@redhat.com, david@gibson.dropbear.id.au, drjones@redhat.com On 05.02.19 18:32, Eric Auger wrote: > This patch adds the the memory hot-plug/hot-unplug infrastructure > in machvirt. It is still not enabled as no device memory is allocated. > > Signed-off-by: Eric Auger > Signed-off-by: Shameer Kolothum > Signed-off-by: Kwangwoo Lee > > --- > v4 -> v5: > - change in pc_dimm_pre_plug signature > - CONFIG_MEM_HOTPLUG replaced by CONFIG_MEM_DEVICE and CONFIG_DIMM > > v3 -> v4: > - check the memory device is not hotplugged > > v2 -> v3: > - change in pc_dimm_plug()'s signature > - add pc_dimm_pre_plug call > > v1 -> v2: > - s/virt_dimm_plug|unplug/virt_memory_plug|unplug > - s/pc_dimm_memory_plug/pc_dimm_plug > - reworded title and commit message > - added pre_plug cb > - don't handle get_memory_region failure anymore > --- > default-configs/arm-softmmu.mak | 2 ++ > hw/arm/virt.c | 64 ++++++++++++++++++++++++++++++++- > 2 files changed, 65 insertions(+), 1 deletion(-) > > diff --git a/default-configs/arm-softmmu.mak b/default-configs/arm-softmmu.mak > index be88870799..dc4624794f 100644 > --- a/default-configs/arm-softmmu.mak > +++ b/default-configs/arm-softmmu.mak > @@ -160,3 +160,5 @@ CONFIG_PCI_DESIGNWARE=y > CONFIG_STRONGARM=y > CONFIG_HIGHBANK=y > CONFIG_MUSICPAL=y > +CONFIG_MEM_DEVICE=y > +CONFIG_DIMM=y > diff --git a/hw/arm/virt.c b/hw/arm/virt.c > index f01886da22..783468ba77 100644 > --- a/hw/arm/virt.c > +++ b/hw/arm/virt.c > @@ -59,6 +59,8 @@ > #include "qapi/visitor.h" > #include "standard-headers/linux/input.h" > #include "hw/arm/smmuv3.h" > +#include "hw/mem/pc-dimm.h" > +#include "hw/mem/nvdimm.h" > > #define DEFINE_VIRT_MACHINE_LATEST(major, minor, latest) \ > static void virt_##major##_##minor##_class_init(ObjectClass *oc, \ > @@ -1763,6 +1765,49 @@ static const CPUArchIdList *virt_possible_cpu_arch_ids(MachineState *ms) > return ms->possible_cpus; > } > > +static void virt_memory_pre_plug(HotplugHandler *hotplug_dev, DeviceState *dev, > + Error **errp) > +{ > + const bool is_nvdimm = object_dynamic_cast(OBJECT(dev), TYPE_NVDIMM); > + > + if (dev->hotplugged) { > + error_setg(errp, "memory hotplug is not supported"); > + } > + > + if (is_nvdimm) { > + error_setg(errp, "nvdimm is not yet supported"); > + return; > + } > + > + pc_dimm_pre_plug(PC_DIMM(dev), MACHINE(hotplug_dev), NULL, errp); > +} > + > +static void virt_memory_plug(HotplugHandler *hotplug_dev, > + DeviceState *dev, Error **errp) > +{ > + VirtMachineState *vms = VIRT_MACHINE(hotplug_dev); > + Error *local_err = NULL; > + > + pc_dimm_plug(PC_DIMM(dev), MACHINE(vms), &local_err); > + > + error_propagate(errp, local_err); > +} > + > +static void virt_memory_unplug(HotplugHandler *hotplug_dev, > + DeviceState *dev, Error **errp) > +{ > + pc_dimm_unplug(PC_DIMM(dev), MACHINE(hotplug_dev)); > + object_unparent(OBJECT(dev)); Please note that this will soon change with [PATCH RFCv2 0/9] qdev: Hotplug handler chaining + virtio-pmem What you'll have to do then is to replace the object_unparent by a object_property_set_bool(OBJECT(dev), false, "realized", NULL); -- Thanks, David / dhildenb