|
@@ -181,10 +181,25 @@ static MemoryRegion *nvdimm_md_get_memory_region(MemoryDeviceState *md,
|
|
|
static void nvdimm_realize(PCDIMMDevice *dimm, Error **errp)
|
|
|
{
|
|
|
NVDIMMDevice *nvdimm = NVDIMM(dimm);
|
|
|
+ NVDIMMClass *ndc = NVDIMM_GET_CLASS(nvdimm);
|
|
|
|
|
|
if (!nvdimm->nvdimm_mr) {
|
|
|
nvdimm_prepare_memory_region(nvdimm, errp);
|
|
|
}
|
|
|
+
|
|
|
+ if (ndc->realize) {
|
|
|
+ ndc->realize(nvdimm, errp);
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+static void nvdimm_unrealize(PCDIMMDevice *dimm)
|
|
|
+{
|
|
|
+ NVDIMMDevice *nvdimm = NVDIMM(dimm);
|
|
|
+ NVDIMMClass *ndc = NVDIMM_GET_CLASS(nvdimm);
|
|
|
+
|
|
|
+ if (ndc->unrealize) {
|
|
|
+ ndc->unrealize(nvdimm);
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
/*
|
|
@@ -240,6 +255,7 @@ static void nvdimm_class_init(ObjectClass *oc, void *data)
|
|
|
DeviceClass *dc = DEVICE_CLASS(oc);
|
|
|
|
|
|
ddc->realize = nvdimm_realize;
|
|
|
+ ddc->unrealize = nvdimm_unrealize;
|
|
|
mdc->get_memory_region = nvdimm_md_get_memory_region;
|
|
|
device_class_set_props(dc, nvdimm_properties);
|
|
|
|