On 12 April 2018 at 17:40, Igor Mammedov <imamm...@redhat.com> wrote: > platform-bus were using machine_done notifier to get and map > (assign irq/mmio resources) dynamically added sysbus devices > after all '-device' options had been processed. > That however creates non obvious dependencies on ordering of > machine_done notifiers and requires carefull line juggling > to keep it working. For example see comment above > create_platform_bus() and 'straitforward' arm_load_kernel() > had to converted to machine_done notifier and that lead to > yet another machine_done notifier to keep it working > arm_register_platform_bus_fdt_creator(). > > Instead of hiding resource assignment in platform-bus-device > to magically initialize sysbus devices, use device plug > callback and assign resources explicitly at board level > at the moment each -device option is being processed. > > That adds a bunch of machine declaration boiler plate to > e500plat board, similar to ARM/x86 but gets rid of hidden > machine_done notifier and would allow to remove the dependent > notifiers in ARM code simplifying it and making code flow > easier to follow. > > Signed-off-by: Igor Mammedov <imamm...@redhat.com>
> +static void virt_machine_device_plug_cb(HotplugHandler *hotplug_dev, > + DeviceState *dev, Error **errp) > +{ > + VirtMachineState *vms = VIRT_MACHINE(hotplug_dev); > + > + if (object_dynamic_cast(OBJECT(dev), TYPE_SYS_BUS_DEVICE)) { > + if (vms->platform_bus_dev) { > + > platform_bus_link_device(PLATFORM_BUS_DEVICE(vms->platform_bus_dev), > + SYS_BUS_DEVICE(dev)); > + } > + } > +} > + > +static HotplugHandler *virt_machine_get_hotpug_handler(MachineState *machine, > + DeviceState *dev) Nit: typo in function name, should be "hotplug". Will let others review the meat of the patch. thanks -- PMM