mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-11-26 12:50:53 +07:00
0959a1683d
- Again move the information relevant for driver writers next to the callbacks. - Put the overview and userspace interface documentation into a DOC: section within the code. - Remove the text that mmap needs to be coherent - since the DMA_BUF_IOCTL_SYNC landed that's no longer the case. But keep the text that for pte zapping exporters need to adjust the address space. - Add a FIXME that kmap and the new begin/end stuff used by the SYNC ioctl don't really mix correctly. That's something I just realized while doing this doc rework. - Augment function and structure docs like usual. Cc: linux-doc@vger.kernel.org Cc: Jonathan Corbet <corbet@lwn.net> Cc: Sumit Semwal <sumit.semwal@linaro.org> Signed-off-by: Daniel Vetter <daniel.vetter@intel.com> Signed-off-by: Sumit Semwal <sumit.semwal@linaro.org> [sumits: fix cosmetic issues] Link: http://patchwork.freedesktop.org/patch/msgid/20161209185309.1682-5-daniel.vetter@ffwll.ch
118 lines
3.3 KiB
ReStructuredText
118 lines
3.3 KiB
ReStructuredText
Buffer Sharing and Synchronization
|
|
==================================
|
|
|
|
The dma-buf subsystem provides the framework for sharing buffers for
|
|
hardware (DMA) access across multiple device drivers and subsystems, and
|
|
for synchronizing asynchronous hardware access.
|
|
|
|
This is used, for example, by drm "prime" multi-GPU support, but is of
|
|
course not limited to GPU use cases.
|
|
|
|
The three main components of this are: (1) dma-buf, representing a
|
|
sg_table and exposed to userspace as a file descriptor to allow passing
|
|
between devices, (2) fence, which provides a mechanism to signal when
|
|
one device as finished access, and (3) reservation, which manages the
|
|
shared or exclusive fence(s) associated with the buffer.
|
|
|
|
Shared DMA Buffers
|
|
------------------
|
|
|
|
This document serves as a guide to device-driver writers on what is the dma-buf
|
|
buffer sharing API, how to use it for exporting and using shared buffers.
|
|
|
|
Any device driver which wishes to be a part of DMA buffer sharing, can do so as
|
|
either the 'exporter' of buffers, or the 'user' or 'importer' of buffers.
|
|
|
|
Say a driver A wants to use buffers created by driver B, then we call B as the
|
|
exporter, and A as buffer-user/importer.
|
|
|
|
The exporter
|
|
|
|
- implements and manages operations in :c:type:`struct dma_buf_ops
|
|
<dma_buf_ops>` for the buffer,
|
|
- allows other users to share the buffer by using dma_buf sharing APIs,
|
|
- manages the details of buffer allocation, wrapped int a :c:type:`struct
|
|
dma_buf <dma_buf>`,
|
|
- decides about the actual backing storage where this allocation happens,
|
|
- and takes care of any migration of scatterlist - for all (shared) users of
|
|
this buffer.
|
|
|
|
The buffer-user
|
|
|
|
- is one of (many) sharing users of the buffer.
|
|
- doesn't need to worry about how the buffer is allocated, or where.
|
|
- and needs a mechanism to get access to the scatterlist that makes up this
|
|
buffer in memory, mapped into its own address space, so it can access the
|
|
same area of memory. This interface is provided by :c:type:`struct
|
|
dma_buf_attachment <dma_buf_attachment>`.
|
|
|
|
Basic Operation and Device DMA Access
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
.. kernel-doc:: drivers/dma-buf/dma-buf.c
|
|
:doc: dma buf device access
|
|
|
|
CPU Access to DMA Buffer Objects
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
.. kernel-doc:: drivers/dma-buf/dma-buf.c
|
|
:doc: cpu access
|
|
|
|
Kernel Functions and Structures Reference
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
.. kernel-doc:: drivers/dma-buf/dma-buf.c
|
|
:export:
|
|
|
|
.. kernel-doc:: include/linux/dma-buf.h
|
|
:internal:
|
|
|
|
Reservation Objects
|
|
-------------------
|
|
|
|
.. kernel-doc:: drivers/dma-buf/reservation.c
|
|
:doc: Reservation Object Overview
|
|
|
|
.. kernel-doc:: drivers/dma-buf/reservation.c
|
|
:export:
|
|
|
|
.. kernel-doc:: include/linux/reservation.h
|
|
:internal:
|
|
|
|
DMA Fences
|
|
----------
|
|
|
|
.. kernel-doc:: drivers/dma-buf/dma-fence.c
|
|
:export:
|
|
|
|
.. kernel-doc:: include/linux/dma-fence.h
|
|
:internal:
|
|
|
|
Seqno Hardware Fences
|
|
~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
.. kernel-doc:: drivers/dma-buf/seqno-fence.c
|
|
:export:
|
|
|
|
.. kernel-doc:: include/linux/seqno-fence.h
|
|
:internal:
|
|
|
|
DMA Fence Array
|
|
~~~~~~~~~~~~~~~
|
|
|
|
.. kernel-doc:: drivers/dma-buf/dma-fence-array.c
|
|
:export:
|
|
|
|
.. kernel-doc:: include/linux/dma-fence-array.h
|
|
:internal:
|
|
|
|
DMA Fence uABI/Sync File
|
|
~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
.. kernel-doc:: drivers/dma-buf/sync_file.c
|
|
:export:
|
|
|
|
.. kernel-doc:: include/linux/sync_file.h
|
|
:internal:
|
|
|