Dave Airlie
6ea6be7708
Merge tag 'drm-misc-next-2020-09-21' of git://anongit.freedesktop.org/drm/drm-misc into drm-next
...
drm-misc-next for 5.10:
UAPI Changes:
Cross-subsystem Changes:
- virtio: Merged a PR for patches that will affect drm/virtio
Core Changes:
- dev: More devm_drm convertions and removal of drm_dev_init
- atomic: Split out drm_atomic_helper_calc_timestamping_constants of
drm_atomic_helper_update_legacy_modeset_state
- ttm: More rework
Driver Changes:
- i915: selftests improvements
- panfrost: support for Amlogic SoC
- vc4: one fix
- tree-wide: conversions to devm_drm_dev_alloc,
- ast: simplifications of the atomic modesetting code
- panfrost: multiple fixes
- vc4: multiple fixes
Signed-off-by: Dave Airlie <airlied@redhat.com >
From: Maxime Ripard <maxime@cerno.tech >
Link: https://patchwork.freedesktop.org/patch/msgid/20200921152956.2gxnsdgxmwhvjyut@gilmour.lan
2020-09-23 09:52:24 +10:00
Marek Szyprowski
62296b395a
dmabuf: fix common struct sg_table related issues
...
The Documentation/DMA-API-HOWTO.txt states that the dma_map_sg() function
returns the number of the created entries in the DMA address space.
However the subsequent calls to the dma_sync_sg_for_{device,cpu}() and
dma_unmap_sg must be called with the original number of the entries
passed to the dma_map_sg().
struct sg_table is a common structure used for describing a non-contiguous
memory buffer, used commonly in the DRM and graphics subsystems. It
consists of a scatterlist with memory pages and DMA addresses (sgl entry),
as well as the number of scatterlist entries: CPU pages (orig_nents entry)
and DMA mapped pages (nents entry).
It turned out that it was a common mistake to misuse nents and orig_nents
entries, calling DMA-mapping functions with a wrong number of entries or
ignoring the number of mapped entries returned by the dma_map_sg()
function.
To avoid such issues, lets use a common dma-mapping wrappers operating
directly on the struct sg_table objects and use scatterlist page
iterators where possible. This, almost always, hides references to the
nents and orig_nents entries, making the code robust, easier to follow
and copy/paste safe.
Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com >
Acked-by: Gerd Hoffmann <kraxel@redhat.com >
2020-09-10 08:18:35 +02:00
Kristian H. Kristensen
d4a197f404
udmabuf: Add missing compact_ioctl
...
Make sure we can use this on mixed systems.
Signed-off-by: Kristian H. Kristensen <hoegsberg@google.com >
Link: http://patchwork.freedesktop.org/patch/msgid/20200903181652.432067-1-hoegsberg@google.com
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com >
2020-09-07 06:23:20 +02:00
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