Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

vfio: selftests: Replicate tests across all iommu_modes

Automatically replicate vfio_dma_mapping_test and vfio_pci_driver_test
across all supported IOMMU modes using fixture variants. Both of these
tests exercise DMA mapping to some degree so having automatic coverage
across all IOMMU modes will help catch bugs.

Acked-by: Shuah Khan <skhan@linuxfoundation.org>
Signed-off-by: David Matlack <dmatlack@google.com>
Link: https://lore.kernel.org/r/20250822212518.4156428-26-dmatlack@google.com
Signed-off-by: Alex Williamson <alex.williamson@redhat.com>

authored by

David Matlack and committed by
Alex Williamson
892aff14 5df9bd62

+32 -14
+8
tools/testing/selftests/vfio/lib/include/vfio_util.h
··· 53 53 unsigned long iommu_type; 54 54 }; 55 55 56 + /* 57 + * Generator for VFIO selftests fixture variants that replicate across all 58 + * possible IOMMU modes. Tests must define FIXTURE_VARIANT_ADD_IOMMU_MODE() 59 + * which should then use FIXTURE_VARIANT_ADD() to create the variant. 60 + */ 61 + #define FIXTURE_VARIANT_ADD_ALL_IOMMU_MODES(...) \ 62 + FIXTURE_VARIANT_ADD_IOMMU_MODE(vfio_type1_iommu, ##__VA_ARGS__) 63 + 56 64 struct vfio_pci_bar { 57 65 struct vfio_region_info info; 58 66 void *vaddr;
+1
tools/testing/selftests/vfio/lib/vfio_pci_device.c
··· 364 364 return cdev_path; 365 365 } 366 366 367 + /* Reminder: Keep in sync with FIXTURE_VARIANT_ADD_ALL_IOMMU_MODES(). */ 367 368 static const struct vfio_iommu_mode iommu_modes[] = { 368 369 { 369 370 .name = "vfio_type1_iommu",
+11 -13
tools/testing/selftests/vfio/vfio_dma_mapping_test.c
··· 96 96 }; 97 97 98 98 FIXTURE_VARIANT(vfio_dma_mapping_test) { 99 + const char *iommu_mode; 99 100 u64 size; 100 101 int mmap_flags; 101 102 }; 102 103 103 - FIXTURE_VARIANT_ADD(vfio_dma_mapping_test, anonymous) { 104 - .mmap_flags = MAP_ANONYMOUS | MAP_PRIVATE, 105 - }; 104 + #define FIXTURE_VARIANT_ADD_IOMMU_MODE(_iommu_mode, _name, _size, _mmap_flags) \ 105 + FIXTURE_VARIANT_ADD(vfio_dma_mapping_test, _iommu_mode ## _ ## _name) { \ 106 + .iommu_mode = #_iommu_mode, \ 107 + .size = (_size), \ 108 + .mmap_flags = MAP_ANONYMOUS | MAP_PRIVATE | (_mmap_flags), \ 109 + } 106 110 107 - FIXTURE_VARIANT_ADD(vfio_dma_mapping_test, anonymous_hugetlb_2mb) { 108 - .size = SZ_2M, 109 - .mmap_flags = MAP_ANONYMOUS | MAP_PRIVATE | MAP_HUGETLB | MAP_HUGE_2MB, 110 - }; 111 - 112 - FIXTURE_VARIANT_ADD(vfio_dma_mapping_test, anonymous_hugetlb_1gb) { 113 - .size = SZ_1G, 114 - .mmap_flags = MAP_ANONYMOUS | MAP_PRIVATE | MAP_HUGETLB | MAP_HUGE_1GB, 115 - }; 111 + FIXTURE_VARIANT_ADD_ALL_IOMMU_MODES(anonymous, 0, 0); 112 + FIXTURE_VARIANT_ADD_ALL_IOMMU_MODES(anonymous_hugetlb_2mb, SZ_2M, MAP_HUGETLB | MAP_HUGE_2MB); 113 + FIXTURE_VARIANT_ADD_ALL_IOMMU_MODES(anonymous_hugetlb_1gb, SZ_1G, MAP_HUGETLB | MAP_HUGE_1GB); 116 114 117 115 FIXTURE_SETUP(vfio_dma_mapping_test) 118 116 { 119 - self->device = vfio_pci_device_init(device_bdf, default_iommu_mode); 117 + self->device = vfio_pci_device_init(device_bdf, variant->iommu_mode); 120 118 } 121 119 122 120 FIXTURE_TEARDOWN(vfio_dma_mapping_test)
+12 -1
tools/testing/selftests/vfio/vfio_pci_driver_test.c
··· 56 56 iova_t unmapped_iova; 57 57 }; 58 58 59 + FIXTURE_VARIANT(vfio_pci_driver_test) { 60 + const char *iommu_mode; 61 + }; 62 + 63 + #define FIXTURE_VARIANT_ADD_IOMMU_MODE(_iommu_mode) \ 64 + FIXTURE_VARIANT_ADD(vfio_pci_driver_test, _iommu_mode) { \ 65 + .iommu_mode = #_iommu_mode, \ 66 + } 67 + 68 + FIXTURE_VARIANT_ADD_ALL_IOMMU_MODES(); 69 + 59 70 FIXTURE_SETUP(vfio_pci_driver_test) 60 71 { 61 72 struct vfio_pci_driver *driver; 62 73 63 - self->device = vfio_pci_device_init(device_bdf, default_iommu_mode); 74 + self->device = vfio_pci_device_init(device_bdf, variant->iommu_mode); 64 75 65 76 driver = &self->device->driver; 66 77