On 21-01-27 10:06:48, Daniel P. Berrangé wrote: > On Tue, Jan 26, 2021 at 01:33:52PM -0800, Ben Widawsky wrote: > > I'm working on CXL 2.0 type 3 memory devices [1]. In short, these are PCIe > > devices > > that have persistent memory on them. As such, it would be nice to inherit > > from > > both a PCI_DEVICE class as well as an NVDIMM device class. > > > > Truth be told, using TYPE_MEMORY_DEVICE as the interface does provide most > > of > > what I need. I'm wondering what the best way to handle this is. Currently, > > the > > only thing NVDIMM class provides is write/read_label_data, this is driven by > > _DSM. For CXL, the mechanism to read/write the equivalent area is not done > > via > > _DSM, but done directly via a mailbox interface. However, the intent is the > > same, and so utilizing similar code seems ideal. > > > > If there's a desire to unify these code paths, I'd need something like > > multiple > > inheritance. I'm looking for some feedback here on how to do it. > > We don't have a direct concept of multiple inheritance in QOM. > > The closest you can get is to turn the NVDIMM class into an > interface. You can inherit from PCI_DEVICE and then implement > the NVDIMM interface. > > Regards, > Daniel
Is there a concise summary of what the tradeoffs would be of moving NVDIMM to an interface? AFAICT, there's a lot of things done through subclassing that can just as easily be done as an interface, but I don't understand the reason for that.