On Mon, 14 Jul 2025 16:59:29 +0100 Shameer Kolothum <shameerali.kolothum.th...@huawei.com> wrote:
> Subsequent patches for smmuv3 accel support will make use of this. > > Signed-off-by: Nicolin Chen <nicol...@nvidia.com> > Reviewed-by: Eric Auger <eric.au...@redhat.com> > Signed-off-by: Shameer Kolothum <shameerali.kolothum.th...@huawei.com> Various trivial things inline. In general looks fine. J > --- > hw/arm/smmu-common.c | 48 ++++++++++++++++++++++-------------- > include/hw/arm/smmu-common.h | 6 +++++ > 2 files changed, 36 insertions(+), 18 deletions(-) > > diff --git a/hw/arm/smmu-common.c b/hw/arm/smmu-common.c > index ab920717cf..0f1a06cec2 100644 > --- a/hw/arm/smmu-common.c > +++ b/hw/arm/smmu-common.c > @@ -847,12 +847,28 @@ SMMUPciBus *smmu_find_smmu_pcibus(SMMUState *s, uint8_t > bus_num) > return NULL; > } > > -static AddressSpace *smmu_find_add_as(PCIBus *bus, void *opaque, int devfn) > +void smmu_init_sdev(SMMUState *s, SMMUDevice *sdev, > + PCIBus *bus, int devfn) It's trivial Tuesday. Fits on one line. Maybe fine to keep it like this if you are going to modify this in later patches and this reduces the churn. > { > - SMMUState *s = opaque; > - SMMUPciBus *sbus = g_hash_table_lookup(s->smmu_pcibus_by_busptr, bus); > - SMMUDevice *sdev; > static unsigned int index; > + char *name = g_strdup_printf("%s-%d-%d", s->mrtypename, devfn, index++); > + > + sdev->smmu = s; > + sdev->bus = bus; > + sdev->devfn = devfn; > + > + memory_region_init_iommu(&sdev->iommu, sizeof(sdev->iommu), > + s->mrtypename, > + OBJECT(s), name, UINT64_MAX); Wrap was odd on original code, might as well tidy it up though as have a little more width now. memory_region_init_iommu(&sdev->iommu, sizeof(sdev->iommu), s->mrtypename, OBJECT(s), name, UINT64_MAX); > + address_space_init(&sdev->as, > + MEMORY_REGION(&sdev->iommu), name); And this one. address_space_init(&sdev->as, MEMORY_REGION(&sdev->iommu), name); > + trace_smmu_add_mr(name); > + g_free(name); Use g_autofree perhaps. > +} > + > +SMMUPciBus *smmu_get_sbus(SMMUState *s, PCIBus *bus) > +{ > + SMMUPciBus *sbus = g_hash_table_lookup(s->smmu_pcibus_by_busptr, bus); > > if (!sbus) { > sbus = g_malloc0(sizeof(SMMUPciBus) + > @@ -861,23 +877,19 @@ static AddressSpace *smmu_find_add_as(PCIBus *bus, void > *opaque, int devfn) > g_hash_table_insert(s->smmu_pcibus_by_busptr, bus, sbus); > } > > + return sbus; > +} > + > +static AddressSpace *smmu_find_add_as(PCIBus *bus, void *opaque, int devfn) > +{ > + SMMUDevice *sdev; Why have this first? Original order had it last. I don't really care but some sort of system is nicer than none. > + SMMUState *s = opaque; > + SMMUPciBus *sbus = smmu_get_sbus(s, bus); > + > sdev = sbus->pbdev[devfn]; > if (!sdev) { > - char *name = g_strdup_printf("%s-%d-%d", s->mrtypename, devfn, > index++); > - > sdev = sbus->pbdev[devfn] = g_new0(SMMUDevice, 1); > - > - sdev->smmu = s; > - sdev->bus = bus; > - sdev->devfn = devfn; > - > - memory_region_init_iommu(&sdev->iommu, sizeof(sdev->iommu), > - s->mrtypename, > - OBJECT(s), name, UINT64_MAX); > - address_space_init(&sdev->as, > - MEMORY_REGION(&sdev->iommu), name); > - trace_smmu_add_mr(name); > - g_free(name); > + smmu_init_sdev(s, sdev, bus, devfn); > } > > return &sdev->as; > diff --git a/include/hw/arm/smmu-common.h b/include/hw/arm/smmu-common.h > index 80d0fecfde..c6f899e403 100644 > --- a/include/hw/arm/smmu-common.h > +++ b/include/hw/arm/smmu-common.h > @@ -180,6 +180,12 @@ OBJECT_DECLARE_TYPE(SMMUState, SMMUBaseClass, ARM_SMMU) > /* Return the SMMUPciBus handle associated to a PCI bus number */ > SMMUPciBus *smmu_find_smmu_pcibus(SMMUState *s, uint8_t bus_num); > > +/* Return the SMMUPciBus handle associated to a PCI bus */ > +SMMUPciBus *smmu_get_sbus(SMMUState *s, PCIBus *bus); > + > +/* Initialize SMMUDevice handle associated to a SMMUPCIBus */ > +void smmu_init_sdev(SMMUState *s, SMMUDevice *sdev, PCIBus *bus, int devfn); > + > /* Return the stream ID of an SMMU device */ > static inline uint16_t smmu_get_sid(SMMUDevice *sdev) > {