summaryrefslogtreecommitdiffstats
path: root/hw/mem
diff options
context:
space:
mode:
authorShivaprasad G Bhat2022-02-18 08:34:13 +0100
committerCédric Le Goater2022-02-18 08:34:13 +0100
commit3e35960bf130f759c1b6d72f6a8c08039c08ec16 (patch)
tree7067fee7e1e0888e88f5808bc0e71e27c90b81c1 /hw/mem
parentMerge remote-tracking branch 'remotes/alistair/tags/pull-riscv-to-apply-20220... (diff)
downloadqemu-3e35960bf130f759c1b6d72f6a8c08039c08ec16.tar.gz
qemu-3e35960bf130f759c1b6d72f6a8c08039c08ec16.tar.xz
qemu-3e35960bf130f759c1b6d72f6a8c08039c08ec16.zip
nvdimm: Add realize, unrealize callbacks to NVDIMMDevice class
A new subclass inheriting NVDIMMDevice is going to be introduced in subsequent patches. The new subclass uses the realize and unrealize callbacks. Add them on NVDIMMClass to appropriately call them as part of plug-unplug. Signed-off-by: Shivaprasad G Bhat <sbhat@linux.ibm.com> Acked-by: Daniel Henrique Barboza <danielhb413@gmail.com> Message-Id: <164396253158.109112.1926755104259023743.stgit@ltczzess4.aus.stglabs.ibm.com> Signed-off-by: Cédric Le Goater <clg@kaod.org>
Diffstat (limited to 'hw/mem')
-rw-r--r--hw/mem/nvdimm.c16
-rw-r--r--hw/mem/pc-dimm.c5
2 files changed, 21 insertions, 0 deletions
diff --git a/hw/mem/nvdimm.c b/hw/mem/nvdimm.c
index 7397b67156..59959d5563 100644
--- a/hw/mem/nvdimm.c
+++ b/hw/mem/nvdimm.c
@@ -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);
diff --git a/hw/mem/pc-dimm.c b/hw/mem/pc-dimm.c
index 48b913aba6..03bd0dd60e 100644
--- a/hw/mem/pc-dimm.c
+++ b/hw/mem/pc-dimm.c
@@ -216,6 +216,11 @@ static void pc_dimm_realize(DeviceState *dev, Error **errp)
static void pc_dimm_unrealize(DeviceState *dev)
{
PCDIMMDevice *dimm = PC_DIMM(dev);
+ PCDIMMDeviceClass *ddc = PC_DIMM_GET_CLASS(dimm);
+
+ if (ddc->unrealize) {
+ ddc->unrealize(dimm);
+ }
host_memory_backend_set_mapped(dimm->hostmem, false);
}