Commit ffc95d1b authored by Anthony Yznaga's avatar Anthony Yznaga Committed by Alex Williamson
Browse files

vfio/type1: Fix vfio_find_dma_valid return



vfio_find_dma_valid is defined to return WAITED on success if it was
necessary to wait.  However, the loop forgets the WAITED value returned
by vfio_wait() and returns 0 in a later iteration.  Fix it.

Signed-off-by: default avatarAnthony Yznaga <anthony.yznaga@oracle.com>
Reviewed-by: default avatarSteve Sistare <steven.sistare@oracle.com>
Link: https://lore.kernel.org/r/1629736550-2388-1-git-send-email-anthony.yznaga@oracle.com


Signed-off-by: default avatarAlex Williamson <alex.williamson@redhat.com>
parent eb24c100
Loading
Loading
Loading
Loading
+4 −4
Original line number Diff line number Diff line
@@ -612,17 +612,17 @@ static int vfio_wait(struct vfio_iommu *iommu)
static int vfio_find_dma_valid(struct vfio_iommu *iommu, dma_addr_t start,
			       size_t size, struct vfio_dma **dma_p)
{
	int ret;
	int ret = 0;

	do {
		*dma_p = vfio_find_dma(iommu, start, size);
		if (!*dma_p)
			ret = -EINVAL;
			return -EINVAL;
		else if (!(*dma_p)->vaddr_invalid)
			ret = 0;
			return ret;
		else
			ret = vfio_wait(iommu);
	} while (ret > 0);
	} while (ret == WAITED);

	return ret;
}