Gurchetan Singh
1ffe095901
udmabuf: fix dma-buf cpu access
...
I'm just going to put Chia's review comment here since it sums
the issue rather nicely:
"(1) Semantically, a dma-buf is in DMA domain. CPU access from the
importer must be surrounded by {begin,end}_cpu_access. This gives the
exporter a chance to move the buffer to the CPU domain temporarily.
(2) When the exporter itself has other means to do CPU access, it is
only reasonable for the exporter to move the buffer to the CPU domain
before access, and to the DMA domain after access. The exporter can
potentially reuse {begin,end}_cpu_access for that purpose.
Because of (1), udmabuf does need to implement the
{begin,end}_cpu_access hooks. But "begin" should mean
dma_sync_sg_for_cpu and "end" should mean dma_sync_sg_for_device.
Because of (2), if userspace wants to continuing accessing through the
memfd mapping, it should call udmabuf's {begin,end}_cpu_access to
avoid cache issues."
Reported-by: Chia-I Wu <olvaffe@gmail.com >
Suggested-by: Chia-I Wu <olvaffe@gmail.com >
Fixes: 284562e1f3
("udmabuf: implement begin_cpu_access/end_cpu_access hooks")
Signed-off-by: Gurchetan Singh <gurchetansingh@chromium.org >
Link: http://patchwork.freedesktop.org/patch/msgid/20191217230228.453-1-gurchetansingh@chromium.org
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com >
2019-12-18 09:11:38 +01:00
Gurchetan Singh
284562e1f3
udmabuf: implement begin_cpu_access/end_cpu_access hooks
...
With the misc device, we should end up using the result of
get_arch_dma_ops(..) or dma-direct ops.
This can allow us to have WC mappings in the guest after
synchronization.
Signed-off-by: Gurchetan Singh <gurchetansingh@chromium.org >
Link: http://patchwork.freedesktop.org/patch/msgid/20191203013627.85991-4-gurchetansingh@chromium.org
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com >
2019-12-05 08:57:45 +01:00
Gurchetan Singh
17a7ce2034
udmabuf: separate out creating/destroying scatter-table
...
These are nice functions and can be re-used.
Signed-off-by: Gurchetan Singh <gurchetansingh@chromium.org >
Link: http://patchwork.freedesktop.org/patch/msgid/20191203013627.85991-3-gurchetansingh@chromium.org
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com >
2019-12-05 08:57:45 +01:00
Gurchetan Singh
c1bbed6689
udmabuf: add a pointer to the miscdevice in dma-buf private data
...
Will be used later.
v2: rename 'udmabuf_misc' to 'device' (kraxel)
Signed-off-by: Gurchetan Singh <gurchetansingh@chromium.org >
Link: http://patchwork.freedesktop.org/patch/msgid/20191203013627.85991-2-gurchetansingh@chromium.org
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com >
2019-12-05 08:57:45 +01:00
Gurchetan Singh
bc7a71da43
udmabuf: use cache_sgt_mapping option
...
The GEM prime helpers do it, so should we. It's also possible to make
it optional later.
Signed-off-by: Gurchetan Singh <gurchetansingh@chromium.org >
Link: http://patchwork.freedesktop.org/patch/msgid/20191203013627.85991-1-gurchetansingh@chromium.org
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com >
2019-12-05 08:57:45 +01:00
Maarten Lankhorst
19d32ace8b
udmabuf: Remove deleted map/unmap handlers.
...
Commit 7f0de8d808
("dma-buf: Drop dma_buf_k(un)map") removed map/unmap
handlers, but they still existed in udmabuf. Remove them there as well
Signed-off-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com >
Fixes: 7f0de8d808
("dma-buf: Drop dma_buf_k(un)map")
Cc: Sumit Semwal <sumit.semwal@linaro.org >
Cc: Daniel Vetter <daniel.vetter@intel.com >
Cc: linux-media@vger.kernel.org
Cc: linaro-mm-sig@lists.linaro.org
Cc: dri-devel@lists.freedesktop.org
Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch >
Link: https://patchwork.freedesktop.org/patch/msgid/20191126142516.630200-1-maarten.lankhorst@linux.intel.com
2019-11-26 15:39:36 +01:00
Lucas Stach
283f1e383e
udmabuf: actually unmap the scatterlist
...
unmap_udmabuf fails to actually unmap the scatterlist, leaving dangling
mappings around.
Fixes: fbb0de7950
("Add udmabuf misc device")
Signed-off-by: Lucas Stach <l.stach@pengutronix.de >
Link: http://patchwork.freedesktop.org/patch/msgid/20190604202331.17482-1-l.stach@pengutronix.de
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com >
2019-06-05 10:41:17 +02:00
Souptick Joarder
300133d372
drivers/dma-buf/udmabuf.c: convert to use vm_fault_t
...
Use new return type vm_fault_t for fault handler.
Link: http://lkml.kernel.org/r/20181106173628.GA12989@jordon-HP-15-Notebook-PC
Signed-off-by: Souptick Joarder <jrdr.linux@gmail.com >
Cc: Gerd Hoffmann <kraxel@redhat.com >
Cc: Sumit Semwal <sumit.semwal@linaro.org >
Signed-off-by: Andrew Morton <akpm@linux-foundation.org >
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org >
2019-01-04 13:13:46 -08:00
Gerd Hoffmann
5c074eeabb
udmabuf: set read/write flag when exporting
...
Otherwise, mmap fails when done with PROT_WRITE.
Suggested-by: Gurchetan Singh <gurchetansingh@chromium.org >
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com >
Reviewed-by: Gurchetan Singh <gurchetansingh@chromium.org >
Tested-by: Gurchetan Singh <gurchetansingh@chromium.org >
Link: http://patchwork.freedesktop.org/patch/msgid/20181114122029.16766-1-kraxel@redhat.com
2018-11-16 08:50:53 +01:00
Dan Carpenter
6f19eb21a2
udmabuf: fix error code in map_udmabuf()
...
We accidentally forgot to set "ret" on this error path so it means we
return NULL instead of an error pointer. The caller checks for NULL and
changes it to an error pointer so it doesn't cause an issue at run time.
Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com >
Link: http://patchwork.freedesktop.org/patch/msgid/20180914065615.GA12043@mwanda
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com >
2018-09-14 11:44:59 +02:00
Gerd Hoffmann
33f35429fc
udmabuf: use sizeof(variable) instead of sizeof(type)
...
Reported-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com >
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com >
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com >
Link: http://patchwork.freedesktop.org/patch/msgid/20180911134216.9760-13-kraxel@redhat.com
2018-09-12 08:21:33 +02:00
Gerd Hoffmann
7b26e4e211
udmabuf: drop WARN_ON() check.
...
Reported-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com >
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com >
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com >
Link: http://patchwork.freedesktop.org/patch/msgid/20180911134216.9760-12-kraxel@redhat.com
2018-09-12 08:21:32 +02:00
Gerd Hoffmann
52499d9cdd
udmabuf: use ENOTTY for invalid ioctls
...
Reported-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com >
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com >
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com >
Acked-by: Daniel Vetter <daniel.vetter@ffwll.ch >
Link: http://patchwork.freedesktop.org/patch/msgid/20180911134216.9760-11-kraxel@redhat.com
2018-09-12 08:21:32 +02:00
Gerd Hoffmann
7a1c67d780
udmabuf: use EBADFD in case we didn't got a memfd
...
Reported-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com >
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com >
Acked-by: Daniel Vetter <daniel.vetter@ffwll.ch >
Link: http://patchwork.freedesktop.org/patch/msgid/20180911134216.9760-10-kraxel@redhat.com
2018-09-12 08:21:31 +02:00
Gerd Hoffmann
0d17455ca8
udmabuf: improve udmabuf_create error handling
...
Reported-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com >
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com >
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com >
Acked-by: Daniel Vetter <daniel.vetter@ffwll.ch >
Link: http://patchwork.freedesktop.org/patch/msgid/20180911134216.9760-9-kraxel@redhat.com
2018-09-12 08:21:31 +02:00
Gerd Hoffmann
dc4716d751
udmabuf: rework limits
...
Create variable for the list length limit. Serves as documentation,
also allows to make it a module parameter if needed.
Also add a total size limit.
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com >
Acked-by: Daniel Vetter <daniel.vetter@ffwll.ch >
Link: http://patchwork.freedesktop.org/patch/msgid/20180911134216.9760-8-kraxel@redhat.com
2018-09-12 08:21:30 +02:00
Gerd Hoffmann
dc254553f2
udmabuf: constify udmabuf_create args
...
Reported-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com >
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com >
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com >
Acked-by: Daniel Vetter <daniel.vetter@ffwll.ch >
Link: http://patchwork.freedesktop.org/patch/msgid/20180911134216.9760-6-kraxel@redhat.com
2018-09-12 08:21:29 +02:00
Gerd Hoffmann
a34852891b
udmabuf: constify udmabuf_ops
...
Reported-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com >
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com >
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com >
Acked-by: Daniel Vetter <daniel.vetter@ffwll.ch >
Link: http://patchwork.freedesktop.org/patch/msgid/20180911134216.9760-5-kraxel@redhat.com
2018-09-12 08:21:29 +02:00
Gerd Hoffmann
b35f57c437
udmabuf: use pgoff_t for pagecount
...
Reported-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com >
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com >
Acked-by: Daniel Vetter <daniel.vetter@ffwll.ch >
Link: http://patchwork.freedesktop.org/patch/msgid/20180911134216.9760-4-kraxel@redhat.com
2018-09-12 08:21:28 +02:00
Gerd Hoffmann
a3e722dad0
udmabuf: improve map_udmabuf error handling
...
Reported-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com >
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com >
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com >
Acked-by: Daniel Vetter <daniel.vetter@ffwll.ch >
Link: http://patchwork.freedesktop.org/patch/msgid/20180911134216.9760-3-kraxel@redhat.com
2018-09-12 08:21:28 +02:00
Gerd Hoffmann
913965c42c
udmabuf: sort headers, drop uapi/ path prefix
...
Reported-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com >
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com >
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com >
Acked-by: Daniel Vetter <daniel.vetter@ffwll.ch >
Link: http://patchwork.freedesktop.org/patch/msgid/20180911134216.9760-2-kraxel@redhat.com
2018-09-12 08:21:27 +02:00
Gustavo A. R. Silva
683a0e630c
dma-buf/udmabuf: Fix NULL pointer dereference in udmabuf_create
...
There is a potential execution path in which pointer memfd is NULL when
passed as argument to fput(), hence there is a NULL pointer dereference
in fput().
Fix this by null checking *memfd* before calling fput().
Addresses-Coverity-ID: 1473174 ("Explicit null dereferenced")
Fixes: fbb0de7950
("Add udmabuf misc device")
Signed-off-by: Gustavo A. R. Silva <gustavo@embeddedor.com >
Link: http://patchwork.freedesktop.org/patch/msgid/20180904190749.GA9308@embeddedor.com
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com >
2018-09-05 08:28:28 +02:00
Gerd Hoffmann
fbb0de7950
Add udmabuf misc device
...
A driver to let userspace turn memfd regions into dma-bufs.
Use case: Allows qemu create dmabufs for the vga framebuffer or
virtio-gpu ressources. Then they can be passed around to display
those guest things on the host. To spice client for classic full
framebuffer display, and hopefully some day to wayland server for
seamless guest window display.
qemu test branch:
https://git.kraxel.org/cgit/qemu/log/?h=sirius/udmabuf
Cc: David Airlie <airlied@linux.ie >
Cc: Tomeu Vizoso <tomeu.vizoso@collabora.com >
Cc: Laurent Pinchart <laurent.pinchart@ideasonboard.com >
Cc: Daniel Vetter <daniel@ffwll.ch >
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com >
Acked-by: Daniel Vetter <daniel.vetter@ffwll.ch >
Link: http://patchwork.freedesktop.org/patch/msgid/20180827093444.23623-1-kraxel@redhat.com
2018-09-03 13:29:38 +02:00