On Fri, Jun 06, 2025 at 11:05:46PM +0000, David Matlack wrote:
> On 2025-05-30 02:25 PM, Jason Gunthorpe wrote:
> > On Fri, May 30, 2025 at 09:50:22AM -0700, David Matlack wrote:
> > > I'll explore doing this. For a single dimension this looks possible.
> > > But for multiple dimensions (e.g. cross product of iommu_mode and
> > > backing_src) I don't see a clear way to do it. But that's just after a
> > > cursory look.
> > 
> > Explicitly list all the combinations with macros?
> > 
> > Enhance the userspace tests allow code to generate the
> > variants? Kernel tests can do this:
> 
> I got a chance to play around with generating fixture variants today and
> eneded up with this, which I think is pretty clean.
> 
> tools/testing/selftests/vfio/lib/include/vfio_util.h:
> 
>   #define ALL_IOMMU_MODES_VARIANT_ADD(...) \
>   __IOMMU_MODE_VARIANT_ADD(vfio_type1_iommu, ##__VA_ARGS__); \
>   __IOMMU_MODE_VARIANT_ADD(vfio_type1v2_iommu, ##__VA_ARGS__); \
>   __IOMMU_MODE_VARIANT_ADD(iommufd_compat_type1, ##__VA_ARGS__); \
>   __IOMMU_MODE_VARIANT_ADD(iommufd_compat_type1v2, ##__VA_ARGS__); \
>   __IOMMU_MODE_VARIANT_ADD(iommufd, ##__VA_ARGS__)
> 
> tools/testing/selftests/vfio/vfio_dma_mapping_test.c:
> 
>   #define __IOMMU_MODE_VARIANT_ADD(_iommu_mode, _name, _size, _mmap_flags)    
> \
>   FIXTURE_VARIANT_ADD(vfio_dma_mapping_test, _iommu_mode ## _name)            
> \
>   {                                                                           
> \
>       .iommu_mode = #_iommu_mode,                                             
> \
>       .size = (_size),                                                        
> \
>       .mmap_flags = MAP_ANONYMOUS | MAP_PRIVATE | (_mmap_flags),              
> \
>   }
> 
>   ALL_IOMMU_MODES_VARIANT_ADD(anonymous, 0, 0);
>   ALL_IOMMU_MODES_VARIANT_ADD(anonymous_hugetlb_2mb, SZ_2M, MAP_HUGETLB | 
> MAP_HUGE_2MB);
>   ALL_IOMMU_MODES_VARIANT_ADD(anonymous_hugetlb_1gb, SZ_1G, MAP_HUGETLB | 
> MAP_HUGE_1GB);
> 
>   #undef __IOMMU_MODE_VARIANT_ADD
> 
> Let me know if you think this looks reasonable.

Seems reasonable enough to me, not worth inventing a programmatic way to
generate them..

Jason

Reply via email to