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

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.netSigned-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent ce4c8d21
...@@ -1578,6 +1578,7 @@ static int ffs_dmabuf_transfer(struct file *file, ...@@ -1578,6 +1578,7 @@ static int ffs_dmabuf_transfer(struct file *file,
struct ffs_dmabuf_priv *priv; struct ffs_dmabuf_priv *priv;
struct ffs_dma_fence *fence; struct ffs_dma_fence *fence;
struct usb_request *usb_req; struct usb_request *usb_req;
enum dma_resv_usage resv_dir;
struct dma_buf *dmabuf; struct dma_buf *dmabuf;
struct ffs_ep *ep; struct ffs_ep *ep;
bool cookie; bool cookie;
...@@ -1665,8 +1666,9 @@ static int ffs_dmabuf_transfer(struct file *file, ...@@ -1665,8 +1666,9 @@ static int ffs_dmabuf_transfer(struct file *file,
dma_fence_init(&fence->base, &ffs_dmabuf_fence_ops, dma_fence_init(&fence->base, &ffs_dmabuf_fence_ops,
&priv->lock, priv->context, seqno); &priv->lock, priv->context, seqno);
dma_resv_add_fence(dmabuf->resv, &fence->base, resv_dir = epfile->in ? DMA_RESV_USAGE_WRITE : DMA_RESV_USAGE_READ;
dma_resv_usage_rw(epfile->in));
dma_resv_add_fence(dmabuf->resv, &fence->base, resv_dir);
dma_resv_unlock(dmabuf->resv); dma_resv_unlock(dmabuf->resv);
/* Now that the dma_fence is in place, queue the transfer. */ /* Now that the dma_fence is in place, queue the transfer. */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment