On Thu, Sep 18, 2025 at 06:31:43AM -0700, Shameer Kolothum wrote:
> > > > @@ -37,7 +37,6 @@ typedef struct SMMUS1Hwpt {
> > > >
> > > >  typedef struct SMMUv3AccelDevice {
> > > >      SMMUDevice  sdev;
> > > > -    AddressSpace as_sysmem;
> > > >      HostIOMMUDeviceIOMMUFD *idev;
> > > >      SMMUS1Hwpt  *s1_hwpt;
> > > >      SMMUViommu *viommu;
> > > > @@ -48,6 +47,7 @@ typedef struct SMMUv3AccelDevice {  typedef struct
> > > > SMMUv3AccelState {
> > > >      MemoryRegion root;
> > > >      MemoryRegion sysmem;
> > > > +    AddressSpace as_sysmem;
> > > >      SMMUViommu *viommu;
> > > >      struct iommu_hw_info_arm_smmuv3 info;  } SMMUv3AccelState;
> > >
> > > That's changing from an ioas_id per VFIO device to an ioas_id per
> > > vSMMU instance, right? I think it's still not enough.
> > >
> > > All vSMMU instances could share the same ioas_id. That is why I put in
> > > the SMMUBaseClass as it's shared structure across vSMMUs.
> > 
> > Ah..you mean it is basically per VM then. Got it.
> 
> Regarding using SMMUBaseClass for this, it looks like ObjectClass normally 
> holds
> function pointers. Eric has made a similar observation elsewhere in this 
> series.
> 
>  @Eric, any suggestions?
> 
> Is use of &address_space_memory directly in smmuv3_accel_find_add_as() a 
> complete
> no-go, given we are talking about having the system address space for all the 
> SMMUv3 
> accelerated devices here?

smmuv3_accel_find_add_as() is per instance. So, it wouldn't share.

Even smmuv3_accel_init() wouldn't work.

If SMMUBaseClass isn't a good place, (I haven't tested but..) can
we do address_space_init() in the VMS? I see virt.c calling the
memory_region_init(), so perhaps we could init the as_sysmem there
and pass it in to each vSMMU instance.

Nicolin

Reply via email to