Commit 1500a7b2 authored by Paul Cercueil's avatar Paul Cercueil Committed by Greg Kroah-Hartman
Browse files

usb: gadget: functionfs: Fix inverted DMA fence direction



A "read" fence was installed when the DMABUF was to be written to,
and a "write" fence was installed when the DMABUF was to be read from.

Besides, dma_resv_usage_rw() should only be used when waiting for
fences.

Fixes: 7b07a2a7 ("usb: gadget: functionfs: Add DMABUF import interface")
Signed-off-by: default avatarPaul Cercueil <paul@crapouillou.net>
Link: https://lore.kernel.org/r/20240402110951.16376-2-paul@crapouillou.net


Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent ce4c8d21
Loading
Loading
Loading
Loading
+4 −2
Original line number Diff line number Diff line
@@ -1578,6 +1578,7 @@ static int ffs_dmabuf_transfer(struct file *file,
	struct ffs_dmabuf_priv *priv;
	struct ffs_dma_fence *fence;
	struct usb_request *usb_req;
	enum dma_resv_usage resv_dir;
	struct dma_buf *dmabuf;
	struct ffs_ep *ep;
	bool cookie;
@@ -1665,8 +1666,9 @@ static int ffs_dmabuf_transfer(struct file *file,
	dma_fence_init(&fence->base, &ffs_dmabuf_fence_ops,
		       &priv->lock, priv->context, seqno);

	dma_resv_add_fence(dmabuf->resv, &fence->base,
			   dma_resv_usage_rw(epfile->in));
	resv_dir = epfile->in ? DMA_RESV_USAGE_WRITE : DMA_RESV_USAGE_READ;

	dma_resv_add_fence(dmabuf->resv, &fence->base, resv_dir);
	dma_resv_unlock(dmabuf->resv);

	/* Now that the dma_fence is in place, queue the transfer. */