On 08.06.2018 14:55, Michael S. Tsirkin wrote: > On Fri, Jun 08, 2018 at 02:32:09PM +0200, David Hildenbrand wrote: >> >>>>> if (TYPE_PC_DIMM) { >>>>> pc_dimm_plug() >>>>> /* do here additional concrete machine specific things */ >>>>> } else if (TYPE_VIRTIO_MEM) { >>>>> virtio_mem_plug() <- do forwarding in there >>>>> /* and do here additional concrete machine specific things */ >>>>> } else if (TYPE_CPU) { >>>>> cpu_plug() >>>>> /* do here additional concrete machine specific things */ >>>>> } >>>> >>>> That will result in a lot of duplicate code - for every machine we >>>> support (dimm/virtio-mem/virtio-pmem/*add more memory devices here*) - >>>> virtio-mem and virtio-pmem could most probably share the code. >>> maybe or maybe not, depending on if pmem endups as memory device or >>> separate controller. And even with duplication, machine code would >>> be easy to follow just down one explicit call chain. >> >> Not 100% convinced but I am now going into that direction. > > Can this go into DeviceClass? Failover has the same need to > allocate/free resources for vfio without a full realize/unrealize. >
Conceptually, I would have called here something like virtio_mem_plug() ... Which would end up calling memory_device_plug() and triggering the target hotplug handler. I assume this can also be done from a device class callback. So we would need a total of 3 callbacks for a) pre_plug b) plug c) unplug In addition, unplug requests might be necessary, so d) unplug_request >> -- >> >> Thanks, >> >> David / dhildenb -- Thanks, David / dhildenb