On 6/26/2025 9:59 PM, David Matlack wrote:
On Thu, Jun 26, 2025 at 4:44 AM Sairaj Kodilkar <sarun...@amd.com> wrote:
On 6/26/2025 4:57 PM, Sairaj Kodilkar wrote:
On 6/21/2025 4:50 AM, David Matlack wrote:
+/*
+ * Limit the number of MSIs enabled/disabled by the test regardless
of the
+ * number of MSIs the device itself supports, e.g. to avoid hitting
IRTE limits.
+ */
+#define MAX_TEST_MSI 16U
+

Now that AMD IOMMU supports upto 2048 IRTEs per device, I wonder if we
can include a test with max MSIs 2048.

That sounds worth doing. I originally added this because I was hitting
IRTE limits on an Intel host and a ~6.6 kernel.

Is there some way the test can detect from userspace that the IOMMU
supports 2048 IRTEs that we could key off to decide what value of
MAX_TEST_MSI to use?


The feature is published to userspace through

$ cat /sys/class/iommu/ivhd0/amd-iommu/features
25bf732fa2295afe:53d

The output is in format "efr1:efr2". The Bit 9-8 of efr2 shows the
support for 2048 interrupts (efr2 & 0x300).

Please refer 3.4.13 Extended Feature 2 Register of IOMMU specs [1] for
more details.

[1] https://www.amd.com/content/dam/amd/en/documents/processor-tech-docs/specifications/48882_IOMMU.pdf

Note that, when device is behind PCIe-PCI bridge the IOMMU may hit IRTE
limit early as multiple devices share same IRTE table. (But this is a
corner case and I doubt that 2K capable device is kept behind the
bridge).

Thanks
Sairaj

+
+    vfio_pci_dma_map(self->device, iova, size, mem);
+    printf("Mapped HVA %p (size 0x%lx) at IOVA 0x%lx\n", mem, size,
iova);
+    vfio_pci_dma_unmap(self->device, iova, size);


I am slightly confused here. Because You are having an assert on munmap
and not on any of the vfio_pci_dma_(map/unmap). This test case is not
testing VFIO.

I missed to see ioctl_assert. Please ignore this :) Sorry about that.

No worries, it's not very obvious :)

vfio_pci_dma_map() and vfio_pci_dma_unmap() both return void right now
and perform internal asserts since all current users of those
functions want to assert success.

If and when we have a use-case to assert that map or unmap fails
(which I think we'll definitely have) we can add __vfio_pci_dma_map()
and __vfio_pci_dma_unmap() variants that return int instead of void.

Yep we can. Another question, why do we need assert on mmunmap ? If
mmunmap fails then its not really a fault of VFIO.

Thanks
Sairaj

Reply via email to