Hi David, On 2/14/19 6:15 PM, David Hildenbrand wrote: > 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 <[email protected]> >> Signed-off-by: Shameer Kolothum <[email protected]> >> Signed-off-by: Kwangwoo Lee <[email protected]> >> >> --- >> 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); Noted.
Thanks for the heads up! Eric > >
