Re: [PATCH v6 1/3] nvdimm: Add realize, unrealize callbacks to NVDIMMDevice class
Daniel Henrique Barboza <[email protected]>
| Newsgroups | org.kernel.vger.kvm-ppc,dev.linux.lists.nvdimm,org.nongnu.qemu-devel |
|---|---|
| Message-ID | <[email protected]> |
On 2/1/22 18:57, Shivaprasad G Bhat wrote: > 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 <[email protected]> > --- Acked-by: Daniel Henrique Barboza <[email protected]> > hw/mem/nvdimm.c | 16 ++++++++++++++++ > hw/mem/pc-dimm.c | 5 +++++ > include/hw/mem/nvdimm.h | 2 ++ > include/hw/mem/pc-dimm.h | 1 + > 4 files changed, 24 insertions(+) > > 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); > } > diff --git a/include/hw/mem/nvdimm.h b/include/hw/mem/nvdimm.h > index bcf62f825c..cf8f59be44 100644 > --- a/include/hw/mem/nvdimm.h > +++ b/include/hw/mem/nvdimm.h > @@ -103,6 +103,8 @@ struct NVDIMMClass { > /* write @size bytes from @buf to NVDIMM label data at @offset. */ > void (*write_label_data)(NVDIMMDevice *nvdimm, const void *buf, > uint64_t size, uint64_t offset); > + void (*realize)(NVDIMMDevice *nvdimm, Error **errp); > + void (*unrealize)(NVDIMMDevice *nvdimm); > }; > > #define NVDIMM_DSM_MEM_FILE "etc/acpi/nvdimm-mem" > diff --git a/include/hw/mem/pc-dimm.h b/include/hw/mem/pc-dimm.h > index 1473e6db62..322bebe555 100644 > --- a/include/hw/mem/pc-dimm.h > +++ b/include/hw/mem/pc-dimm.h > @@ -63,6 +63,7 @@ struct PCDIMMDeviceClass { > > /* public */ > void (*realize)(PCDIMMDevice *dimm, Error **errp); > + void (*unrealize)(PCDIMMDevice *dimm); > }; > > void pc_dimm_pre_plug(PCDIMMDevice *dimm, MachineState *machine, > >