On 2/26/26 11:50 AM, Shameer Kolothum wrote: > SMMUv3 devices with acceleration may enable CMDQV extensions > after device realize. In that case, additional MMIO regions and > IRQ lines may be registered but not yet mapped to the platform bus. > > Ensure SMMUv3 device resources are linked to the platform bus > during machine_done(). > > This is safe to do unconditionally since the platform bus helpers > skip resources that are already mapped. > > Signed-off-by: Shameer Kolothum <[email protected]> > --- > hw/arm/virt.c | 21 +++++++++++++++++++++ > 1 file changed, 21 insertions(+) > > diff --git a/hw/arm/virt.c b/hw/arm/virt.c > index 292e523664..c75a8d6e9e 100644 > --- a/hw/arm/virt.c > +++ b/hw/arm/virt.c > @@ -1833,6 +1833,24 @@ static void virt_build_smbios(VirtMachineState *vms) > } > } > > +/* > + * SMMUv3 devices with acceleration may enable CMDQV extensions > + * after device realize. In that case, additional MMIO regions and > + * IRQ lines may be registered but not yet mapped to the platform bus. > + * > + * Ensure all resources are linked to the platform bus before final > + * machine setup. > + */ > + > +static void virt_smmuv3_dev_link_cmdqv(VirtMachineState *vms) > +{ > + for (int i = 0; i < vms->smmuv3_devices->len; i++) { > + DeviceState *dev = g_ptr_array_index(vms->smmuv3_devices, i); need extra line > + platform_bus_link_device(PLATFORM_BUS_DEVICE(vms->platform_bus_dev), > + SYS_BUS_DEVICE(dev)); > + } > +} > + > static > void virt_machine_done(Notifier *notifier, void *data) > { > @@ -1849,6 +1867,9 @@ void virt_machine_done(Notifier *notifier, void *data) > if (vms->cxl_devices_state.is_enabled) { > cxl_fmws_link_targets(&error_fatal); > } > + > + virt_smmuv3_dev_link_cmdqv(vms); > + > /* > * If the user provided a dtb, we assume the dynamic sysbus nodes > * already are integrated there. This corresponds to a use case where Reviewed-by: Eric Auger <[email protected]> Eric
