Commit 492855939bdb ("vfio/type1: Limit DMA mappings per container") added
a limit to the number of concurrent DMA requests for a vfio container.
However, lazy unmapping in s390 can in fact cause quite a large number of
outstanding DMA requests to build up prior to being purged, potentially
the entire guest DMA space. This results in unexpected 'VFIO_MAP_DMA
failed: No space left on device' conditions seen in QEMU.
This patch proposes to provide the remaining number of allowable DMA
requests via the VFIO_IOMMU_GET_INFO ioctl as a new capability. A
subsequent patchset to QEMU would collect this information and use it in
s390 PCI support to tap the guest on the shoulder before overrunning the
vfio limit.
Changes from v2:
- Typos / fixed stale comment block
Matthew Rosato (1):
vfio iommu: Add dma available capability
drivers/vfio/vfio_iommu_type1.c | 17 +++++++++++++++++
include/uapi/linux/vfio.h | 15 +++++++++++++++
2 files changed, 32 insertions(+)
--
1.8.3.1
On 9/15/20 3:05 PM, Matthew Rosato wrote:
> Commit 492855939bdb ("vfio/type1: Limit DMA mappings per container") added
> a limit to the number of concurrent DMA requests for a vfio container.
> However, lazy unmapping in s390 can in fact cause quite a large number of
> outstanding DMA requests to build up prior to being purged, potentially
> the entire guest DMA space. This results in unexpected 'VFIO_MAP_DMA
> failed: No space left on device' conditions seen in QEMU.
>
> This patch proposes to provide the remaining number of allowable DMA
> requests via the VFIO_IOMMU_GET_INFO ioctl as a new capability. A
> subsequent patchset to QEMU would collect this information and use it in
> s390 PCI support to tap the guest on the shoulder before overrunning the
> vfio limit.
Link to latest QEMU patchset:
https://lists.gnu.org/archive/html/qemu-devel/2020-09/msg05505.html
>
> Changes from v2:
> - Typos / fixed stale comment block
>
> Matthew Rosato (1):
> vfio iommu: Add dma available capability
>
> drivers/vfio/vfio_iommu_type1.c | 17 +++++++++++++++++
> include/uapi/linux/vfio.h | 15 +++++++++++++++
> 2 files changed, 32 insertions(+)
>