usb: gadget: functionfs: Fix inverted DMA fence direction
authorPaul Cercueil <paul@crapouillou.net>
Tue, 2 Apr 2024 11:09:50 +0000 (13:09 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 4 Apr 2024 13:20:30 +0000 (15:20 +0200)
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: 7b07a2a7ca02 ("usb: gadget: functionfs: Add DMABUF import interface")
Signed-off-by: Paul Cercueil <paul@crapouillou.net>
Link: https://lore.kernel.org/r/20240402110951.16376-2-paul@crapouillou.net
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/usb/gadget/function/f_fs.c

index bffbc1dc651f9ecdead7e3398004ca2e77355cef..70e8532127ad5a34c951d62f27433193cf6b9622 100644 (file)
@@ -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. */