@@ -270,12 +270,22 @@ static MemoryRegion *pc_dimm_get_memory_region(PCDIMMDevice *dimm)
return host_memory_backend_get_memory(dimm->hostmem, &error_abort);
}
+static void pc_dimm_unrealize(DeviceState *dev, Error **errp)
+{
+ PCDIMMDevice *dimm = PC_DIMM(dev);
+ MemoryRegion *mr = pc_dimm_get_memory_region(dimm);
+
+ memory_region_del_subregion(mr->container, mr);
+ vmstate_unregister_ram(mr, dev);
+}
+
static void pc_dimm_class_init(ObjectClass *oc, void *data)
{
DeviceClass *dc = DEVICE_CLASS(oc);
PCDIMMDeviceClass *ddc = PC_DIMM_CLASS(oc);
dc->realize = pc_dimm_realize;
+ dc->unrealize = pc_dimm_unrealize;
dc->props = pc_dimm_properties;
ddc->get_memory_region = pc_dimm_get_memory_region;