€•Œsphinx.addnodes”Œdocument”“”)�”}”(Œ rawsource”Œ”Œchildren”]”(Œ translations”Œ LanguagesNode”“”)�”}”(hhh]”(hŒ pending_xref”“”)�”}”(hhh]”Œdocutils.nodes”ŒText”“”ŒChinese (Simplified)”…”�”}”Œparent”hsbaŒ attributes”}”(Œids”]”Œclasses”]”Œnames”]”Œdupnames”]”Œbackrefs”]”Œ refdomain”Œstd”Œreftype”Œdoc”Œ reftarget”Œ&/translations/zh_CN/driver-api/dma-buf”Œmodname”NŒ classname”NŒ refexplicit”ˆuŒtagname”hhh ubh)�”}”(hhh]”hŒChinese (Traditional)”…”�”}”hh2sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ&/translations/zh_TW/driver-api/dma-buf”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒItalian”…”�”}”hhFsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ&/translations/it_IT/driver-api/dma-buf”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒJapanese”…”�”}”hhZsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ&/translations/ja_JP/driver-api/dma-buf”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒKorean”…”�”}”hhnsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ&/translations/ko_KR/driver-api/dma-buf”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒPortuguese (Brazilian)”…”�”}”hh‚sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ&/translations/pt_BR/driver-api/dma-buf”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒSpanish”…”�”}”hh–sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ&/translations/sp_SP/driver-api/dma-buf”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubeh}”(h]”h ]”h"]”h$]”h&]”Œcurrent_language”ŒEnglish”uh1h hhŒ _document”hŒsource”NŒline”NubhŒsection”“”)�”}”(hhh]”(hŒtitle”“”)�”}”(hŒ,Buffer Sharing and Synchronization (dma-buf)”h]”hŒ,Buffer Sharing and Synchronization (dma-buf)”…”�”}”(hh¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhh·h²hh³Œ@/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf.rst”h´KubhŒ paragraph”“”)�”}”(hŒ½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.”h]”hŒ½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.”…”�”}”(hhÍh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Khh·h²hubhÌ)�”}”(hŒÒAs an example, it is used extensively by the DRM subsystem to exchange buffers between processes, contexts, library APIs within the same process, and also to exchange buffers with other subsystems such as V4L2.”h]”hŒÒAs an example, it is used extensively by the DRM subsystem to exchange buffers between processes, contexts, library APIs within the same process, and also to exchange buffers with other subsystems such as V4L2.”…”�”}”(hhÛh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Khh·h²hubhÌ)�”}”(hŒ‚This document describes the way in which kernel subsystems can use and interact with the three main primitives offered by dma-buf:”h]”hŒ‚This document describes the way in which kernel subsystems can use and interact with the three main primitives offered by dma-buf:”…”�”}”(hhéh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K hh·h²hubhŒ block_quote”“”)�”}”(hX°- dma-buf, representing a sg_table and exposed to userspace as a file descriptor to allow passing between processes, subsystems, devices, etc; - dma-fence, providing a mechanism to signal when an asynchronous hardware operation has completed; and - dma-resv, which manages a set of dma-fences for a particular dma-buf allowing implicit (kernel-ordered) synchronization of work to preserve the illusion of coherent access ”h]”hŒ bullet_list”“”)�”}”(hhh]”(hŒ list_item”“”)�”}”(hŒŒdma-buf, representing a sg_table and exposed to userspace as a file descriptor to allow passing between processes, subsystems, devices, etc;”h]”hÌ)�”}”(hŒŒdma-buf, representing a sg_table and exposed to userspace as a file descriptor to allow passing between processes, subsystems, devices, etc;”h]”hŒŒdma-buf, representing a sg_table and exposed to userspace as a file descriptor to allow passing between processes, subsystems, devices, etc;”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Khjubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhÿubj)�”}”(hŒedma-fence, providing a mechanism to signal when an asynchronous hardware operation has completed; and”h]”hÌ)�”}”(hŒedma-fence, providing a mechanism to signal when an asynchronous hardware operation has completed; and”h]”hŒedma-fence, providing a mechanism to signal when an asynchronous hardware operation has completed; and”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Khjubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhÿubj)�”}”(hŒ­dma-resv, which manages a set of dma-fences for a particular dma-buf allowing implicit (kernel-ordered) synchronization of work to preserve the illusion of coherent access ”h]”hÌ)�”}”(hŒ«dma-resv, which manages a set of dma-fences for a particular dma-buf allowing implicit (kernel-ordered) synchronization of work to preserve the illusion of coherent access”h]”hŒ«dma-resv, which manages a set of dma-fences for a particular dma-buf allowing implicit (kernel-ordered) synchronization of work to preserve the illusion of coherent access”…”�”}”(hj8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Khj4ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhÿubeh}”(h]”h ]”h"]”h$]”h&]”Œbullet”Œ-”uh1hýh³hÊh´Khhùubah}”(h]”h ]”h"]”h$]”h&]”uh1h÷h³hÊh´Khh·h²hubh¶)�”}”(hhh]”(h»)�”}”(hŒ Userspace API principles and use”h]”hŒ Userspace API principles and use”…”�”}”(hj]h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjZh²hh³hÊh´KubhÌ)�”}”(hŒŠFor more details on how to design your subsystem's API for dma-buf use, please see Documentation/userspace-api/dma-buf-alloc-exchange.rst.”h]”hŒŒFor more details on how to design your subsystem’s API for dma-buf use, please see Documentation/userspace-api/dma-buf-alloc-exchange.rst.”…”�”}”(hjkh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KhjZh²hubeh}”(h]”Œ userspace-api-principles-and-use”ah ]”h"]”Œ userspace api principles and use”ah$]”h&]”uh1hµhh·h²hh³hÊh´Kubh¶)�”}”(hhh]”(h»)�”}”(hŒShared DMA Buffers”h]”hŒShared DMA Buffers”…”�”}”(hj„h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj�h²hh³hÊh´K"ubhÌ)�”}”(hŒ™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.”h]”hŒ™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.”…”�”}”(hj’h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K$hj�h²hubhÌ)�”}”(hŒ™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.”h]”hŒ¥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.”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K'hj�h²hubhÌ)�”}”(hŒwSay a driver A wants to use buffers created by driver B, then we call B as the exporter, and A as buffer-user/importer.”h]”hŒwSay a driver A wants to use buffers created by driver B, then we call B as the exporter, and A as buffer-user/importer.”…”�”}”(hj®h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K*hj�h²hubhÌ)�”}”(hŒ The exporter”h]”hŒ The exporter”…”�”}”(hj¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K-hj�h²hubhø)�”}”(hX±- implements and manages operations in :c:type:`struct 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 in a :c:type:`struct 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. ”h]”hþ)�”}”(hhh]”(j)�”}”(hŒ_implements and manages operations in :c:type:`struct dma_buf_ops ` for the buffer,”h]”hÌ)�”}”(hŒ_implements and manages operations in :c:type:`struct dma_buf_ops ` for the buffer,”h]”(hŒ%implements and manages operations in ”…”�”}”(hjÕh²hh³Nh´Nubh)�”}”(hŒ*:c:type:`struct dma_buf_ops `”h]”hŒliteral”“”)�”}”(hjßh]”hŒstruct dma_buf_ops”…”�”}”(hjãh²hh³Nh´Nubah}”(h]”h ]”(Œxref”Œc”Œc-type”eh"]”h$]”h&]”uh1jáhjÝubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”Œdriver-api/dma-buf”Œ refdomain”jîŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰Œ reftarget”Œ dma_buf_ops”uh1hh³hÊh´K/hjÕubhŒ for the buffer,”…”�”}”(hjÕh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K/hjÑubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÎubj)�”}”(hŒEallows other users to share the buffer by using dma_buf sharing APIs,”h]”hÌ)�”}”(hjh]”hŒEallows other users to share the buffer by using dma_buf sharing APIs,”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K1hjubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÎubj)�”}”(hŒZmanages the details of buffer allocation, wrapped in a :c:type:`struct dma_buf `,”h]”hÌ)�”}”(hŒZmanages the details of buffer allocation, wrapped in a :c:type:`struct dma_buf `,”h]”(hŒ7manages the details of buffer allocation, wrapped in a ”…”�”}”(hj-h²hh³Nh´Nubh)�”}”(hŒ":c:type:`struct dma_buf `”h]”jâ)�”}”(hj7h]”hŒstruct dma_buf”…”�”}”(hj9h²hh³Nh´Nubah}”(h]”h ]”(jíjîŒc-type”eh"]”h$]”h&]”uh1jáhj5ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”júŒ refdomain”jîŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jŒdma_buf”uh1hh³hÊh´K2hj-ubhŒ,”…”�”}”(hj-h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K2hj)ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÎubj)�”}”(hŒGdecides about the actual backing storage where this allocation happens,”h]”hÌ)�”}”(hjfh]”hŒGdecides about the actual backing storage where this allocation happens,”…”�”}”(hjhh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K4hjdubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÎubj)�”}”(hŒXand takes care of any migration of scatterlist - for all (shared) users of this buffer. ”h]”hÌ)�”}”(hŒWand takes care of any migration of scatterlist - for all (shared) users of this buffer.”h]”hŒWand takes care of any migration of scatterlist - for all (shared) users of this buffer.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K5hj{ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÎubeh}”(h]”h ]”h"]”h$]”h&]”jRjSuh1hýh³hÊh´K/hjÊubah}”(h]”h ]”h"]”h$]”h&]”uh1h÷h³hÊh´K/hj�h²hubhÌ)�”}”(hŒThe buffer-user”h]”hŒThe buffer-user”…”�”}”(hjŸh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K8hj�h²hubhø)�”}”(hX~- 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 `. ”h]”hþ)�”}”(hhh]”(j)�”}”(hŒ-is one of (many) sharing users of the buffer.”h]”hÌ)�”}”(hj¶h]”hŒ-is one of (many) sharing users of the buffer.”…”�”}”(hj¸h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K:hj´ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj±ubj)�”}”(hŒBdoesn't need to worry about how the buffer is allocated, or where.”h]”hÌ)�”}”(hjÍh]”hŒDdoesn’t need to worry about how the buffer is allocated, or where.”…”�”}”(hjÏh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K;hjËubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj±ubj)�”}”(hXand 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 `. ”h]”hÌ)�”}”(hXand 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 `.”h]”(hŒÇ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 ”…”�”}”(hjæh²hh³Nh´Nubh)�”}”(hŒ8:c:type:`struct dma_buf_attachment `”h]”jâ)�”}”(hjðh]”hŒstruct dma_buf_attachment”…”�”}”(hjòh²hh³Nh´Nubah}”(h]”h ]”(jíjîŒc-type”eh"]”h$]”h&]”uh1jáhjîubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”júŒ refdomain”jîŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jŒdma_buf_attachment”uh1hh³hÊh´K` mutex. ”h]”(hÌ)�”}”(hX(Fallback operations in the kernel, for example when a device is connected over USB and the kernel needs to shuffle the data around first before sending it away. Cache coherency is handled by bracketing any transactions with calls to dma_buf_begin_cpu_access() and dma_buf_end_cpu_access() access.”h]”hX(Fallback operations in the kernel, for example when a device is connected over USB and the kernel needs to shuffle the data around first before sending it away. Cache coherency is handled by bracketing any transactions with calls to dma_buf_begin_cpu_access() and dma_buf_end_cpu_access() access.”…”�”}”(hjºh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:119: ./drivers/dma-buf/dma-buf.c”h´M‡hj¶ubhÌ)�”}”(hŒÓSince for most kernel internal dma-buf accesses need the entire buffer, a vmap interface is introduced. Note that on very old 32-bit architectures vmalloc space might be limited and result in vmap calls failing.”h]”hŒÓSince for most kernel internal dma-buf accesses need the entire buffer, a vmap interface is introduced. Note that on very old 32-bit architectures vmalloc space might be limited and result in vmap calls failing.”…”�”}”(hjÉh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:119: ./drivers/dma-buf/dma-buf.c”h´M�hj¶ubhÌ)�”}”(hŒ Interfaces:”h]”hŒ Interfaces:”…”�”}”(hjØh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:119: ./drivers/dma-buf/dma-buf.c”h´M‘hj¶ubhŒ literal_block”“”)�”}”(hŒ„void *dma_buf_vmap(struct dma_buf *dmabuf, struct iosys_map *map) void dma_buf_vunmap(struct dma_buf *dmabuf, struct iosys_map *map)”h]”hŒ„void *dma_buf_vmap(struct dma_buf *dmabuf, struct iosys_map *map) void dma_buf_vunmap(struct dma_buf *dmabuf, struct iosys_map *map)”…”�”}”hjésbah}”(h]”h ]”h"]”h$]”h&]”Œ xml:space”Œpreserve”Œforce”‰Œlanguage”jîŒhighlight_args”}”uh1jçh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:119: ./drivers/dma-buf/dma-buf.c”h´M“hj¶ubhÌ)�”}”(hX‰The vmap call can fail if there is no vmap support in the exporter, or if it runs out of vmalloc space. Note that the dma-buf layer keeps a reference count for all vmap access and calls down into the exporter's vmap function only when no vmapping exists, and only unmaps it once. Protection against concurrent vmap/vunmap calls is provided by taking the :c:type:`dma_buf.lock ` mutex.”h]”(hXdThe vmap call can fail if there is no vmap support in the exporter, or if it runs out of vmalloc space. Note that the dma-buf layer keeps a reference count for all vmap access and calls down into the exporter’s vmap function only when no vmapping exists, and only unmaps it once. Protection against concurrent vmap/vunmap calls is provided by taking the ”…”�”}”(hjþh²hh³Nh´Nubh)�”}”(hŒ :c:type:`dma_buf.lock `”h]”jâ)�”}”(hjh]”hŒ dma_buf.lock”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”(jíjîŒc-type”eh"]”h$]”h&]”uh1jáhjubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”júŒ refdomain”jîŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jŒdma_buf”uh1hh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:119: ./drivers/dma-buf/dma-buf.c”h´M˜hjþubhŒ mutex.”…”�”}”(hjþh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j%h´M˜hj¶ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj³ubj)�”}”(hXªFor full compatibility on the importer side with existing userspace interfaces, which might already support mmap'ing buffers. This is needed in many processing pipelines (e.g. feeding a software rendered image into a hardware pipeline, thumbnail creation, snapshots, ...). Also, Android's ION framework already supported this and for DMA buffer file descriptors to replace ION buffers mmap support was needed. There is no special interfaces, userspace simply calls mmap on the dma-buf fd. But like for CPU access there's a need to bracket the actual access, which is handled by the ioctl (DMA_BUF_IOCTL_SYNC). Note that DMA_BUF_IOCTL_SYNC can fail with -EAGAIN or -EINTR, in which case it must be restarted. Some systems might need some sort of cache coherency management e.g. when CPU and GPU domains are being accessed through dma-buf at the same time. To circumvent this problem there are begin/end coherency markers, that forward directly to existing dma-buf device drivers vfunc hooks. Userspace can make use of those markers through the DMA_BUF_IOCTL_SYNC ioctl. The sequence would be used like following: - mmap dma-buf fd - for each drawing/upload cycle in CPU 1. SYNC_START ioctl, 2. read/write to mmap area 3. SYNC_END ioctl. This can be repeated as often as you want (with the new data being consumed by say the GPU or the scanout device) - munmap once you don't need the buffer any more For correctness and optimal performance, it is always required to use SYNC_START and SYNC_END before and after, respectively, when accessing the mapped address. Userspace cannot rely on coherent access, even when there are systems where it just works without calling these ioctls. ”h]”(hÌ)�”}”(hX™For full compatibility on the importer side with existing userspace interfaces, which might already support mmap'ing buffers. This is needed in many processing pipelines (e.g. feeding a software rendered image into a hardware pipeline, thumbnail creation, snapshots, ...). Also, Android's ION framework already supported this and for DMA buffer file descriptors to replace ION buffers mmap support was needed.”h]”hX�For full compatibility on the importer side with existing userspace interfaces, which might already support mmap’ing buffers. This is needed in many processing pipelines (e.g. feeding a software rendered image into a hardware pipeline, thumbnail creation, snapshots, ...). Also, Android’s ION framework already supported this and for DMA buffer file descriptors to replace ION buffers mmap support was needed.”…”�”}”(hj:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:119: ./drivers/dma-buf/dma-buf.c”h´Mžhj6ubhÌ)�”}”(hX)There is no special interfaces, userspace simply calls mmap on the dma-buf fd. But like for CPU access there's a need to bracket the actual access, which is handled by the ioctl (DMA_BUF_IOCTL_SYNC). Note that DMA_BUF_IOCTL_SYNC can fail with -EAGAIN or -EINTR, in which case it must be restarted.”h]”hX+There is no special interfaces, userspace simply calls mmap on the dma-buf fd. But like for CPU access there’s a need to bracket the actual access, which is handled by the ioctl (DMA_BUF_IOCTL_SYNC). Note that DMA_BUF_IOCTL_SYNC can fail with -EAGAIN or -EINTR, in which case it must be restarted.”…”�”}”(hjIh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:119: ./drivers/dma-buf/dma-buf.c”h´M¥hj6ubhÌ)�”}”(hX“Some systems might need some sort of cache coherency management e.g. when CPU and GPU domains are being accessed through dma-buf at the same time. To circumvent this problem there are begin/end coherency markers, that forward directly to existing dma-buf device drivers vfunc hooks. Userspace can make use of those markers through the DMA_BUF_IOCTL_SYNC ioctl. The sequence would be used like following:”h]”hX“Some systems might need some sort of cache coherency management e.g. when CPU and GPU domains are being accessed through dma-buf at the same time. To circumvent this problem there are begin/end coherency markers, that forward directly to existing dma-buf device drivers vfunc hooks. Userspace can make use of those markers through the DMA_BUF_IOCTL_SYNC ioctl. The sequence would be used like following:”…”�”}”(hjXh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:119: ./drivers/dma-buf/dma-buf.c”h´M«hj6ubhø)�”}”(hXE - mmap dma-buf fd - for each drawing/upload cycle in CPU 1. SYNC_START ioctl, 2. read/write to mmap area 3. SYNC_END ioctl. This can be repeated as often as you want (with the new data being consumed by say the GPU or the scanout device) - munmap once you don't need the buffer any more For correctness and optimal performance, it is always required to use SYNC_START and SYNC_END before and after, respectively, when accessing the mapped address. Userspace cannot rely on coherent access, even when there are systems where it just works without calling these ioctls. ”h]”(hø)�”}”(hX%- mmap dma-buf fd - for each drawing/upload cycle in CPU 1. SYNC_START ioctl, 2. read/write to mmap area 3. SYNC_END ioctl. This can be repeated as often as you want (with the new data being consumed by say the GPU or the scanout device) - munmap once you don't need the buffer any more ”h]”hþ)�”}”(hhh]”(j)�”}”(hŒmmap dma-buf fd”h]”hÌ)�”}”(hjth]”hŒmmap dma-buf fd”…”�”}”(hjvh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:119: ./drivers/dma-buf/dma-buf.c”h´M²hjrubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjoubj)�”}”(hŒÙfor each drawing/upload cycle in CPU 1. SYNC_START ioctl, 2. read/write to mmap area 3. SYNC_END ioctl. This can be repeated as often as you want (with the new data being consumed by say the GPU or the scanout device)”h]”hÌ)�”}”(hŒÙfor each drawing/upload cycle in CPU 1. SYNC_START ioctl, 2. read/write to mmap area 3. SYNC_END ioctl. This can be repeated as often as you want (with the new data being consumed by say the GPU or the scanout device)”h]”hŒÙfor each drawing/upload cycle in CPU 1. SYNC_START ioctl, 2. read/write to mmap area 3. SYNC_END ioctl. This can be repeated as often as you want (with the new data being consumed by say the GPU or the scanout device)”…”�”}”(hjŽh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:119: ./drivers/dma-buf/dma-buf.c”h´M³hjŠubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjoubj)�”}”(hŒ/munmap once you don't need the buffer any more ”h]”hÌ)�”}”(hŒ.munmap once you don't need the buffer any more”h]”hŒ0munmap once you don’t need the buffer any more”…”�”}”(hj§h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:119: ./drivers/dma-buf/dma-buf.c”h´M·hj£ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjoubeh}”(h]”h ]”h"]”h$]”h&]”jRjSuh1hýh³jƒh´M²hjkubah}”(h]”h ]”h"]”h$]”h&]”uh1h÷h³jƒh´M²hjgubhÌ)�”}”(hXFor correctness and optimal performance, it is always required to use SYNC_START and SYNC_END before and after, respectively, when accessing the mapped address. Userspace cannot rely on coherent access, even when there are systems where it just works without calling these ioctls.”h]”hXFor correctness and optimal performance, it is always required to use SYNC_START and SYNC_END before and after, respectively, when accessing the mapped address. Userspace cannot rely on coherent access, even when there are systems where it just works without calling these ioctls.”…”�”}”(hjÈh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:119: ./drivers/dma-buf/dma-buf.c”h´M¹hjgubeh}”(h]”h ]”h"]”h$]”h&]”uh1h÷h³jƒh´M²hj6ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj³ubj)�”}”(hXòAnd as a CPU fallback in userspace processing pipelines. Similar to the motivation for kernel cpu access it is again important that the userspace code of a given importing subsystem can use the same interfaces with a imported dma-buf buffer object as with a native buffer object. This is especially important for drm where the userspace part of contemporary OpenGL, X, and other drivers is huge, and reworking them to use a different way to mmap a buffer rather invasive. The assumption in the current dma-buf interfaces is that redirecting the initial mmap is all that's needed. A survey of some of the existing subsystems shows that no driver seems to do any nefarious thing like syncing up with outstanding asynchronous processing on the device or allocating special resources at fault time. So hopefully this is good enough, since adding interfaces to intercept pagefaults and allow pte shootdowns would increase the complexity quite a bit. Interface: .. code-block:: c int dma_buf_mmap(struct dma_buf *, struct vm_area_struct *, unsigned long); If the importing subsystem simply provides a special-purpose mmap call to set up a mapping in userspace, calling do_mmap with :c:type:`dma_buf.file ` will equally achieve that for a dma-buf object. ”h]”(hÌ)�”}”(hŒ8And as a CPU fallback in userspace processing pipelines.”h]”hŒ8And as a CPU fallback in userspace processing pipelines.”…”�”}”(hjçh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:119: ./drivers/dma-buf/dma-buf.c”h´M¾hjãubhÌ)�”}”(hXžSimilar to the motivation for kernel cpu access it is again important that the userspace code of a given importing subsystem can use the same interfaces with a imported dma-buf buffer object as with a native buffer object. This is especially important for drm where the userspace part of contemporary OpenGL, X, and other drivers is huge, and reworking them to use a different way to mmap a buffer rather invasive.”h]”hXžSimilar to the motivation for kernel cpu access it is again important that the userspace code of a given importing subsystem can use the same interfaces with a imported dma-buf buffer object as with a native buffer object. This is especially important for drm where the userspace part of contemporary OpenGL, X, and other drivers is huge, and reworking them to use a different way to mmap a buffer rather invasive.”…”�”}”(hjöh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:119: ./drivers/dma-buf/dma-buf.c”h´MÀhjãubhÌ)�”}”(hXØThe assumption in the current dma-buf interfaces is that redirecting the initial mmap is all that's needed. A survey of some of the existing subsystems shows that no driver seems to do any nefarious thing like syncing up with outstanding asynchronous processing on the device or allocating special resources at fault time. So hopefully this is good enough, since adding interfaces to intercept pagefaults and allow pte shootdowns would increase the complexity quite a bit.”h]”hXÚThe assumption in the current dma-buf interfaces is that redirecting the initial mmap is all that’s needed. A survey of some of the existing subsystems shows that no driver seems to do any nefarious thing like syncing up with outstanding asynchronous processing on the device or allocating special resources at fault time. So hopefully this is good enough, since adding interfaces to intercept pagefaults and allow pte shootdowns would increase the complexity quite a bit.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:119: ./drivers/dma-buf/dma-buf.c”h´MÇhjãubhÌ)�”}”(hŒ Interface:”h]”hŒ Interface:”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:119: ./drivers/dma-buf/dma-buf.c”h´MÏhjãubjè)�”}”(hŒKint dma_buf_mmap(struct dma_buf *, struct vm_area_struct *, unsigned long);”h]”hŒKint dma_buf_mmap(struct dma_buf *, struct vm_area_struct *, unsigned long);”…”�”}”hj#sbah}”(h]”h ]”h"]”h$]”h&]”j÷jøjù‰jújîjû}”uh1jçh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:119: ./drivers/dma-buf/dma-buf.c”h´MÑhjãubhÌ)�”}”(hŒÎIf the importing subsystem simply provides a special-purpose mmap call to set up a mapping in userspace, calling do_mmap with :c:type:`dma_buf.file ` will equally achieve that for a dma-buf object.”h]”(hŒ~If the importing subsystem simply provides a special-purpose mmap call to set up a mapping in userspace, calling do_mmap with ”…”�”}”(hj3h²hh³Nh´Nubh)�”}”(hŒ :c:type:`dma_buf.file `”h]”jâ)�”}”(hj=h]”hŒ dma_buf.file”…”�”}”(hj?h²hh³Nh´Nubah}”(h]”h ]”(jíjîŒc-type”eh"]”h$]”h&]”uh1jáhj;ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”júŒ refdomain”jîŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jŒdma_buf”uh1hh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:119: ./drivers/dma-buf/dma-buf.c”h´MÕhj3ubhŒ0 will equally achieve that for a dma-buf object.”…”�”}”(hj3h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jZh´MÕhjãubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj³ubeh}”(h]”h ]”h"]”h$]”h&]”jRjSuh1hýh³jÈh´M‡hj“h²hubeh}”(h]”jÒah ]”h"]”Œ cpu access to dma buffer objects”ah$]”h&]”uh1hµhj�h²hh³hÊh´KuŒ referenced”Kubh¶)�”}”(hhh]”(h»)�”}”(hŒImplicit Fence Poll Support”h]”hŒImplicit Fence Poll Support”…”�”}”(hj|h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjyh²hh³hÊh´K{ubhÌ)�”}”(hX1To support cross-device and cross-driver synchronization of buffer access implicit fences (represented internally in the kernel with :c:type:`struct dma_fence `) can be attached to a :c:type:`dma_buf`. The glue for that and a few related things are provided in the :c:type:`dma_resv` structure.”h]”(hŒ…To support cross-device and cross-driver synchronization of buffer access implicit fences (represented internally in the kernel with ”…”�”}”(hjŠh²hh³Nh´Nubh)�”}”(hŒ&:c:type:`struct dma_fence `”h]”jâ)�”}”(hj”h]”hŒstruct dma_fence”…”�”}”(hj–h²hh³Nh´Nubah}”(h]”h ]”(jíjîŒc-type”eh"]”h$]”h&]”uh1jáhj’ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”júŒ refdomain”jîŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jŒ dma_fence”uh1hh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:125: ./drivers/dma-buf/dma-buf.c”h´MhjŠubhŒ) can be attached to a ”…”�”}”(hjŠh²hh³Nh´Nubh)�”}”(hŒ:c:type:`dma_buf`”h]”jâ)�”}”(hj¸h]”hŒdma_buf”…”�”}”(hjºh²hh³Nh´Nubah}”(h]”h ]”(jíjîŒc-type”eh"]”h$]”h&]”uh1jáhj¶ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”júŒ refdomain”jîŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰jŒdma_buf”uh1hh³j±h´MhjŠubhŒA. The glue for that and a few related things are provided in the ”…”�”}”(hjŠh²hh³Nh´Nubh)�”}”(hŒ:c:type:`dma_resv`”h]”jâ)�”}”(hjÛh]”hŒdma_resv”…”�”}”(hjÝh²hh³Nh´Nubah}”(h]”h ]”(jíjîŒc-type”eh"]”h$]”h&]”uh1jáhjÙubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”júŒ refdomain”jîŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰jŒdma_resv”uh1hh³j±h´MhjŠubhŒ structure.”…”�”}”(hjŠh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j±h´Mhjyh²hubhÌ)�”}”(hŒgUserspace can query the state of these implicitly tracked fences using poll() and related system calls:”h]”hŒgUserspace can query the state of these implicitly tracked fences using poll() and related system calls:”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:125: ./drivers/dma-buf/dma-buf.c”h´Mhjyh²hubhþ)�”}”(hhh]”(j)�”}”(hŒsChecking for EPOLLIN, i.e. read access, can be use to query the state of the most recent write or exclusive fence. ”h]”hÌ)�”}”(hŒrChecking for EPOLLIN, i.e. read access, can be use to query the state of the most recent write or exclusive fence.”h]”hŒrChecking for EPOLLIN, i.e. read access, can be use to query the state of the most recent write or exclusive fence.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:125: ./drivers/dma-buf/dma-buf.c”h´Mhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjubj)�”}”(hŒ|Checking for EPOLLOUT, i.e. write access, can be used to query the state of all attached fences, shared and exclusive ones. ”h]”hÌ)�”}”(hŒ{Checking for EPOLLOUT, i.e. write access, can be used to query the state of all attached fences, shared and exclusive ones.”h]”hŒ{Checking for EPOLLOUT, i.e. write access, can be used to query the state of all attached fences, shared and exclusive ones.”…”�”}”(hj1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:125: ./drivers/dma-buf/dma-buf.c”h´M"hj-ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjubeh}”(h]”h ]”h"]”h$]”h&]”jRjSuh1hýh³j&h´Mhjyh²hubhÌ)�”}”(hŒÏNote that this only signals the completion of the respective fences, i.e. the DMA transfers are complete. Cache flushing and any other necessary preparations before CPU access can begin still need to happen.”h]”hŒÏNote that this only signals the completion of the respective fences, i.e. the DMA transfers are complete. Cache flushing and any other necessary preparations before CPU access can begin still need to happen.”…”�”}”(hjLh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:125: ./drivers/dma-buf/dma-buf.c”h´M%hjyh²hubhÌ)�”}”(hŒ�As an alternative to poll(), the set of fences on DMA buffer can be exported as a :c:type:`sync_file` using :c:type:`dma_buf_sync_file_export`.”h]”(hŒRAs an alternative to poll(), the set of fences on DMA buffer can be exported as a ”…”�”}”(hj[h²hh³Nh´Nubh)�”}”(hŒ:c:type:`sync_file`”h]”jâ)�”}”(hjeh]”hŒ sync_file”…”�”}”(hjgh²hh³Nh´Nubah}”(h]”h ]”(jíjîŒc-type”eh"]”h$]”h&]”uh1jáhjcubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”júŒ refdomain”jîŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰jŒ sync_file”uh1hh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:125: ./drivers/dma-buf/dma-buf.c”h´M)hj[ubhŒ using ”…”�”}”(hj[h²hh³Nh´Nubh)�”}”(hŒ":c:type:`dma_buf_sync_file_export`”h]”jâ)�”}”(hj‰h]”hŒdma_buf_sync_file_export”…”�”}”(hj‹h²hh³Nh´Nubah}”(h]”h ]”(jíjîŒc-type”eh"]”h$]”h&]”uh1jáhj‡ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”júŒ refdomain”jîŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰jŒdma_buf_sync_file_export”uh1hh³j‚h´M)hj[ubhŒ.”…”�”}”(hj[h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j‚h´M)hjyh²hubeh}”(h]”jah ]”h"]”Œimplicit fence poll support”ah$]”h&]”uh1hµhj�h²hh³hÊh´K{jxKubh¶)�”}”(hhh]”(h»)�”}”(hŒDMA Buffer ioctls”h]”hŒDMA Buffer ioctls”…”�”}”(hjºh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj·h²hh³hÊh´K�ubhŒindex”“”)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(Œsingle”Œdma_buf_sync (C struct)”Œc.dma_buf_sync”hNt”auh1jÈhj·h²hh³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:131: ./include/uapi/linux/dma-buf.h”h´NubhŒdesc”“”)�”}”(hhh]”(hŒdesc_signature”“”)�”}”(hŒ dma_buf_sync”h]”hŒdesc_signature_line”“”)�”}”(hŒstruct dma_buf_sync”h]”(hŒdesc_sig_keyword”“”)�”}”(hŒstruct”h]”hŒstruct”…”�”}”(hjíh²hh³Nh´Nubah}”(h]”h ]”Œk”ah"]”h$]”h&]”uh1jëhjçh²hh³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:131: ./include/uapi/linux/dma-buf.h”h´KubhŒdesc_sig_space”“”)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÿh²hh³Nh´Nubah}”(h]”h ]”Œw”ah"]”h$]”h&]”uh1jýhjçh²hh³jüh´KubhŒ desc_name”“”)�”}”(hŒ dma_buf_sync”h]”hŒ desc_sig_name”“”)�”}”(hjãh]”hŒ dma_buf_sync”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”Œn”ah"]”h$]”h&]”uh1j hj ubah}”(h]”h ]”(Œsig-name”Œdescname”eh"]”h$]”h&]”j÷jøuh1j hjçh²hh³jüh´Kubeh}”(h]”h ]”h"]”h$]”h&]”j÷jøŒ add_permalink”ˆuh1jåŒsphinx_line_type”Œ declarator”hjáh²hh³jüh´Kubah}”(h]”j×ah ]”(Œsig”Œ sig-object”eh"]”h$]”h&]”Œ is_multiline”ˆŒ _toc_parts”)Œ _toc_name”huh1jßh³jüh´KhjÜh²hubhŒ desc_content”“”)�”}”(hhh]”hÌ)�”}”(hŒSynchronize with CPU access.”h]”hŒSynchronize with CPU access.”…”�”}”(hjE h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:131: ./include/uapi/linux/dma-buf.h”h´KhjB h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j@ hjÜh²hh³jüh´Kubeh}”(h]”h ]”(jîŒstruct”eh"]”h$]”h&]”Œdomain”jîŒobjtype”j] Œdesctype”j] Œnoindex”‰Œ noindexentry”‰Œnocontentsentry”‰uh1jÚh²hhj·h³jÙh´NubhŒ container”“”)�”}”(hX8**Definition**:: struct dma_buf_sync { __u64 flags; }; **Members** ``flags`` Set of access flags DMA_BUF_SYNC_START: Indicates the start of a map access session. DMA_BUF_SYNC_END: Indicates the end of a map access session. DMA_BUF_SYNC_READ: Indicates that the mapped DMA buffer will be read by the client via the CPU map. DMA_BUF_SYNC_WRITE: Indicates that the mapped DMA buffer will be written by the client via the CPU map. DMA_BUF_SYNC_RW: An alias for DMA_BUF_SYNC_READ | DMA_BUF_SYNC_WRITE.”h]”(hÌ)�”}”(hŒ**Definition**::”h]”(hŒstrong”“”)�”}”(hŒ**Definition**”h]”hŒ Definition”…”�”}”(hjs h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hjm ubhŒ:”…”�”}”(hjm h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:131: ./include/uapi/linux/dma-buf.h”h´Khji ubjè)�”}”(hŒ)struct dma_buf_sync { __u64 flags; };”h]”hŒ)struct dma_buf_sync { __u64 flags; };”…”�”}”hjŒ sbah}”(h]”h ]”h"]”h$]”h&]”j÷jøuh1jçh³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:131: ./include/uapi/linux/dma-buf.h”h´K!hji ubhÌ)�”}”(hŒ **Members**”h]”jr )�”}”(hj� h]”hŒMembers”…”�”}”(hjŸ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hj› ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:131: ./include/uapi/linux/dma-buf.h”h´K%hji ubhŒdefinition_list”“”)�”}”(hhh]”hŒdefinition_list_item”“”)�”}”(hXÎ``flags`` Set of access flags DMA_BUF_SYNC_START: Indicates the start of a map access session. DMA_BUF_SYNC_END: Indicates the end of a map access session. DMA_BUF_SYNC_READ: Indicates that the mapped DMA buffer will be read by the client via the CPU map. DMA_BUF_SYNC_WRITE: Indicates that the mapped DMA buffer will be written by the client via the CPU map. DMA_BUF_SYNC_RW: An alias for DMA_BUF_SYNC_READ | DMA_BUF_SYNC_WRITE.”h]”(hŒterm”“”)�”}”(hŒ ``flags``”h]”jâ)�”}”(hj h]”hŒflags”…”�”}”(hjÄ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjÀ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:131: ./include/uapi/linux/dma-buf.h”h´KJhjº ubhŒ definition”“”)�”}”(hhh]”(hÌ)�”}”(hŒSet of access flags”h]”hŒSet of access flags”…”�”}”(hjÝ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:131: ./include/uapi/linux/dma-buf.h”h´K:hjÚ ubj´ )�”}”(hhh]”(j¹ )�”}”(hŒADMA_BUF_SYNC_START: Indicates the start of a map access session. ”h]”(j¿ )�”}”(hŒDMA_BUF_SYNC_START:”h]”hŒDMA_BUF_SYNC_START:”…”�”}”(hjó h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:131: ./include/uapi/linux/dma-buf.h”h´K=hjï ubjÙ )�”}”(hhh]”hÌ)�”}”(hŒ,Indicates the start of a map access session.”h]”hŒ,Indicates the start of a map access session.”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j h´K=hj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hjï ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³j h´K=hjì ubj¹ )�”}”(hŒ=DMA_BUF_SYNC_END: Indicates the end of a map access session. ”h]”(j¿ )�”}”(hŒDMA_BUF_SYNC_END:”h]”hŒDMA_BUF_SYNC_END:”…”�”}”(hj# h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:131: ./include/uapi/linux/dma-buf.h”h´K@hj ubjÙ )�”}”(hhh]”hÌ)�”}”(hŒ*Indicates the end of a map access session.”h]”hŒ*Indicates the end of a map access session.”…”�”}”(hj5 h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j1 h´K@hj2 ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³j1 h´K@hjì ubj¹ )�”}”(hŒdDMA_BUF_SYNC_READ: Indicates that the mapped DMA buffer will be read by the client via the CPU map. ”h]”(j¿ )�”}”(hŒDMA_BUF_SYNC_READ:”h]”hŒDMA_BUF_SYNC_READ:”…”�”}”(hjS h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:131: ./include/uapi/linux/dma-buf.h”h´KDhjO ubjÙ )�”}”(hhh]”hÌ)�”}”(hŒPIndicates that the mapped DMA buffer will be read by the client via the CPU map.”h]”hŒPIndicates that the mapped DMA buffer will be read by the client via the CPU map.”…”�”}”(hje h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:131: ./include/uapi/linux/dma-buf.h”h´KChjb ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hjO ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³ja h´KDhjì ubj¹ )�”}”(hŒhDMA_BUF_SYNC_WRITE: Indicates that the mapped DMA buffer will be written by the client via the CPU map. ”h]”(j¿ )�”}”(hŒDMA_BUF_SYNC_WRITE:”h]”hŒDMA_BUF_SYNC_WRITE:”…”�”}”(hj„ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:131: ./include/uapi/linux/dma-buf.h”h´KHhj€ ubjÙ )�”}”(hhh]”hÌ)�”}”(hŒSIndicates that the mapped DMA buffer will be written by the client via the CPU map.”h]”hŒSIndicates that the mapped DMA buffer will be written by the client via the CPU map.”…”�”}”(hj– h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:131: ./include/uapi/linux/dma-buf.h”h´KGhj“ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hj€ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³j’ h´KHhjì ubj¹ )�”}”(hŒEDMA_BUF_SYNC_RW: An alias for DMA_BUF_SYNC_READ | DMA_BUF_SYNC_WRITE.”h]”(j¿ )�”}”(hŒDMA_BUF_SYNC_RW:”h]”hŒDMA_BUF_SYNC_RW:”…”�”}”(hjµ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³j× h´KJhj± ubjÙ )�”}”(hhh]”hÌ)�”}”(hŒ4An alias for DMA_BUF_SYNC_READ | DMA_BUF_SYNC_WRITE.”h]”hŒ4An alias for DMA_BUF_SYNC_READ | DMA_BUF_SYNC_WRITE.”…”�”}”(hjÆ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:131: ./include/uapi/linux/dma-buf.h”h´KKhjà ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hj± ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³j× h´KJhjì ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j³ hjÚ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jØ hjº ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³j× h´KJhjµ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j³ hji ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jg hj·h²hh³jÙh´NubhÌ)�”}”(hŒ**Description**”h]”jr )�”}”(hj h]”hŒ Description”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hj ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:131: ./include/uapi/linux/dma-buf.h”h´KNhj·h²hubhÌ)�”}”(hX*When a DMA buffer is accessed from the CPU via mmap, it is not always possible to guarantee coherency between the CPU-visible map and underlying memory. To manage coherency, DMA_BUF_IOCTL_SYNC must be used to bracket any CPU access to give the kernel the chance to shuffle memory around if needed.”h]”hX*When a DMA buffer is accessed from the CPU via mmap, it is not always possible to guarantee coherency between the CPU-visible map and underlying memory. To manage coherency, DMA_BUF_IOCTL_SYNC must be used to bracket any CPU access to give the kernel the chance to shuffle memory around if needed.”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:131: ./include/uapi/linux/dma-buf.h”h´Khj·h²hubhÌ)�”}”(hŒþPrior to accessing the map, the client must call DMA_BUF_IOCTL_SYNC with DMA_BUF_SYNC_START and the appropriate read/write flags. Once the access is complete, the client should call DMA_BUF_IOCTL_SYNC with DMA_BUF_SYNC_END and the same read/write flags.”h]”hŒþPrior to accessing the map, the client must call DMA_BUF_IOCTL_SYNC with DMA_BUF_SYNC_START and the appropriate read/write flags. Once the access is complete, the client should call DMA_BUF_IOCTL_SYNC with DMA_BUF_SYNC_END and the same read/write flags.”…”�”}”(hj' h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:131: ./include/uapi/linux/dma-buf.h”h´K"hj·h²hubhÌ)�”}”(hXThe synchronization provided via DMA_BUF_IOCTL_SYNC only provides cache coherency. It does not prevent other processes or devices from accessing the memory at the same time. If synchronization with a GPU or other device driver is required, it is the client's responsibility to wait for buffer to be ready for reading or writing before calling this ioctl with DMA_BUF_SYNC_START. Likewise, the client must ensure that follow-up work is not submitted to GPU or other device driver until after this ioctl has been called with DMA_BUF_SYNC_END?”h]”hX!The synchronization provided via DMA_BUF_IOCTL_SYNC only provides cache coherency. It does not prevent other processes or devices from accessing the memory at the same time. If synchronization with a GPU or other device driver is required, it is the client’s responsibility to wait for buffer to be ready for reading or writing before calling this ioctl with DMA_BUF_SYNC_START. Likewise, the client must ensure that follow-up work is not submitted to GPU or other device driver until after this ioctl has been called with DMA_BUF_SYNC_END?”…”�”}”(hj6 h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:131: ./include/uapi/linux/dma-buf.h”h´K'hj·h²hubhÌ)�”}”(hXeIf the driver or API with which the client is interacting uses implicit synchronization, waiting for prior work to complete can be done via poll() on the DMA buffer file descriptor. If the driver or API requires explicit synchronization, the client may have to wait on a sync_file or other synchronization primitive outside the scope of the DMA buffer API.”h]”hXeIf the driver or API with which the client is interacting uses implicit synchronization, waiting for prior work to complete can be done via poll() on the DMA buffer file descriptor. If the driver or API requires explicit synchronization, the client may have to wait on a sync_file or other synchronization primitive outside the scope of the DMA buffer API.”…”�”}”(hjE h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:131: ./include/uapi/linux/dma-buf.h”h´K0hj·h²hubjÉ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÕŒ#dma_buf_export_sync_file (C struct)”Œc.dma_buf_export_sync_file”hNt”auh1jÈhj·h²hh³jÙh´NubjÛ)�”}”(hhh]”(jà)�”}”(hŒdma_buf_export_sync_file”h]”jæ)�”}”(hŒstruct dma_buf_export_sync_file”h]”(jì)�”}”(hjïh]”hŒstruct”…”�”}”(hjm h²hh³Nh´Nubah}”(h]”h ]”jøah"]”h$]”h&]”uh1jëhji h²hh³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:131: ./include/uapi/linux/dma-buf.h”h´K9ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj{ h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhji h²hh³jz h´K9ubj )�”}”(hŒdma_buf_export_sync_file”h]”j )�”}”(hjg h]”hŒdma_buf_export_sync_file”…”�”}”(hj� h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj‰ ubah}”(h]”h ]”(j' j( eh"]”h$]”h&]”j÷jøuh1j hji h²hh³jz h´K9ube•h}”(h]”h ]”h"]”h$]”h&]”j÷jøj2 ˆuh1jåj3 j4 hje h²hh³jz h´K9ubah}”(h]”j` ah ]”(j8 j9 eh"]”h$]”h&]”j= ˆj> )j? huh1jßh³jz h´K9hjb h²hubjA )�”}”(hhh]”hÌ)�”}”(hŒGet a sync_file from a dma-buf”h]”hŒGet a sync_file from a dma-buf”…”�”}”(hj¯ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:131: ./include/uapi/linux/dma-buf.h”h´KZhj¬ h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j@ hjb h²hh³jz h´K9ubeh}”(h]”h ]”(jîŒstruct”eh"]”h$]”h&]”ja jîjb jÇ jc jÇ jd ‰je ‰jf ‰uh1jÚh²hhj·h³jÙh´Nubjh )�”}”(hXô**Definition**:: struct dma_buf_export_sync_file { __u32 flags; __s32 fd; }; **Members** ``flags`` Read/write flags Must be DMA_BUF_SYNC_READ, DMA_BUF_SYNC_WRITE, or both. If DMA_BUF_SYNC_READ is set and DMA_BUF_SYNC_WRITE is not set, the returned sync file waits on any writers of the dma-buf to complete. Waiting on the returned sync file is equivalent to poll() with POLLIN. If DMA_BUF_SYNC_WRITE is set, the returned sync file waits on any users of the dma-buf (read or write) to complete. Waiting on the returned sync file is equivalent to poll() with POLLOUT. If both DMA_BUF_SYNC_WRITE and DMA_BUF_SYNC_READ are set, this is equivalent to just DMA_BUF_SYNC_WRITE. ``fd`` Returned sync file descriptor”h]”(hÌ)�”}”(hŒ**Definition**::”h]”(jr )�”}”(hŒ**Definition**”h]”hŒ Definition”…”�”}”(hjÓ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hjÏ ubhŒ:”…”�”}”(hjÏ h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:131: ./include/uapi/linux/dma-buf.h”h´K^hjË ubjè)�”}”(hŒCstruct dma_buf_export_sync_file { __u32 flags; __s32 fd; };”h]”hŒCstruct dma_buf_export_sync_file { __u32 flags; __s32 fd; };”…”�”}”hjì sbah}”(h]”h ]”h"]”h$]”h&]”j÷jøuh1jçh³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:131: ./include/uapi/linux/dma-buf.h”h´K`hjË ubhÌ)�”}”(hŒ **Members**”h]”jr )�”}”(hjý h]”hŒMembers”…”�”}”(hjÿ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hjû ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:131: ./include/uapi/linux/dma-buf.h”h´KehjË ubj´ )�”}”(hhh]”(j¹ )�”}”(hXK``flags`` Read/write flags Must be DMA_BUF_SYNC_READ, DMA_BUF_SYNC_WRITE, or both. If DMA_BUF_SYNC_READ is set and DMA_BUF_SYNC_WRITE is not set, the returned sync file waits on any writers of the dma-buf to complete. Waiting on the returned sync file is equivalent to poll() with POLLIN. If DMA_BUF_SYNC_WRITE is set, the returned sync file waits on any users of the dma-buf (read or write) to complete. Waiting on the returned sync file is equivalent to poll() with POLLOUT. If both DMA_BUF_SYNC_WRITE and DMA_BUF_SYNC_READ are set, this is equivalent to just DMA_BUF_SYNC_WRITE. ”h]”(j¿ )�”}”(hŒ ``flags``”h]”jâ)�”}”(hj h]”hŒflags”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:131: ./include/uapi/linux/dma-buf.h”h´K‡hj ubjÙ )�”}”(hhh]”(hÌ)�”}”(hŒRead/write flags”h]”hŒRead/write flags”…”�”}”(hj5 h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:131: ./include/uapi/linux/dma-buf.h”h´Kzhj2 ubhÌ)�”}”(hŒ7Must be DMA_BUF_SYNC_READ, DMA_BUF_SYNC_WRITE, or both.”h]”hŒ7Must be DMA_BUF_SYNC_READ, DMA_BUF_SYNC_WRITE, or both.”…”�”}”(hjD h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:131: ./include/uapi/linux/dma-buf.h”h´K|hj2 ubhÌ)�”}”(hŒÎIf DMA_BUF_SYNC_READ is set and DMA_BUF_SYNC_WRITE is not set, the returned sync file waits on any writers of the dma-buf to complete. Waiting on the returned sync file is equivalent to poll() with POLLIN.”h]”hŒÎIf DMA_BUF_SYNC_READ is set and DMA_BUF_SYNC_WRITE is not set, the returned sync file waits on any writers of the dma-buf to complete. Waiting on the returned sync file is equivalent to poll() with POLLIN.”…”�”}”(hjS h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:131: ./include/uapi/linux/dma-buf.h”h´K~hj2 ubhÌ)�”}”(hX%If DMA_BUF_SYNC_WRITE is set, the returned sync file waits on any users of the dma-buf (read or write) to complete. Waiting on the returned sync file is equivalent to poll() with POLLOUT. If both DMA_BUF_SYNC_WRITE and DMA_BUF_SYNC_READ are set, this is equivalent to just DMA_BUF_SYNC_WRITE.”h]”hX%If DMA_BUF_SYNC_WRITE is set, the returned sync file waits on any users of the dma-buf (read or write) to complete. Waiting on the returned sync file is equivalent to poll() with POLLOUT. If both DMA_BUF_SYNC_WRITE and DMA_BUF_SYNC_READ are set, this is equivalent to just DMA_BUF_SYNC_WRITE.”…”�”}”(hjb h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:131: ./include/uapi/linux/dma-buf.h”h´Kƒhj2 ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jØ hj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³j1 h´K‡hj ubj¹ )�”}”(hŒ$``fd`` Returned sync file descriptor”h]”(j¿ )�”}”(hŒ``fd``”h]”jâ)�”}”(hjƒ h]”hŒfd”…”�”}”(hj… h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj� ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:131: ./include/uapi/linux/dma-buf.h”h´K‰hj} ubjÙ )�”}”(hhh]”hÌ)�”}”(hŒReturned sync file descriptor”h]”hŒReturned sync file descriptor”…”�”}”(hjœ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:131: ./include/uapi/linux/dma-buf.h”h´KŠhj™ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hj} ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³j˜ h´K‰hj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j³ hjË ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jg hj·h²hh³jÙh´NubhÌ)�”}”(hŒ**Description**”h]”jr )�”}”(hjÆ h]”hŒ Description”…”�”}”(hjÈ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hjÄ ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:131: ./include/uapi/linux/dma-buf.h”h´K�hj·h²hubhÌ)�”}”(hX2Userspace can perform a DMA_BUF_IOCTL_EXPORT_SYNC_FILE to retrieve the current set of fences on a dma-buf file descriptor as a sync_file. CPU waits via poll() or other driver-specific mechanisms typically wait on whatever fences are on the dma-buf at the time the wait begins. This is similar except that it takes a snapshot of the current fences on the dma-buf for waiting later instead of waiting immediately. This is useful for modern graphics APIs such as Vulkan which assume an explicit synchronization model but still need to inter-operate with dma-buf.”h]”hX2Userspace can perform a DMA_BUF_IOCTL_EXPORT_SYNC_FILE to retrieve the current set of fences on a dma-buf file descriptor as a sync_file. CPU waits via poll() or other driver-specific mechanisms typically wait on whatever fences are on the dma-buf at the time the wait begins. This is similar except that it takes a snapshot of the current fences on the dma-buf for waiting later instead of waiting immediately. This is useful for modern graphics APIs such as Vulkan which assume an explicit synchronization model but still need to inter-operate with dma-buf.”…”�”}”(hjÜ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:131: ./include/uapi/linux/dma-buf.h”h´K[hj·h²hubhÌ)�”}”(hŒ,The intended usage pattern is the following:”h]”hŒ,The intended usage pattern is the following:”…”�”}”(hjë h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:131: ./include/uapi/linux/dma-buf.h”h´Kdhj·h²hubhø)�”}”(hX¤1. Export a sync_file with flags corresponding to the expected GPU usage via DMA_BUF_IOCTL_EXPORT_SYNC_FILE. 2. Submit rendering work which uses the dma-buf. The work should wait on the exported sync file before rendering and produce another sync_file when complete. 3. Import the rendering-complete sync_file into the dma-buf with flags corresponding to the GPU usage via DMA_BUF_IOCTL_IMPORT_SYNC_FILE. ”h]”jm)�”}”(hhh]”(j)�”}”(hŒjExport a sync_file with flags corresponding to the expected GPU usage via DMA_BUF_IOCTL_EXPORT_SYNC_FILE. ”h]”hÌ)�”}”(hŒiExport a sync_file with flags corresponding to the expected GPU usage via DMA_BUF_IOCTL_EXPORT_SYNC_FILE.”h]”hŒiExport a sync_file with flags corresponding to the expected GPU usage via DMA_BUF_IOCTL_EXPORT_SYNC_FILE.”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:131: ./include/uapi/linux/dma-buf.h”h´Kfhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjþ ubj)�”}”(hŒœSubmit rendering work which uses the dma-buf. The work should wait on the exported sync file before rendering and produce another sync_file when complete. ”h]”hÌ)�”}”(hŒ›Submit rendering work which uses the dma-buf. The work should wait on the exported sync file before rendering and produce another sync_file when complete.”h]”hŒ›Submit rendering work which uses the dma-buf. The work should wait on the exported sync file before rendering and produce another sync_file when complete.”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:131: ./include/uapi/linux/dma-buf.h”h´Kihj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjþ ubj)�”}”(hŒ‡Import the rendering-complete sync_file into the dma-buf with flags corresponding to the GPU usage via DMA_BUF_IOCTL_IMPORT_SYNC_FILE. ”h]”hÌ)�”}”(hŒ†Import the rendering-complete sync_file into the dma-buf with flags corresponding to the GPU usage via DMA_BUF_IOCTL_IMPORT_SYNC_FILE.”h]”hŒ†Import the rendering-complete sync_file into the dma-buf with flags corresponding to the GPU usage via DMA_BUF_IOCTL_IMPORT_SYNC_FILE.”…”�”}”(hj7 h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:131: ./include/uapi/linux/dma-buf.h”h´Kmhj3 ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjþ ubeh}”(h]”h ]”h"]”h$]”h&]”jSjTjUhjVjWuh1jlhjú ubah}”(h]”h ]”h"]”h$]”h&]”uh1h÷h³j h´Kfhj·h²hubhÌ)�”}”(hXPUnlike doing implicit synchronization via a GPU kernel driver's exec ioctl, the above is not a single atomic operation. If userspace wants to ensure ordering via these fences, it is the respnosibility of userspace to use locks or other mechanisms to ensure that no other context adds fences or submits work between steps 1 and 3 above.”h]”hXRUnlike doing implicit synchronization via a GPU kernel driver’s exec ioctl, the above is not a single atomic operation. If userspace wants to ensure ordering via these fences, it is the respnosibility of userspace to use locks or other mechanisms to ensure that no other context adds fences or submits work between steps 1 and 3 above.”…”�”}”(hjX h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:131: ./include/uapi/linux/dma-buf.h”h´Kphj·h²hubjÉ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÕŒ#dma_buf_import_sync_file (C struct)”Œc.dma_buf_import_sync_file”hNt”auh1jÈhj·h²hh³jÙh´NubjÛ)�”}”(hhh]”(jà)�”}”(hŒdma_buf_import_sync_file”h]”jæ)�”}”(hŒstruct dma_buf_import_sync_file”h]”(jì)�”}”(hjïh]”hŒstruct”…”�”}”(hj€ h²hh³Nh´Nubah}”(h]”h ]”jøah"]”h$]”h&]”uh1jëhj| h²hh³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:131: ./include/uapi/linux/dma-buf.h”h´Kyubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŽ h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj| h²hh³j� h´Kyubj )�”}”(hŒdma_buf_import_sync_file”h]”j )�”}”(hjz h]”hŒdma_buf_import_sync_file”…”�”}”(hj  h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjœ ubah}”(h]”h ]”(j' j( eh"]”h$]”h&]”j÷jøuh1j hj| h²hh³j� h´Kyubeh}”(h]”h ]”h"]”h$]”h&]”j÷jøj2 ˆuh1jåj3 j4 hjx h²hh³j� h´Kyubah}”(h]”js ah ]”(j8 j9 eh"]”h$]”h&]”j= ˆj> )j? huh1jßh³j� h´Kyhju h²hubjA )�”}”(hhh]”hÌ)�”}”(hŒ!Insert a sync_file into a dma-buf”h]”hŒ!Insert a sync_file into a dma-buf”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:131: ./include/uapi/linux/dma-buf.h”h´KŽhj¿ h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j@ hju h²hh³j� h´Kyubeh}”(h]”h ]”(jîŒstruct”eh"]”h$]”h&]”ja jîjb jÚ jc jÚ jd ‰je ‰jf ‰uh1jÚh²hhj·h³jÙh´Nubjh )�”}”(hXp**Definition**:: struct dma_buf_import_sync_file { __u32 flags; __s32 fd; }; **Members** ``flags`` Read/write flags Must be DMA_BUF_SYNC_READ, DMA_BUF_SYNC_WRITE, or both. If DMA_BUF_SYNC_READ is set and DMA_BUF_SYNC_WRITE is not set, this inserts the sync_file as a read-only fence. Any subsequent implicitly synchronized writes to this dma-buf will wait on this fence but reads will not. If DMA_BUF_SYNC_WRITE is set, this inserts the sync_file as a write fence. All subsequent implicitly synchronized access to this dma-buf will wait on this fence. ``fd`` Sync file descriptor”h]”(hÌ)�”}”(hŒ**Definition**::”h]”(jr )�”}”(hŒ**Definition**”h]”hŒ Definition”…”�”}”(hjæ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hjâ ubhŒ:”…”�”}”(hjâ h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:131: ./include/uapi/linux/dma-buf.h”h´K’hjÞ ubjè)�”}”(hŒCstruct dma_buf_import_sync_file { __u32 flags; __s32 fd; };”h]”hŒCstruct dma_buf_import_sync_file { __u32 flags; __s32 fd; };”…”�”}”hjÿ sbah}”(h]”h ]”h"]”h$]”h&]”j÷jøuh1jçh³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:131: ./include/uapi/linux/dma-buf.h”h´K”hjÞ ubhÌ)�”}”(hŒ **Members**”h]”jr )�”}”(hjh]”hŒMembers”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hjubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:131: ./include/uapi/linux/dma-buf.h”h´K™hjÞ ubj´ )�”}”(hhh]”(j¹ )�”}”(hXÔ``flags`` Read/write flags Must be DMA_BUF_SYNC_READ, DMA_BUF_SYNC_WRITE, or both. If DMA_BUF_SYNC_READ is set and DMA_BUF_SYNC_WRITE is not set, this inserts the sync_file as a read-only fence. Any subsequent implicitly synchronized writes to this dma-buf will wait on this fence but reads will not. If DMA_BUF_SYNC_WRITE is set, this inserts the sync_file as a write fence. All subsequent implicitly synchronized access to this dma-buf will wait on this fence. ”h]”(j¿ )�”}”(hŒ ``flags``”h]”jâ)�”}”(hj/h]”hŒflags”…”�”}”(hj1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj-ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:131: ./include/uapi/linux/dma-buf.h”h´K¥hj)ubjÙ )�”}”(hhh]”(hÌ)�”}”(hŒRead/write flags”h]”hŒRead/write flags”…”�”}”(hjHh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:131: ./include/uapi/linux/dma-buf.h”h´KšhjEubhÌ)�”}”(hŒ7Must be DMA_BUF_SYNC_READ, DMA_BUF_SYNC_WRITE, or both.”h]”hŒ7Must be DMA_BUF_SYNC_READ, DMA_BUF_SYNC_WRITE, or both.”…”�”}”(hjWh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:131: ./include/uapi/linux/dma-buf.h”h´KœhjEubhÌ)�”}”(hŒÚIf DMA_BUF_SYNC_READ is set and DMA_BUF_SYNC_WRITE is not set, this inserts the sync_file as a read-only fence. Any subsequent implicitly synchronized writes to this dma-buf will wait on this fence but reads will not.”h]”hŒÚIf DMA_BUF_SYNC_READ is set and DMA_BUF_SYNC_WRITE is not set, this inserts the sync_file as a read-only fence. Any subsequent implicitly synchronized writes to this dma-buf will wait on this fence but reads will not.”…”�”}”(hjfh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:131: ./include/uapi/linux/dma-buf.h”h´KžhjEubhÌ)�”}”(hŒ¢If DMA_BUF_SYNC_WRITE is set, this inserts the sync_file as a write fence. All subsequent implicitly synchronized access to this dma-buf will wait on this fence.”h]”hŒ¢If DMA_BUF_SYNC_WRITE is set, this inserts the sync_file as a write fence. All subsequent implicitly synchronized access to this dma-buf will wait on this fence.”…”�”}”(hjuh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:131: ./include/uapi/linux/dma-buf.h”h´K£hjEubeh}”(h]”h ]”h"]”h$]”h&]”uh1jØ hj)ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³jDh´K¥hj&ubj¹ )�”}”(hŒ``fd`` Sync file descriptor”h]”(j¿ )�”}”(hŒ``fd``”h]”jâ)�”}”(hj–h]”hŒfd”…”�”}”(hj˜h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj”ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:131: ./include/uapi/linux/dma-buf.h”h´K§hj�ubjÙ )�”}”(hhh]”hÌ)�”}”(hŒSync file descriptor”h]”hŒSync file descriptor”…”�”}”(hj¯h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:131: ./include/uapi/linux/dma-buf.h”h´K¨hj¬ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hj�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³j«h´K§hj&ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j³ hjÞ ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jg hj·h²hh³jÙh´NubhÌ)�”}”(hŒ**Description**”h]”jr )�”}”(hjÙh]”hŒ Description”…”�”}”(hjÛh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hj×ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:131: ./include/uapi/linux/dma-buf.h”h´K«hj·h²hubhÌ)�”}”(hXbUserspace can perform a DMA_BUF_IOCTL_IMPORT_SYNC_FILE to insert a sync_file into a dma-buf for the purposes of implicit synchronization with other dma-buf consumers. This allows clients using explicitly synchronized APIs such as Vulkan to inter-op with dma-buf consumers which expect implicit synchronization such as OpenGL or most media drivers/video.”h]”hXbUserspace can perform a DMA_BUF_IOCTL_IMPORT_SYNC_FILE to insert a sync_file into a dma-buf for the purposes of implicit synchronization with other dma-buf consumers. This allows clients using explicitly synchronized APIs such as Vulkan to inter-op with dma-buf consumers which expect implicit synchronization such as OpenGL or most media drivers/video.”…”�”}”(hjïh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:131: ./include/uapi/linux/dma-buf.h”h´K�hj·h²hubeh}”(h]”j-ah ]”h"]”Œdma buffer ioctls”ah$]”h&]”uh1hµhj�h²hh³hÊh´K�jxKubh¶)�”}”(hhh]”(h»)�”}”(hŒDMA-BUF locking convention”h]”hŒDMA-BUF locking convention”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjh²hh³hÊh´K†ubhÌ)�”}”(hŒ•In order to avoid deadlock situations between dma-buf exports and importers, all dma-buf API users must follow the common dma-buf locking convention.”h]”hŒ•In order to avoid deadlock situations between dma-buf exports and importers, all dma-buf API users must follow the common dma-buf locking convention.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:136: ./drivers/dma-buf/dma-buf.c”h´M²hjh²hubhÌ)�”}”(hŒConvention for importers”h]”hŒConvention for importers”…”�”}”(hj%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:136: ./drivers/dma-buf/dma-buf.c”h´Mµhjh²hubjm)�”}”(hhh]”(j)�”}”(hŒÔImporters must hold the dma-buf reservation lock when calling these functions: - dma_buf_pin() - dma_buf_unpin() - dma_buf_map_attachment() - dma_buf_unmap_attachment() - dma_buf_vmap() - dma_buf_vunmap() ”h]”(hÌ)�”}”(hŒNImporters must hold the dma-buf reservation lock when calling these functions:”h]”hŒNImporters must hold the dma-buf reservation lock when calling these functions:”…”�”}”(hj;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:136: ./drivers/dma-buf/dma-buf.c”h´M·hj7ubhø)�”}”(hŒ~- dma_buf_pin() - dma_buf_unpin() - dma_buf_map_attachment() - dma_buf_unmap_attachment() - dma_buf_vmap() - dma_buf_vunmap() ”h]”hþ)�”}”(hhh]”(j)�”}”(hŒ dma_buf_pin()”h]”hÌ)�”}”(hjSh]”hŒ dma_buf_pin()”…”�”}”(hjUh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:136: ./drivers/dma-buf/dma-buf.c”h´MºhjQubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjNubj)�”}”(hŒdma_buf_unpin()”h]”hÌ)�”}”(hjkh]”hŒdma_buf_unpin()”…”�”}”(hjmh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:136: ./drivers/dma-buf/dma-buf.c”h´M»hjiubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjNubj)�”}”(hŒdma_buf_map_attachment()”h]”hÌ)�”}”(hjƒh]”hŒdma_buf_map_attachment()”…”�”}”(hj…h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:136: ./drivers/dma-buf/dma-buf.c”h´M¼hj�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjNubj)�”}”(hŒdma_buf_unmap_attachment()”h]”hÌ)�”}”(hj›h]”hŒdma_buf_unmap_attachment()”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:136: ./drivers/dma-buf/dma-buf.c”h´M½hj™ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjNubj)�”}”(hŒdma_buf_vmap()”h]”hÌ)�”}”(hj³h]”hŒdma_buf_vmap()”…”�”}”(hjµh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:136: ./drivers/dma-buf/dma-buf.c”h´M¾hj±ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjNubj)�”}”(hŒdma_buf_vunmap() ”h]”hÌ)�”}”(hŒdma_buf_vunmap()”h]”hŒdma_buf_vunmap()”…”�”}”(hjÍh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:136: ./drivers/dma-buf/dma-buf.c”h´M¿hjÉubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjNubeh}”(h]”h ]”h"]”h$]”h&]”jRjSuh1hýh³jbh´MºhjJubah}”(h]”h ]”h"]”h$]”h&]”uh1h÷h³jbh´Mºhj7ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj4ubj)�”}”(hX®Importers must not hold the dma-buf reservation lock when calling these functions: - dma_buf_attach() - dma_buf_dynamic_attach() - dma_buf_detach() - dma_buf_export() - dma_buf_fd() - dma_buf_get() - dma_buf_put() - dma_buf_mmap() - dma_buf_begin_cpu_access() - dma_buf_end_cpu_access() - dma_buf_map_attachment_unlocked() - dma_buf_unmap_attachment_unlocked() - dma_buf_vmap_unlocked() - dma_buf_vunmap_unlocked() ”h]”(hÌ)�”}”(hŒRImporters must not hold the dma-buf reservation lock when calling these functions:”h]”hŒRImporters must not hold the dma-buf reservation lock when calling these functions:”…”�”}”(hjøh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:136: ./drivers/dma-buf/dma-buf.c”h´MÁhjôubhø)�”}”(hXL- dma_buf_attach() - dma_buf_dynamic_attach() - dma_buf_detach() - dma_buf_export() - dma_buf_fd() - dma_buf_get() - dma_buf_put() - dma_buf_mmap() - dma_buf_begin_cpu_access() - dma_buf_end_cpu_access() - dma_buf_map_attachment_unlocked() - dma_buf_unmap_attachment_unlocked() - dma_buf_vmap_unlocked() - dma_buf_vunmap_unlocked() ”h]”hþ)�”}”(hhh]”(j)�”}”(hŒdma_buf_attach()”h]”hÌ)�”}”(hjh]”hŒdma_buf_attach()”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:136: ./drivers/dma-buf/dma-buf.c”h´MÄhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj ubj)�”}”(hŒdma_buf_dynamic_attach()”h]”hÌ)�”}”(hj(h]”hŒdma_buf_dynamic_attach()”…”�”}”(hj*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:136: ./drivers/dma-buf/dma-buf.c”h´MÅhj&ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj ubj)�”}”(hŒdma_buf_detach()”h]”hÌ)�”}”(hj@h]”hŒdma_buf_detach()”…”�”}”(hjBh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:136: ./drivers/dma-buf/dma-buf.c”h´MÆhj>ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj ubj)�”}”(hŒdma_buf_export()”h]”hÌ)�”}”(hjXh]”hŒdma_buf_export()”…”�”}”(hjZh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:136: ./drivers/dma-buf/dma-buf.c”h´MÇhjVubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj ubj)�”}”(hŒ dma_buf_fd()”h]”hÌ)�”}”(hjph]”hŒ dma_buf_fd()”…”�”}”(hjrh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:136: ./drivers/dma-buf/dma-buf.c”h´MÈhjnubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj ubj)�”}”(hŒ dma_buf_get()”h]”hÌ)�”}”(hjˆh]”hŒ dma_buf_get()”…”�”}”(hjŠh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:136: ./drivers/dma-buf/dma-buf.c”h´MÉhj†ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj ubj)�”}”(hŒ dma_buf_put()”h]”hÌ)�”}”(hj h]”hŒ dma_buf_put()”…”�”}”(hj¢h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:136: ./drivers/dma-buf/dma-buf.c”h´MÊhjžubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj ubj)�”}”(hŒdma_buf_mmap()”h]”hÌ)�”}”(hj¸h]”hŒdma_buf_mmap()”…”�”}”(hjºh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:136: ./drivers/dma-buf/dma-buf.c”h´MËhj¶ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj ubj)�”}”(hŒdma_buf_begin_cpu_access()”h]”hÌ)�”}”(hjÐh]”hŒdma_buf_begin_cpu_access()”…”�”}”(hjÒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:136: ./drivers/dma-buf/dma-buf.c”h´MÌhjÎubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj ubj)�”}”(hŒdma_buf_end_cpu_access()”h]”hÌ)�”}”(hjèh]”hŒdma_buf_end_cpu_access()”…”�”}”(hjêh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:136: ./drivers/dma-buf/dma-buf.c”h´MÍhjæubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj ubj)�”}”(hŒ!dma_buf_map_attachment_unlocked()”h]”hÌ)�”}”(hjh]”hŒ!dma_buf_map_attachment_unlocked()”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:136: ./drivers/dma-buf/dma-buf.c”h´MÎhjþubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj ubj)�”}”(hŒ#dma_buf_unmap_attachment_unlocked()”h]”hÌ)�”}”(hjh]”hŒ#dma_buf_unmap_attachment_unlocked()”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:136: ./drivers/dma-buf/dma-buf.c”h´MÏhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj ubj)�”}”(hŒdma_buf_vmap_unlocked()”h]”hÌ)�”}”(hj0h]”hŒdma_buf_vmap_unlocked()”…”�”}”(hj2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:136: ./drivers/dma-buf/dma-buf.c”h´MÐhj.ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj ubj)�”}”(hŒdma_buf_vunmap_unlocked() ”h]”hÌ)�”}”(hŒdma_buf_vunmap_unlocked()”h]”hŒdma_buf_vunmap_unlocked()”…”�”}”(hjJh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:136: ./drivers/dma-buf/dma-buf.c”h´MÑhjFubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj ubeh}”(h]”h ]”h"]”h$]”h&]”jRjSuh1hýh³jh´MÄhjubah}”(h]”h ]”h"]”h$]”h&]”uh1h÷h³jh´MÄhjôubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj4ubeh}”(h]”h ]”h"]”h$]”h&]”jSjTjUhjVjWuh1jlhjh²hh³Nh´NubhÌ)�”}”(hŒConvention for exporters”h]”hŒConvention for exporters”…”�”}”(hjwh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:136: ./drivers/dma-buf/dma-buf.c”h´MÓhjh²hubjm)�”}”(hhh]”(j)�”}”(hX²These :c:type:`dma_buf_ops` callbacks are invoked with unlocked dma-buf reservation and exporter can take the lock: - :c:type:`dma_buf_ops.attach\(\) ` - :c:type:`dma_buf_ops.detach\(\) ` - :c:type:`dma_buf_ops.release\(\) ` - :c:type:`dma_buf_ops.begin_cpu_access\(\) ` - :c:type:`dma_buf_ops.end_cpu_access\(\) ` - :c:type:`dma_buf_ops.mmap\(\) ` ”h]”(hÌ)�”}”(hŒsThese :c:type:`dma_buf_ops` callbacks are invoked with unlocked dma-buf reservation and exporter can take the lock:”h]”(hŒThese ”…”�”}”(hj�h²hh³Nh´Nubh)�”}”(hŒ:c:type:`dma_buf_ops`”h]”jâ)�”}”(hj—h]”hŒ dma_buf_ops”…”�”}”(hj™h²hh³Nh´Nubah}”(h]”h ]”(jíjîŒc-type”eh"]”h$]”h&]”uh1jáhj•ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”júŒ refdomain”jîŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰Œ c:parent_key”Œsphinx.domains.c”Œ LookupKey”“”)�”}”Œdata”]”sbjŒ dma_buf_ops”uh1hh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:136: ./drivers/dma-buf/dma-buf.c”h´MÕhj�ubhŒX callbacks are invoked with unlocked dma-buf reservation and exporter can take the lock:”…”�”}”(hj�h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j¼h´MÕhj‰ubhø)�”}”(hX7- :c:type:`dma_buf_ops.attach\(\) ` - :c:type:`dma_buf_ops.detach\(\) ` - :c:type:`dma_buf_ops.release\(\) ` - :c:type:`dma_buf_ops.begin_cpu_access\(\) ` - :c:type:`dma_buf_ops.end_cpu_access\(\) ` - :c:type:`dma_buf_ops.mmap\(\) ` ”h]”hþ)�”}”(hhh]”(j)�”}”(hŒ.:c:type:`dma_buf_ops.attach\(\) `”h]”hÌ)�”}”(hjÐh]”h)�”}”(hŒ.:c:type:`dma_buf_ops.attach\(\) `”h]”jâ)�”}”(hj×h]”hŒdma_buf_ops.attach()”…”�”}”(hjÙh²hh³Nh´Nubah}”(h]”h ]”(jíjîŒc-type”eh"]”h$]”h&]”uh1jáhjÕubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”júŒ refdomain”jîŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰j³j·jŒ dma_buf_ops”uh1hh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:136: ./drivers/dma-buf/dma-buf.c”h´MØhjÒubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jôh´MØhjÎubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjËubj)�”}”(hŒ.:c:type:`dma_buf_ops.detach\(\) `”h]”hÌ)�”}”(hjh]”h)�”}”(hŒ.:c:type:`dma_buf_ops.detach\(\) `”h]”jâ)�”}”(hj h]”hŒdma_buf_ops.detach()”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”(jíjîŒc-type”eh"]”h$]”h&]”uh1jáhjubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”júŒ refdomain”jîŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰j³j·jŒ dma_buf_ops”uh1hh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:136: ./drivers/dma-buf/dma-buf.c”h´MÙhjubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j'h´MÙhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjËubj)�”}”(hŒ/:c:type:`dma_buf_ops.release\(\) `”h]”hÌ)�”}”(hj6h]”h)�”}”(hŒ/:c:type:`dma_buf_ops.release\(\) `”h]”jâ)�”}”(hj=h]”hŒdma_buf_ops.release()”…”�”}”(hj?h²hh³Nh´Nubah}”(h]”h ]”(jíjîŒc-type”eh"]”h$]”h&]”uh1jáhj;ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”júŒ refdomain”jîŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰j³j·jŒ dma_buf_ops”uh1hh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:136: ./drivers/dma-buf/dma-buf.c”h´MÚhj8ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jZh´MÚhj4ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjËubj)�”}”(hŒ8:c:type:`dma_buf_ops.begin_cpu_access\(\) `”h]”hÌ)�”}”(hjih]”h)�”}”(hŒ8:c:type:`dma_buf_ops.begin_cpu_access\(\) `”h]”jâ)�”}”(hjph]”hŒdma_buf_ops.begin_cpu_access()”…”�”}”(hjrh²hh³Nh´Nubah}”(h]”h ]”(jíjîŒc-type”eh"]”h$]”h&]”uh1jáhjnubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”júŒ refdomain”jîŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰j³j·jŒ dma_buf_ops”uh1hh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:136: ./drivers/dma-buf/dma-buf.c”h´MÛhjkubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j�h´MÛhjgubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjËubj)�”}”(hŒ6:c:type:`dma_buf_ops.end_cpu_access\(\) `”h]”hÌ)�”}”(hjœh]”h)�”}”(hŒ6:c:type:`dma_buf_ops.end_cpu_access\(\) `”h]”jâ)�”}”(hj£h]”hŒdma_buf_ops.end_cpu_access()”…”�”}”(hj¥h²hh³Nh´Nubah}”(h]”h ]”(jíjîŒc-type”eh"]”h$]”h&]”uh1jáhj¡ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”júŒ refdomain”jîŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰j³j·jŒ dma_buf_ops”uh1hh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:136: ./drivers/dma-buf/dma-buf.c”h´MÜhjžubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jÀh´MÜhjšubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjËubj)�”}”(hŒ-:c:type:`dma_buf_ops.mmap\(\) ` ”h]”hÌ)�”}”(hŒ,:c:type:`dma_buf_ops.mmap\(\) `”h]”h)�”}”(hŒ,:c:type:`dma_buf_ops.mmap\(\) `”h]”jâ)�”}”(hj×h]”hŒdma_buf_ops.mmap()”…”�”}”(hjÙh²hh³Nh´Nubah}”(h]”h ]”(jíjîŒc-type”eh"]”h$]”h&]”uh1jáhjÕubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”júŒ refdomain”jîŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰j³j·jŒ dma_buf_ops”uh1hh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:136: ./drivers/dma-buf/dma-buf.c”h´MÝhjÑubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jôh´MÝhjÍubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjËubeh}”(h]”h ]”h"]”h$]”h&]”jRjSuh1hýh³jôh´MØhjÇubah}”(h]”h ]”h"]”h$]”h&]”uh1h÷h³jôh´MØhj‰ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj†ubj)�”}”(hX§These :c:type:`dma_buf_ops` callbacks are invoked with locked dma-buf reservation and exporter can't take the lock: - :c:type:`dma_buf_ops.pin\(\) ` - :c:type:`dma_buf_ops.unpin\(\) ` - :c:type:`dma_buf_ops.map_dma_buf\(\) ` - :c:type:`dma_buf_ops.unmap_dma_buf\(\) ` - :c:type:`dma_buf_ops.vmap\(\) ` - :c:type:`dma_buf_ops.vunmap\(\) ` ”h]”(hÌ)�”}”(hŒsThese :c:type:`dma_buf_ops` callbacks are invoked with locked dma-buf reservation and exporter can't take the lock:”h]”(hŒThese ”…”�”}”(hjh²hh³Nh´Nubh)�”}”(hŒ:c:type:`dma_buf_ops`”h]”jâ)�”}”(hj!h]”hŒ dma_buf_ops”…”�”}”(hj#h²hh³Nh´Nubah}”(h]”h ]”(jíjîŒc-type”eh"]”h$]”h&]”uh1jáhjubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”júŒ refdomain”jîŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰j³j·jŒ dma_buf_ops”uh1hh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:136: ./drivers/dma-buf/dma-buf.c”h´MßhjubhŒZ callbacks are invoked with locked dma-buf reservation and exporter can’t take the lock:”…”�”}”(hjh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j>h´Mßhjubhø)�”}”(hX,- :c:type:`dma_buf_ops.pin\(\) ` - :c:type:`dma_buf_ops.unpin\(\) ` - :c:type:`dma_buf_ops.map_dma_buf\(\) ` - :c:type:`dma_buf_ops.unmap_dma_buf\(\) ` - :c:type:`dma_buf_ops.vmap\(\) ` - :c:type:`dma_buf_ops.vunmap\(\) ` ”h]”hþ)�”}”(hhh]”(j)�”}”(hŒ+:c:type:`dma_buf_ops.pin\(\) `”h]”hÌ)�”}”(hjRh]”h)�”}”(hŒ+:c:type:`dma_buf_ops.pin\(\) `”h]”jâ)�”}”(hjYh]”hŒdma_buf_ops.pin()”…”�”}”(hj[h²hh³Nh´Nubah}”(h]”h ]”(jíjîŒc-type”eh"]”h$]”h&]”uh1jáhjWubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”júŒ refdomain”jîŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰j³j·jŒ dma_buf_ops”uh1hh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:136: ./drivers/dma-buf/dma-buf.c”h´MâhjTubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jvh´MâhjPubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjMubj)�”}”(hŒ-:c:type:`dma_buf_ops.unpin\(\) `”h]”hÌ)�”}”(hj…h]”h)�”}”(hŒ-:c:type:`dma_buf_ops.unpin\(\) `”h]”jâ)�”}”(hjŒh]”hŒdma_buf_ops.unpin()”…”�”}”(hjŽh²hh³Nh´Nubah}”(h]”h ]”(jíjîŒc-type”eh"]”h$]”h&]”uh1jáhjŠubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”júŒ refdomain”jîŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰j³j·jŒ dma_buf_ops”uh1hh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:136: ./drivers/dma-buf/dma-buf.c”h´Mãhj‡ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j©h´Mãhjƒubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjMubj)�”}”(hŒ3:c:type:`dma_buf_ops.map_dma_buf\(\) `”h]”hÌ)�”}”(hj¸h]”h)�”}”(hŒ3:c:type:`dma_buf_ops.map_dma_buf\(\) `”h]”jâ)�”}”(hj¿h]”hŒdma_buf_ops.map_dma_buf()”…”�”}”(hjÁh²hh³Nh´Nubah}”(h]”h ]”(jíjîŒc-type”eh"]”h$]”h&]”uh1jáhj½ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”júŒ refdomain”jîŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰j³j·jŒ dma_buf_ops”uh1hh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:136: ./drivers/dma-buf/dma-buf.c”h´Mähjºubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jÜh´Mähj¶ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjMubj)�”}”(hŒ5:c:type:`dma_buf_ops.unmap_dma_buf\(\) `”h]”hÌ)�”}”(hjëh]”h)�”}”(hŒ5:c:type:`dma_buf_ops.unmap_dma_buf\(\) `”h]”jâ)�”}”(hjòh]”hŒdma_buf_ops.unmap_dma_buf()”…”�”}”(hjôh²hh³Nh´Nubah}”(h]”h ]”(jíjîŒc-type”eh"]”h$]”h&]”uh1jáhjðubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”júŒ refdomain”jîŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰j³j·jŒ dma_buf_ops”uh1hh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:136: ./drivers/dma-buf/dma-buf.c”h´Måhjíubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jh´Måhjéubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjMubj)�”}”(hŒ,:c:type:`dma_buf_ops.vmap\(\) `”h]”hÌ)�”}”(hjh]”h)�”}”(hŒ,:c:type:`dma_buf_ops.vmap\(\) `”h]”jâ)�”}”(hj%h]”hŒdma_buf_ops.vmap()”…”�”}”(hj'h²hh³Nh´Nubah}”(h]”h ]”(jíjîŒc-type”eh"]”h$]”h&]”uh1jáhj#ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”júŒ refdomain”jîŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰j³j·jŒ dma_buf_ops”uh1hh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:136: ./drivers/dma-buf/dma-buf.c”h´Mæhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jBh´Mæhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjMubj)�”}”(hŒ/:c:type:`dma_buf_ops.vunmap\(\) ` ”h]”hÌ)�”}”(hŒ.:c:type:`dma_buf_ops.vunmap\(\) `”h]”h)�”}”(hŒ.:c:type:`dma_buf_ops.vunmap\(\) `”h]”jâ)�”}”(hjYh]”hŒdma_buf_ops.vunmap()”…”�”}”(hj[h²hh³Nh´Nubah}”(h]”h ]”(jíjîŒc-type”eh"]”h$]”h&]”uh1jáhjWubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”júŒ refdomain”jîŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰j³j·jŒ dma_buf_ops”uh1hh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:136: ./drivers/dma-buf/dma-buf.c”h´MçhjSubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jvh´MçhjOubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjMubeh}”(h]”h ]”h"]”h$]”h&]”jRjSuh1hýh³jvh´MâhjIubah}”(h]”h ]”h"]”h$]”h&]”uh1h÷h³jvh´Mâhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj†ubj)�”}”(hŒrExporters must hold the dma-buf reservation lock when calling these functions: - dma_buf_invalidate_mappings() ”h]”(hÌ)�”}”(hŒNExporters must hold the dma-buf reservation lock when calling these functions:”h]”hŒNExporters must hold the dma-buf reservation lock when calling these functions:”…”�”}”(hj™h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:136: ./drivers/dma-buf/dma-buf.c”h´Méhj•ubhø)�”}”(hŒ!- dma_buf_invalidate_mappings() ”h]”hþ)�”}”(hhh]”j)�”}”(hŒdma_buf_invalidate_mappings() ”h]”hÌ)�”}”(hŒdma_buf_invalidate_mappings()”h]”hŒdma_buf_invalidate_mappings()”…”�”}”(hj³h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:136: ./drivers/dma-buf/dma-buf.c”h´Mìhj¯ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¬ubah}”(h]”h ]”h"]”h$]”h&]”jRjSuh1hýh³jÁh´Mìhj¨ubah}”(h]”h ]”h"]”h$]”h&]”uh1h÷h³jÁh´Mìhj•ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj†ubeh}”(h]”h ]”h"]”h$]”h&]”jSjTjUhjVjWuh1jlhjh²hh³Nh´Nubeh}”(h]”Œdma-buf-locking-convention”ah ]”h"]”Œdma-buf locking convention”ah$]”h&]”uh1hµhj�h²hh³hÊh´K†ubh¶)�”}”(hhh]”(h»)�”}”(hŒ)Kernel Functions and Structures Reference”h]”hŒ)Kernel Functions and Structures Reference”…”�”}”(hjëh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjèh²hh³hÊh´KŒubjÉ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÕŒdma_buf_export (C function)”Œc.dma_buf_export”hNt”auh1jÈhjèh²hh³Nh´NubjÛ)�”}”(hhh]”(jà)�”}”(hŒLstruct dma_buf * dma_buf_export (const struct dma_buf_export_info *exp_info)”h]”jæ)�”}”(hŒJstruct dma_buf *dma_buf_export(const struct dma_buf_export_info *exp_info)”h]”(jì)�”}”(hjïh]”hŒstruct”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jøah"]”h$]”h&]”uh1jëhjh²hh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:142: ./drivers/dma-buf/dma-buf.c”h´M³ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjh²hh³jh´M³ubh)�”}”(hhh]”j )�”}”(hŒdma_buf”h]”hŒdma_buf”…”�”}”(hj1h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj.ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jîŒreftype”Œ identifier”Œ reftarget”j3Œmodname”NŒ classname”Nj³j¶)�”}”j¹]”j´Œ ASTIdentifier”“”)�”}”jGŒdma_buf_export”sbŒc.dma_buf_export”†”asbuh1hhjh²hh³jh´M³ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjUh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjh²hh³jh´M³ubhŒdesc_sig_punctuation”“”)�”}”(hŒ*”h]”hŒ*”…”�”}”(hjeh²hh³Nh´Nubah}”(h]”h ]”Œp”ah"]”h$]”h&]”uh1jchjh²hh³jh´M³ubj )�”}”(hŒdma_buf_export”h]”j )�”}”(hjRh]”hŒdma_buf_export”…”�”}”(hjxh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjtubah}”(h]”h ]”(j' j( eh"]”h$]”h&]”j÷jøuh1j hjh²hh³jh´M³ubhŒdesc_parameterlist”“”)�”}”(hŒ,(const struct dma_buf_export_info *exp_info)”h]”hŒdesc_parameter”“”)�”}”(hŒ*const struct dma_buf_export_info *exp_info”h]”(jì)�”}”(hŒconst”h]”hŒconst”…”�”}”(hj—h²hh³Nh´Nubah}”(h]”h ]”jøah"]”h$]”h&]”uh1jëhj“ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¥h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj“ubjì)�”}”(hjïh]”hŒstruct”…”�”}”(hj³h²hh³Nh´Nubah}”(h]”h ]”jøah"]”h$]”h&]”uh1jëhj“ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÀh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj“ubh)�”}”(hhh]”j )�”}”(hŒdma_buf_export_info”h]”hŒdma_buf_export_info”…”�”}”(hjÑh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjÎubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jîŒreftype”jGŒ reftarget”jÓŒmodname”NŒ classname”Nj³j¶)�”}”j¹]”jPŒc.dma_buf_export”†”asbuh1hhj“ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjïh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj“ubjd)�”}”(hjgh]”hŒ*”…”�”}”(hjýh²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchj“ubj )�”}”(hŒexp_info”h]”hŒexp_info”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj“ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj÷jøuh1j‘hj�ubah}”(h]”h ]”h"]”h$]”h&]”j÷jøuh1j‹hjh²hh³jh´M³ubeh}”(h]”h ]”h"]”h$]”h&]”j÷jøj2 ˆuh1jåj3 j4 hj h²hh³jh´M³ubah}”(h]”jah ]”(j8 j9 eh"]”h$]”h&]”j= ˆj> )j? huh1jßh³jh´M³hjh²hubjA )�”}”(hhh]”hÌ)�”}”(hŒâCreates a new dma_buf, and associates an anon file with this buffer, so it can be exported. Also connect the allocator specific data and ops to the buffer. Additionally, provide a name string for exporter; useful in debugging.”h]”hŒâCreates a new dma_buf, and associates an anon file with this buffer, so it can be exported. Also connect the allocator specific data and ops to the buffer. Additionally, provide a name string for exporter; useful in debugging.”…”�”}”(hj4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:142: ./drivers/dma-buf/dma-buf.c”h´M³hj1h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j@ hjh²hh³jh´M³ubeh}”(h]”h ]”(jîŒfunction”eh"]”h$]”h&]”ja jîjb jLjc jLjd ‰je ‰jf ‰uh1jÚh²hhjèh³Nh´Nubjh )�”}”(hXD**Parameters** ``const struct dma_buf_export_info *exp_info`` [in] holds all the export related information provided by the exporter. see :c:type:`struct dma_buf_export_info ` for further details. **Description** Returns, on success, a newly created struct dma_buf object, which wraps the supplied private data and operations for struct dma_buf_ops. On either missing ops, or error in allocating struct dma_buf, will return negative error. For most cases the easiest way to create **exp_info** is through the ``DEFINE_DMA_BUF_EXPORT_INFO`` macro.”h]”(hÌ)�”}”(hŒ**Parameters**”h]”jr )�”}”(hjVh]”hŒ Parameters”…”�”}”(hjXh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hjTubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:142: ./drivers/dma-buf/dma-buf.c”h´M·hjPubj´ )�”}”(hhh]”j¹ )�”}”(hŒÎ``const struct dma_buf_export_info *exp_info`` [in] holds all the export related information provided by the exporter. see :c:type:`struct dma_buf_export_info ` for further details. ”h]”(j¿ )�”}”(hŒ.``const struct dma_buf_export_info *exp_info``”h]”jâ)�”}”(hjuh]”hŒ*const struct dma_buf_export_info *exp_info”…”�”}”(hjwh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjsubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:142: ./drivers/dma-buf/dma-buf.c”h´MºhjoubjÙ )�”}”(hhh]”hÌ)�”}”(hŒž[in] holds all the export related information provided by the exporter. see :c:type:`struct dma_buf_export_info ` for further details.”h]”(hŒO[in] holds all the export related information provided by the exporter. see ”…”�”}”(hjŽh²hh³Nh´Nubh)�”}”(hŒ::c:type:`struct dma_buf_export_info `”h]”jâ)�”}”(hj˜h]”hŒstruct dma_buf_export_info”…”�”}”(hjšh²hh³Nh´Nubah}”(h]”h ]”(jíjîŒc-type”eh"]”h$]”h&]”uh1jáhj–ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”júŒ refdomain”jîŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰j³j·jŒdma_buf_export_info”uh1hh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:142: ./drivers/dma-buf/dma-buf.c”h´M¸hjŽubhŒ for further details.”…”�”}”(hjŽh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jµh´M¸hj‹ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hjoubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³jŠh´Mºhjlubah}”(h]”h ]”h"]”h$]”h&]”uh1j³ hjPubhÌ)�”}”(hŒ**Description**”h]”jr )�”}”(hjÔh]”hŒ Description”…”�”}”(hjÖh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hjÒubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:142: ./drivers/dma-buf/dma-buf.c”h´M¼hjPubhÌ)�”}”(hŒâReturns, on success, a newly created struct dma_buf object, which wraps the supplied private data and operations for struct dma_buf_ops. On either missing ops, or error in allocating struct dma_buf, will return negative error.”h]”hŒâReturns, on success, a newly created struct dma_buf object, which wraps the supplied private data and operations for struct dma_buf_ops. On either missing ops, or error in allocating struct dma_buf, will return negative error.”…”�”}”(hjêh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:142: ./drivers/dma-buf/dma-buf.c”h´M»hjPubhÌ)�”}”(hŒjFor most cases the easiest way to create **exp_info** is through the ``DEFINE_DMA_BUF_EXPORT_INFO`` macro.”h]”(hŒ)For most cases the easiest way to create ”…”�”}”(hjùh²hh³Nh´Nubjr )�”}”(hŒ **exp_info**”h]”hŒexp_info”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hjùubhŒ is through the ”…”�”}”(hjùh²hh³Nh´Nubjâ)�”}”(hŒ``DEFINE_DMA_BUF_EXPORT_INFO``”h]”hŒDEFINE_DMA_BUF_EXPORT_INFO”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjùubhŒ macro.”…”�”}”(hjùh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:142: ./drivers/dma-buf/dma-buf.c”h´MÀhjPubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jg hjèh²hh³Nh´NubjÉ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÕŒdma_buf_fd (C function)”Œ c.dma_buf_fd”hNt”auh1jÈhjèh²hh³Nh´NubjÛ)�”}”(hhh]”(jà)�”}”(hŒ2int dma_buf_fd (struct dma_buf *dmabuf, int flags)”h]”jæ)�”}”(hŒ1int dma_buf_fd(struct dma_buf *dmabuf, int flags)”h]”(hŒdesc_sig_keyword_type”“”)�”}”(hŒint”h]”hŒint”…”�”}”(hjNh²hh³Nh´Nubah}”(h]”h ]”Œkt”ah"]”h$]”h&]”uh1jLhjHh²hh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:142: ./drivers/dma-buf/dma-buf.c”h´Mubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj^h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjHh²hh³j]h´Mubj )�”}”(hŒ dma_buf_fd”h]”j )�”}”(hŒ dma_buf_fd”h]”hŒ dma_buf_fd”…”�”}”(hjph²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjlubah}”(h]”h ]”(j' j( eh"]”h$]”h&]”j÷jøuh1j hjHh²hh³j]h´MubjŒ)�”}”(hŒ#(struct dma_buf *dmabuf, int flags)”h]”(j’)�”}”(hŒstruct dma_buf *dmabuf”h]”(jì)�”}”(hjïh]”hŒstruct”…”�”}”(hjŒh²hh³Nh´Nubah}”(h]”h ]”jøah"]”h$]”h&]”uh1jëhjˆubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj™h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjˆubh)�”}”(hhh]”j )�”}”(hŒdma_buf”h]”hŒdma_buf”…”�”}”(hjªh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj§ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jîŒreftype”jGŒ reftarget”j¬Œmodname”NŒ classname”Nj³j¶)�”}”j¹]”jO)�”}”jGjrsbŒ c.dma_buf_fd”†”asbuh1hhjˆubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÊh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjˆubjd)�”}”(hjgh]”hŒ*”…”�”}”(hjØh²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchjˆubj )�”}”(hŒdmabuf”h]”hŒdmabuf”…”�”}”(hjåh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjˆubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj÷jøuh1j‘hj„ubj’)�”}”(hŒ int flags”h]”(jM)�”}”(hŒint”h]”hŒint”…”�”}”(hjþh²hh³Nh´Nubah}”(h]”h ]”jYah"]”h$]”h&]”uh1jLhjúubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjúubj )�”}”(hŒflags”h]”hŒflags”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjúubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj÷jøuh1j‘hj„ubeh}”(h]”h ]”h"]”h$]”h&]”j÷jøuh1j‹hjHh²hh³j]h´Mubeh}”(h]”h ]”h"]”h$]”h&]”j÷jøj2 ˆuh1jåj3 j4 hjDh²hh³j]h´Mubah}”(h]”j?ah ]”(j8 j9 eh"]”h$]”h&]”j= ˆj> )j? huh1jßh³j]h´MhjAh²hubjA )�”}”(hhh]”hÌ)�”}”(hŒ6returns a file descriptor for the given struct dma_buf”h]”hŒ6returns a file descriptor for the given struct dma_buf”…”�”}”(hjDh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:142: ./drivers/dma-buf/dma-buf.c”h´MhjAh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j@ hjAh²hh³j]h´Mubeh}”(h]”h ]”(jîŒfunction”eh"]”h$]”h&]”ja jîjb j\jc j\jd ‰je ‰jf ‰uh1jÚh²hhjèh³Nh´Nubjh )�”}”(hŒÝ**Parameters** ``struct dma_buf *dmabuf`` [in] pointer to dma_buf for which fd is required. ``int flags`` [in] flags to give to fd **Description** On success, returns an associated 'fd'. Else, returns error.”h]”(hÌ)�”}”(hŒ**Parameters**”h]”jr )�”}”(hjfh]”hŒ Parameters”…”�”}”(hjhh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hjdubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:142: ./drivers/dma-buf/dma-buf.c”h´Mhj`ubj´ )�”}”(hhh]”(j¹ )�”}”(hŒP``struct dma_buf *dmabuf`` [in] pointer to dma_buf for which fd is required. ”h]”(j¿ )�”}”(hŒ``struct dma_buf *dmabuf``”h]”jâ)�”}”(hj…h]”hŒstruct dma_buf *dmabuf”…”�”}”(hj‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjƒubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:142: ./drivers/dma-buf/dma-buf.c”h´MhjubjÙ )�”}”(hhh]”hÌ)�”}”(hŒ4[in] pointer to dma_buf for which fd is required.”h]”hŒ4[in] pointer to dma_buf for which fd is required.”…”�”}”(hjžh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jšh´Mhj›ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hjubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³jšh´Mhj|ubj¹ )�”}”(hŒ*``int flags`` [in] flags to give to fd ”h]”(j¿ )�”}”(hŒ ``int flags``”h]”jâ)�”}”(hj¾h]”hŒ int flags”…”�”}”(hjÀh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj¼ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:142: ./drivers/dma-buf/dma-buf.c”h´Mhj¸ubjÙ )�”}”(hhh]”hÌ)�”}”(hŒn] flags to give to fd”h]”hŒn] flags to give to fd”…”�”}”(hj×h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jÓh´MhjÔubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hj¸ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³jÓh´Mhj|ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j³ hj`ubhÌ)�”}”(hŒ**Description**”h]”jr )�”}”(hjùh]”hŒ Description”…”�”}”(hjûh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hj÷ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:142: ./drivers/dma-buf/dma-buf.c”h´Mhj`ubhÌ)�”}”(hŒh²hh³Nh´Nubah}”(h]”h ]”jYah"]”h$]”h&]”uh1jLhj:h²hh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:142: ./drivers/dma-buf/dma-buf.c”h´M'ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjMh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj:h²hh³jLh´M'ubj )�”}”(hŒdma_buf_fd_install”h]”j )�”}”(hŒdma_buf_fd_install”h]”hŒdma_buf_fd_install”…”�”}”(hj_h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj[ubah}”(h]”h ]”(j' j( eh"]”h$]”h&]”j÷jøuh1j hj:h²hh³jLh´M'ubjŒ)�”}”(hŒ (struct dma_buf *dmabuf, int fd)”h]”(j’)�”}”(hŒstruct dma_buf *dmabuf”h]”(jì)�”}”(hjïh]”hŒstruct”…”�”}”(hj{h²hh³Nh´Nubah}”(h]”h ]”jøah"]”h$]”h&]”uh1jëhjwubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjˆh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjwubh)�”}”(hhh]”j )�”}”(hŒdma_buf”h]”hŒdma_buf”…”�”}”(hj™h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj–ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jîŒreftype”jGŒ reftarget”j›Œmodname”NŒ classname”Nj³j¶)�”}”j¹]”jO)�”}”jGjasbŒc.dma_buf_fd_install”†”asbuh1hhjwubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¹h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjwubjd)�”}”(hjgh]”hŒ*”…”�”}”(hjÇh²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchjwubj )�”}”(hŒdmabuf”h]”hŒdmabuf”…”�”}”(hjÔh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjwubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj÷jøuh1j‘hjsubj’)�”}”(hŒint fd”h]”(jM)�”}”(hŒint”h]”hŒint”…”�”}”(hjíh²hh³Nh´Nubah}”(h]”h ]”jYah"]”h$]”h&]”uh1jLhjéubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjûh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjéubj )�”}”(hŒfd”h]”hŒfd”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjéubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj÷jøuh1j‘hjsubeh}”(h]”h ]”h"]”h$]”h&]”j÷jøuh1j‹hj:h²hh³jLh´M'ubeh}”(h]”h ]”h"]”h$]”h&]”j÷jøj2 ˆuh1jåj3 j4 hj6h²hh³jLh´M'ubah}”(h]”j1ah ]”(j8 j9 eh"]”h$]”h&]”j= ˆj> )j? huh1jßh³jLh´M'hj3h²hubjA )�”}”(hhh]”hÌ)�”}”(hŒ#install a reserved fd for a dma-buf”h]”hŒ#install a reserved fd for a dma-buf”…”�”}”(hj3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:142: ./drivers/dma-buf/dma-buf.c”h´M'hj0h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j@ hj3h²hh³jLh´M'ubeh}”(h]”h ]”(jîŒfunction”eh"]”h$]”h&]”ja jîjb jKjc jKjd ‰je ‰jf ‰uh1jÚh²hhjèh³Nh´Nubjh )�”}”(hXÞ**Parameters** ``struct dma_buf *dmabuf`` [in] pointer to dma_buf ``int fd`` [in] fd reserved with get_unused_fd_flags() **Description** Publishes a previously reserved fd into the caller's fd table. Must only be called after all fallible work (e.g. copy_to_user) has succeeded, as it cannot be undone safely once called. The caller is responsible for having emitted the trace event (via dma_buf_fd() or get_unused_fd_flags() + this function) before calling this.”h]”(hÌ)�”}”(hŒ**Parameters**”h]”jr )�”}”(hjUh]”hŒ Parameters”…”�”}”(hjWh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hjSubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:142: ./drivers/dma-buf/dma-buf.c”h´M+hjOubj´ )�”}”(hhh]”(j¹ )�”}”(hŒ6``struct dma_buf *dmabuf`` [in] pointer to dma_buf ”h]”(j¿ )�”}”(hŒ``struct dma_buf *dmabuf``”h]”jâ)�”}”(hjth]”hŒstruct dma_buf *dmabuf”…”�”}”(hjvh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjrubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:142: ./drivers/dma-buf/dma-buf.c”h´M(hjnubjÙ )�”}”(hhh]”hÌ)�”}”(hŒ[in] pointer to dma_buf”h]”hŒ[in] pointer to dma_buf”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j‰h´M(hjŠubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hjnubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³j‰h´M(hjkubj¹ )�”}”(hŒ:``int fd`` [in] fd reserved with get_unused_fd_flags() ”h]”(j¿ )�”}”(hŒ ``int fd``”h]”jâ)�”}”(hj­h]”hŒint fd”…”�”}”(hj¯h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj«ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:142: ./drivers/dma-buf/dma-buf.c”h´M)hj§ubjÙ )�”}”(hhh]”hÌ)�”}”(hŒ.[in] fd reserved with get_unused_fd_flags()”h]”hŒ.[in] fd reserved with get_unused_fd_flags()”…”�”}”(hjÆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jÂh´M)hjÃubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hj§ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³jÂh´M)hjkubeh}”(h]”h ]”h"]”h$]”h&]”uh1j³ hjOubhÌ)�”}”(hŒ**Description**”h]”jr )�”}”(hjèh]”hŒ Description”…”�”}”(hjêh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hjæubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:142: ./drivers/dma-buf/dma-buf.c”h´M+hjOubhÌ)�”}”(hŒ¸Publishes a previously reserved fd into the caller's fd table. Must only be called after all fallible work (e.g. copy_to_user) has succeeded, as it cannot be undone safely once called.”h]”hŒºPublishes a previously reserved fd into the caller’s fd table. Must only be called after all fallible work (e.g. copy_to_user) has succeeded, as it cannot be undone safely once called.”…”�”}”(hjþh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:142: ./drivers/dma-buf/dma-buf.c”h´M*hjOubhÌ)�”}”(hŒ�The caller is responsible for having emitted the trace event (via dma_buf_fd() or get_unused_fd_flags() + this function) before calling this.”h]”hŒ�The caller is responsible for having emitted the trace event (via dma_buf_fd() or get_unused_fd_flags() + this function) before calling this.”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:142: ./drivers/dma-buf/dma-buf.c”h´M.hjOubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jg hjèh²hh³Nh´NubjÉ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÕŒdma_buf_get (C function)”Œ c.dma_buf_get”hNt”auh1jÈhjèh²hh³Nh´NubjÛ)�”}”(hhh]”(jà)�”}”(hŒ%struct dma_buf * dma_buf_get (int fd)”h]”jæ)�”}”(hŒ#struct dma_buf *dma_buf_get(int fd)”h]”(jì)�”}”(hjïh]”hŒstruct”…”�”}”(hj<h²hh³Nh´Nubah}”(h]”h ]”jøah"]”h$]”h&]”uh1jëhj8h²hh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:142: ./drivers/dma-buf/dma-buf.c”h´M;ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjJh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj8h²hh³jIh´M;ubh)�”}”(hhh]”j )�”}”(hŒdma_buf”h]”hŒdma_buf”…”�”}”(hj[h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjXubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jîŒreftype”jGŒ reftarget”j]Œmodname”NŒ classname”Nj³j¶)�”}”j¹]”jO)�”}”jGŒ dma_buf_get”sbŒ c.dma_buf_get”†”asbuh1hhj8h²hh³jIh´M;ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj|h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj8h²hh³jIh´M;ubjd)�”}”(hjgh]”hŒ*”…”�”}”(hjŠh²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchj8h²hh³jIh´M;ubj )�”}”(hŒ dma_buf_get”h]”j )�”}”(hjyh]”hŒ dma_buf_get”…”�”}”(hj›h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj—ubah}”(h]”h ]”(j' j( eh"]”h$]”h&]”j÷jøuh1j hj8h²hh³jIh´M;ubjŒ)�”}”(hŒ(int fd)”h]”j’)�”}”(hŒint fd”h]”(jM)�”}”(hŒint”h]”hŒint”…”�”}”(hj¶h²hh³Nh´Nubah}”(h]”h ]”jYah"]”h$]”h&]”uh1jLhj²ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÄh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj²ubj )�”}”(hŒfd”h]”hŒfd”…”�”}”(hjÒh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj²ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj÷jøuh1j‘hj®ubah}”(h]”h ]”h"]”h$]”h&]”j÷jøuh1j‹hj8h²hh³jIh´M;ubeh}”(h]”h ]”h"]”h$]”h&]”j÷jøj2 ˆuh1jåj3 j4 hj4h²hh³jIh´M;ubah}”(h]”j/ah ]”(j8 j9 eh"]”h$]”h&]”j= ˆj> )j? huh1jßh³jIh´M;hj1h²hubjA )�”}”(hhh]”hÌ)�”}”(hŒ+returns the struct dma_buf related to an fd”h]”hŒ+returns the struct dma_buf related to an fd”…”�”}”(hjüh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:142: ./drivers/dma-buf/dma-buf.c”h´M;hjùh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j@ hj1h²hh³jIh´M;ubeh}”(h]”h ]”(jîŒfunction”eh"]”h$]”h&]”ja jîjb jjc jjd ‰je ‰jf ‰uh1jÚh²hhjèh³Nh´Nubjh )�”}”(hŒÿ**Parameters** ``int fd`` [in] fd associated with the struct dma_buf to be returned **Description** On success, returns the struct dma_buf associated with an fd; uses file's refcounting done by fget to increase refcount. returns ERR_PTR otherwise.”h]”(hÌ)�”}”(hŒ**Parameters**”h]”jr )�”}”(hjh]”hŒ Parameters”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hjubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:142: ./drivers/dma-buf/dma-buf.c”h´M?hjubj´ )�”}”(hhh]”j¹ )�”}”(hŒH``int fd`` [in] fd associated with the struct dma_buf to be returned ”h]”(j¿ )�”}”(hŒ ``int fd``”h]”jâ)�”}”(hj=h]”hŒint fd”…”�”}”(hj?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj;ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:142: ./drivers/dma-buf/dma-buf.c”h´M<hj7ubjÙ )�”}”(hhh]”hÌ)�”}”(hŒ<[in] fd associated with the struct dma_buf to be returned”h]”hŒ<[in] fd associated with the struct dma_buf to be returned”…”�”}”(hjVh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jRh´M<hjSubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hj7ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³jRh´M<hj4ubah}”(h]”h ]”h"]”h$]”h&]”uh1j³ hjubhÌ)�”}”(hŒ**Description**”h]”jr )�”}”(hjxh]”hŒ Description”…”�”}”(hjzh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hjvuba•h}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:142: ./drivers/dma-buf/dma-buf.c”h´M>hjubhÌ)�”}”(hŒ“On success, returns the struct dma_buf associated with an fd; uses file's refcounting done by fget to increase refcount. returns ERR_PTR otherwise.”h]”hŒ•On success, returns the struct dma_buf associated with an fd; uses file’s refcounting done by fget to increase refcount. returns ERR_PTR otherwise.”…”�”}”(hjŽh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:142: ./drivers/dma-buf/dma-buf.c”h´M=hjubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jg hjèh²hh³Nh´NubjÉ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÕŒdma_buf_put (C function)”Œ c.dma_buf_put”hNt”auh1jÈhjèh²hh³Nh´NubjÛ)�”}”(hhh]”(jà)�”}”(hŒ)void dma_buf_put (struct dma_buf *dmabuf)”h]”jæ)�”}”(hŒ(void dma_buf_put(struct dma_buf *dmabuf)”h]”(jM)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj½h²hh³Nh´Nubah}”(h]”h ]”jYah"]”h$]”h&]”uh1jLhj¹h²hh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:142: ./drivers/dma-buf/dma-buf.c”h´MZubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÌh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj¹h²hh³jËh´MZubj )�”}”(hŒ dma_buf_put”h]”j )�”}”(hŒ dma_buf_put”h]”hŒ dma_buf_put”…”�”}”(hjÞh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjÚubah}”(h]”h ]”(j' j( eh"]”h$]”h&]”j÷jøuh1j hj¹h²hh³jËh´MZubjŒ)�”}”(hŒ(struct dma_buf *dmabuf)”h]”j’)�”}”(hŒstruct dma_buf *dmabuf”h]”(jì)�”}”(hjïh]”hŒstruct”…”�”}”(hjúh²hh³Nh´Nubah}”(h]”h ]”jøah"]”h$]”h&]”uh1jëhjöubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjöubh)�”}”(hhh]”j )�”}”(hŒdma_buf”h]”hŒdma_buf”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jîŒreftype”jGŒ reftarget”jŒmodname”NŒ classname”Nj³j¶)�”}”j¹]”jO)�”}”jGjàsbŒ c.dma_buf_put”†”asbuh1hhjöubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj8h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjöubjd)�”}”(hjgh]”hŒ*”…”�”}”(hjFh²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchjöubj )�”}”(hŒdmabuf”h]”hŒdmabuf”…”�”}”(hjSh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjöubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj÷jøuh1j‘hjòubah}”(h]”h ]”h"]”h$]”h&]”j÷jøuh1j‹hj¹h²hh³jËh´MZubeh}”(h]”h ]”h"]”h$]”h&]”j÷jøj2 ˆuh1jåj3 j4 hjµh²hh³jËh´MZubah}”(h]”j°ah ]”(j8 j9 eh"]”h$]”h&]”j= ˆj> )j? huh1jßh³jËh´MZhj²h²hubjA )�”}”(hhh]”hÌ)�”}”(hŒ decreases refcount of the buffer”h]”hŒ decreases refcount of the buffer”…”�”}”(hj}h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:142: ./drivers/dma-buf/dma-buf.c”h´MZhjzh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j@ hj²h²hh³jËh´MZubeh}”(h]”h ]”(jîŒfunction”eh"]”h$]”h&]”ja jîjb j•jc j•jd ‰je ‰jf ‰uh1jÚh²hhjèh³Nh´Nubjh )�”}”(hX…**Parameters** ``struct dma_buf *dmabuf`` [in] buffer to reduce refcount of **Description** Uses file's refcounting done implicitly by fput(). If, as a result of this call, the refcount becomes 0, the 'release' file operation related to this fd is called. It calls :c:type:`dma_buf_ops.release ` vfunc in turn, and frees the memory allocated for dmabuf when exported.”h]”(hÌ)�”}”(hŒ**Parameters**”h]”jr )�”}”(hjŸh]”hŒ Parameters”…”�”}”(hj¡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hj�ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:142: ./drivers/dma-buf/dma-buf.c”h´M^hj™ubj´ )�”}”(hhh]”j¹ )�”}”(hŒ@``struct dma_buf *dmabuf`` [in] buffer to reduce refcount of ”h]”(j¿ )�”}”(hŒ``struct dma_buf *dmabuf``”h]”jâ)�”}”(hj¾h]”hŒstruct dma_buf *dmabuf”…”�”}”(hjÀh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj¼ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:142: ./drivers/dma-buf/dma-buf.c”h´M[hj¸ubjÙ )�”}”(hhh]”hÌ)�”}”(hŒ$[in] buffer to reduce refcount of”h]”hŒ$[in] buffer to reduce refcount of”…”�”}”(hj×h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jÓh´M[hjÔubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hj¸ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³jÓh´M[hjµubah}”(h]”h ]”h"]”h$]”h&]”uh1j³ hj™ubhÌ)�”}”(hŒ**Description**”h]”jr )�”}”(hjùh]”hŒ Description”…”�”}”(hjûh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hj÷ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:142: ./drivers/dma-buf/dma-buf.c”h´M]hj™ubhÌ)�”}”(hŒ2Uses file's refcounting done implicitly by fput().”h]”hŒ4Uses file’s refcounting done implicitly by fput().”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:142: ./drivers/dma-buf/dma-buf.c”h´M\hj™ubhÌ)�”}”(hŒíIf, as a result of this call, the refcount becomes 0, the 'release' file operation related to this fd is called. It calls :c:type:`dma_buf_ops.release ` vfunc in turn, and frees the memory allocated for dmabuf when exported.”h]”(hŒ~If, as a result of this call, the refcount becomes 0, the ‘release’ file operation related to this fd is called. It calls ”…”�”}”(hjh²hh³Nh´Nubh)�”}”(hŒ+:c:type:`dma_buf_ops.release `”h]”jâ)�”}”(hj(h]”hŒdma_buf_ops.release”…”�”}”(hj*h²hh³Nh´Nubah}”(h]”h ]”(jíjîŒc-type”eh"]”h$]”h&]”uh1jáhj&ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”júŒ refdomain”jîŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰j³j·jŒ dma_buf_ops”uh1hh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:142: ./drivers/dma-buf/dma-buf.c”h´M^hjubhŒH vfunc in turn, and frees the memory allocated for dmabuf when exported.”…”�”}”(hjh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jEh´M^hj™ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jg hjèh²hh³Nh´NubjÉ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÕŒ#dma_buf_dynamic_attach (C function)”Œc.dma_buf_dynamic_attach”hNt”auh1jÈhjèh²hh³Nh´NubjÛ)�”}”(hhh]”(jà)�”}”(hŒ£struct dma_buf_attachment * dma_buf_dynamic_attach (struct dma_buf *dmabuf, struct device *dev, const struct dma_buf_attach_ops *importer_ops, void *importer_priv)”h]”jæ)�”}”(hŒ¡struct dma_buf_attachment *dma_buf_dynamic_attach(struct dma_buf *dmabuf, struct device *dev, const struct dma_buf_attach_ops *importer_ops, void *importer_priv)”h]”(jì)�”}”(hjïh]”hŒstruct”…”�”}”(hjph²hh³Nh´Nubah}”(h]”h ]”jøah"]”h$]”h&]”uh1jëhjlh²hh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:142: ./drivers/dma-buf/dma-buf.c”h´Mòubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj~h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjlh²hh³j}h´Mòubh)�”}”(hhh]”j )�”}”(hŒdma_buf_attachment”h]”hŒdma_buf_attachment”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjŒubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jîŒreftype”jGŒ reftarget”j‘Œmodname”NŒ classname”Nj³j¶)�”}”j¹]”jO)�”}”jGŒdma_buf_dynamic_attach”sbŒc.dma_buf_dynamic_attach”†”asbuh1hhjlh²hh³j}h´Mòubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj°h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjlh²hh³j}h´Mòubjd)�”}”(hjgh]”hŒ*”…”�”}”(hj¾h²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchjlh²hh³j}h´Mòubj )�”}”(hŒdma_buf_dynamic_attach”h]”j )�”}”(hj­h]”hŒdma_buf_dynamic_attach”…”�”}”(hjÏh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjËubah}”(h]”h ]”(j' j( eh"]”h$]”h&]”j÷jøuh1j hjlh²hh³j}h´MòubjŒ)�”}”(hŒp(struct dma_buf *dmabuf, struct device *dev, const struct dma_buf_attach_ops *importer_ops, void *importer_priv)”h]”(j’)�”}”(hŒstruct dma_buf *dmabuf”h]”(jì)�”}”(hjïh]”hŒstruct”…”�”}”(hjêh²hh³Nh´Nubah}”(h]”h ]”jøah"]”h$]”h&]”uh1jëhjæubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj÷h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjæubh)�”}”(hhh]”j )�”}”(hŒdma_buf”h]”hŒdma_buf”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jîŒreftype”jGŒ reftarget”j Œmodname”NŒ classname”Nj³j¶)�”}”j¹]”j«Œc.dma_buf_dynamic_attach”†”asbuh1hhjæubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj&h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjæubjd)�”}”(hjgh]”hŒ*”…”�”}”(hj4h²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchjæubj )�”}”(hŒdmabuf”h]”hŒdmabuf”…”�”}”(hjAh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjæubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj÷jøuh1j‘hjâubj’)�”}”(hŒstruct device *dev”h]”(jì)�”}”(hjïh]”hŒstruct”…”�”}”(hjZh²hh³Nh´Nubah}”(h]”h ]”jøah"]”h$]”h&]”uh1jëhjVubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjgh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjVubh)�”}”(hhh]”j )�”}”(hŒdevice”h]”hŒdevice”…”�”}”(hjxh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjuubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jîŒreftype”jGŒ reftarget”jzŒmodname”NŒ classname”Nj³j¶)�”}”j¹]”j«Œc.dma_buf_dynamic_attach”†”asbuh1hhjVubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj–h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjVubjd)�”}”(hjgh]”hŒ*”…”�”}”(hj¤h²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchjVubj )�”}”(hŒdev”h]”hŒdev”…”�”}”(hj±h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjVubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj÷jøuh1j‘hjâubj’)�”}”(hŒ-const struct dma_buf_attach_ops *importer_ops”h]”(jì)�”}”(hj™h]”hŒconst”…”�”}”(hjÊh²hh³Nh´Nubah}”(h]”h ]”jøah"]”h$]”h&]”uh1jëhjÆubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj×h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjÆubjì)�”}”(hjïh]”hŒstruct”…”�”}”(hjåh²hh³Nh´Nubah}”(h]”h ]”jøah"]”h$]”h&]”uh1jëhjÆubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjòh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjÆubh)�”}”(hhh]”j )�”}”(hŒdma_buf_attach_ops”h]”hŒdma_buf_attach_ops”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jîŒreftype”jGŒ reftarget”j Œmodname”NŒ classname”Nj³j¶)�”}”j¹]”j«Œc.dma_buf_dynamic_attach”†”asbuh1hhjÆubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj! h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjÆubjd)�”}”(hjgh]”hŒ*”…”�”}”(hj/ h²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchjÆubj )�”}”(hŒ importer_ops”h]”hŒ importer_ops”…”�”}”(hj< h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjÆubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj÷jøuh1j‘hjâubj’)�”}”(hŒvoid *importer_priv”h]”(jM)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjU h²hh³Nh´Nubah}”(h]”h ]”jYah"]”h$]”h&]”uh1jLhjQ ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjc h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjQ ubjd)�”}”(hjgh]”hŒ*”…”�”}”(hjq h²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchjQ ubj )�”}”(hŒ importer_priv”h]”hŒ importer_priv”…”�”}”(hj~ h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjQ ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj÷jøuh1j‘hjâubeh}”(h]”h ]”h"]”h$]”h&]”j÷jøuh1j‹hjlh²hh³j}h´Mòubeh}”(h]”h ]”h"]”h$]”h&]”j÷jøj2 ˆuh1jåj3 j4 hjhh²hh³j}h´Mòubah}”(h]”jcah ]”(j8 j9 eh"]”h$]”h&]”j= ˆj> )j? huh1jßh³j}h´Mòhjeh²hubjA )�”}”(hhh]”hÌ)�”}”(hŒ,Add the device to dma_buf's attachments list”h]”hŒ.Add the device to dma_buf’s attachments list”…”�”}”(hj¨ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:142: ./drivers/dma-buf/dma-buf.c”h´Mòhj¥ h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j@ hjeh²hh³j}h´Mòubeh}”(h]”h ]”(jîŒfunction”eh"]”h$]”h&]”ja jîjb jÀ jc jÀ jd ‰je ‰jf ‰uh1jÚh²hhjèh³Nh´Nubjh )�”}”(hX**Parameters** ``struct dma_buf *dmabuf`` [in] buffer to attach device to. ``struct device *dev`` [in] device to be attached. ``const struct dma_buf_attach_ops *importer_ops`` [in] importer operations for the attachment ``void *importer_priv`` [in] importer private pointer for the attachment **Description** Returns struct dma_buf_attachment pointer for this attachment. Attachments must be cleaned up by calling dma_buf_detach(). Optionally this calls :c:type:`dma_buf_ops.attach ` to allow device-specific attach functionality. A pointer to newly created :c:type:`dma_buf_attachment` on success, or a negative error code wrapped into a pointer on failure. Note that this can fail if the backing storage of **dmabuf** is in a place not accessible to **dev**, and cannot be moved to a more suitable place. This is indicated with the error code -EBUSY.”h]”(hÌ)�”}”(hŒ**Parameters**”h]”jr )�”}”(hjÊ h]”hŒ Parameters”…”�”}”(hjÌ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hjÈ ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:142: ./drivers/dma-buf/dma-buf.c”h´MöhjÄ ubj´ )�”}”(hhh]”(j¹ )�”}”(hŒ?``struct dma_buf *dmabuf`` [in] buffer to attach device to. ”h]”(j¿ )�”}”(hŒ``struct dma_buf *dmabuf``”h]”jâ)�”}”(hjé h]”hŒstruct dma_buf *dmabuf”…”�”}”(hjë h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjç ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:142: ./drivers/dma-buf/dma-buf.c”h´Móhjã ubjÙ )�”}”(hhh]”hÌ)�”}”(hŒ#[in] buffer to attach device to.”h]”hŒ#[in] buffer to attach device to.”…”�”}”(hj!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jþ h´Móhjÿ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hjã ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³jþ h´Móhjà ubj¹ )�”}”(hŒ6``struct device *dev`` [in] device to be attached. ”h]”(j¿ )�”}”(hŒ``struct device *dev``”h]”jâ)�”}”(hj"!h]”hŒstruct device *dev”…”�”}”(hj$!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj !ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:142: ./drivers/dma-buf/dma-buf.c”h´Môhj!ubjÙ )�”}”(hhh]”hÌ)�”}”(hŒ[in] device to be attached.”h]”hŒ[in] device to be attached.”…”�”}”(hj;!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j7!h´Môhj8!ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hj!ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³j7!h´Môhjà ubj¹ )�”}”(hŒa``const struct dma_buf_attach_ops *importer_ops`` [in] importer operations for the attachment ”h]”(j¿ )�”}”(hŒ1``const struct dma_buf_attach_ops *importer_ops``”h]”jâ)�”}”(hj[!h]”hŒ-const struct dma_buf_attach_ops *importer_ops”…”�”}”(hj]!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjY!ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:142: ./drivers/dma-buf/dma-buf.c”h´MõhjU!ubjÙ )�”}”(hhh]”hÌ)�”}”(hŒ.[in] importer operations for the attachment”h]”hŒ.[in] importer operations for the attachment”…”�”}”(hjt!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jp!h´Mõhjq!ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hjU!ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³jp!h´Mõhjà ubj¹ )�”}”(hŒL``void *importer_priv`` [in] importer private pointer for the attachment ”h]”(j¿ )�”}”(hŒ``void *importer_priv``”h]”jâ)�”}”(hj”!h]”hŒvoid *importer_priv”…”�”}”(hj–!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj’!ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:142: ./drivers/dma-buf/dma-buf.c”h´MöhjŽ!ubjÙ )�”}”(hhh]”hÌ)�”}”(hŒ3[in] importer private pointer for the attachment”h]”hŒ3[in] importer private pointer for the attachment”…”�”}”(hj­!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j©!h´Möhjª!ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hjŽ!ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³j©!h´Möhjà ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j³ hjÄ ubhÌ)�”}”(hŒ**Description**”h]”jr )�”}”(hjÏ!h]”hŒ Description”…”�”}”(hjÑ!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hjÍ!ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:142: ./drivers/dma-buf/dma-buf.c”h´MøhjÄ ubhÌ)�”}”(hŒzReturns struct dma_buf_attachment pointer for this attachment. Attachments must be cleaned up by calling dma_buf_detach().”h]”hŒzReturns struct dma_buf_attachment pointer for this attachment. Attachments must be cleaned up by calling dma_buf_detach().”…”�”}”(hjå!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:142: ./drivers/dma-buf/dma-buf.c”h´M÷hjÄ ubhÌ)�”}”(hŒoOptionally this calls :c:type:`dma_buf_ops.attach ` to allow device-specific attach functionality.”h]”(hŒOptionally this calls ”…”�”}”(hjô!h²hh³Nh´Nubh)�”}”(hŒ*:c:type:`dma_buf_ops.attach `”h]”jâ)�”}”(hjþ!h]”hŒdma_buf_ops.attach”…”�”}”(hj"h²hh³Nh´Nubah}”(h]”h ]”(jíjîŒc-type”eh"]”h$]”h&]”uh1jáhjü!ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”júŒ refdomain”jîŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰j³j·jŒ dma_buf_ops”uh1hh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:142: ./drivers/dma-buf/dma-buf.c”h´Múhjô!ubhŒ/ to allow device-specific attach functionality.”…”�”}”(hjô!h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j"h´MúhjÄ ubhÌ)�”}”(hŒA pointer to newly created :c:type:`dma_buf_attachment` on success, or a negative error code wrapped into a pointer on failure.”h]”(hŒA pointer to newly created ”…”�”}”(hj&"h²hh³Nh´Nubh)�”}”(hŒ:c:type:`dma_buf_attachment`”h]”jâ)�”}”(hj0"h]”hŒdma_buf_attachment”…”�”}”(hj2"h²hh³Nh´Nubah}”(h]”h ]”(jíjîŒc-type”eh"]”h$]”h&]”uh1jáhj."ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”júŒ refdomain”jîŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰j³j·jŒdma_buf_attachment”uh1hh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:142: ./drivers/dma-buf/dma-buf.c”h´Mþhj&"ubhŒH on success, or a negative error code wrapped into a pointer on failure.”…”�”}”(hj&"h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jM"h´MþhjÄ ubhÌ)�”}”(hŒÁNote that this can fail if the backing storage of **dmabuf** is in a place not accessible to **dev**, and cannot be moved to a more suitable place. This is indicated with the error code -EBUSY.”h]”(hŒ2Note that this can fail if the backing storage of ”…”�”}”(hjX"h²hh³Nh´Nubjr )�”}”(hŒ **dmabuf**”h]”hŒdmabuf”…”�”}”(hj`"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hjX"ubhŒ! is in a place not accessible to ”…”�”}”(hjX"h²hh³Nh´Nubjr )�”}”(hŒ**dev**”h]”hŒdev”…”�”}”(hjr"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hjX"ubhŒ], and cannot be moved to a more suitable place. This is indicated with the error code -EBUSY.”…”�”}”(hjX"h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:142: ./drivers/dma-buf/dma-buf.c”h´MhjÄ ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jg hjèh²hh³Nh´NubjÉ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÕŒdma_buf_attach (C function)”Œc.dma_buf_attach”hNt”auh1jÈhjèh²hh³Nh´NubjÛ)�”}”(hhh]”(jà)�”}”(hŒWstruct dma_buf_attachment * dma_buf_attach (struct dma_buf *dmabuf, struct device *dev)”h]”jæ)�”}”(hŒUstruct dma_buf_attachment *dma_buf_attach(struct dma_buf *dmabuf, struct device *dev)”h]”(jì)�”}”(hjïh]”hŒstruct”…”�”}”(hj«"h²hh³Nh´Nubah}”(h]”h ]”jøah"]”h$]”h&]”uh1jëhj§"h²hh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:142: ./drivers/dma-buf/dma-buf.c”h´M2ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¹"h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj§"h²hh³j¸"h´M2ubh)�”}”(hhh]”j )�”}”(hŒdma_buf_attachment”h]”hŒdma_buf_attachment”…”�”}”(hjÊ"h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjÇ"ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jîŒreftype”jGŒ reftarget”jÌ"Œmodname”NŒ classname”Nj³j¶)�”}”j¹]”jO)�”}”jGŒdma_buf_attach”sbŒc.dma_buf_attach”†”asbuh1hhj§"h²hh³j¸"h´M2ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjë"h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj§"h²hh³j¸"h´M2ubjd)�”}”(hjgh]”hŒ*”…”�”}”(hjù"h²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchj§"h²hh³j¸"h´M2ubj )�”}”(hŒdma_buf_attach”h]”j )�”}”(hjè"h]”hŒdma_buf_attach”…”�”}”(hj #h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj#ubah}”(h]”h ]”(j' j( eh"]”h$]”h&]”j÷jøuh1j hj§"h²hh³j¸"h´M2ubjŒ)�”}”(hŒ,(struct dma_buf *dmabuf, struct device *dev)”h]”(j’)�”}”(hŒstruct dma_buf *dmabuf”h]”(jì)�”}”(hjïh]”hŒstruct”…”�”}”(hj%#h²hh³Nh´Nubah}”(h]”h ]”jøah"]”h$]”h&]”uh1jëhj!#ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj2#h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj!#ubh)�”}”(hhh]”j )�”}”(hŒdma_buf”h]”hŒdma_buf”…”�”}”(hjC#h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj@#ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jîŒreftype”jGŒ reftarget”jE#Œmodname”NŒ classname”Nj³j¶)�”}”j¹]”jæ"Œc.dma_buf_attach”†”asbuh1hhj!#ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hja#h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj!#ubjd)�”}”(hjgh]”hŒ*”…”�”}”(hjo#h²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchj!#ubj )�”}”(hŒdmabuf”h]”hŒdmabuf”…”�”}”(hj|#h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj!#ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj÷jøuh1j‘hj#ubj’)�”}”(hŒstruct device *dev”h]”(jì)�”}”(hjïh]”hŒstruct”…”�”}”(hj•#h²hh³Nh´Nubah}”(h]”h ]”jøah"]”h$]”h&]”uh1jëhj‘#ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¢#h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj‘#ubh)�”}”(hhh]”j )�”}”(hŒdevice”h]”hŒdevice”…”�”}”(hj³#h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj°#ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jîŒreftype”jGŒ reftarget”jµ#Œmodname”NŒ classname”Nj³j¶)�”}”j¹]”jæ"Œc.dma_buf_attach”†”asbuh1hhj‘#ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÑ#h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj‘#ubjd)�”}”(hjgh]”hŒ*”…”�”}”(hjß#h²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchj‘#ubj )�”}”(hŒdev”h]”hŒdev”…”�”}”(hjì#h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj‘#ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj÷jøuh1j‘hj#ubeh}”(h]”h ]”h"]”h$]”h&]”j÷jøuh1j‹hj§"h²hh³j¸"h´M2ubeh}”(h]”h ]”h"]”h$]”h&]”j÷jøj2 ˆuh1jåj3 j4 hj£"h²hh³j¸"h´M2ubah}”(h]”jž"ah ]”(j8 j9 eh"]”h$]”h&]”j= ˆj> )j? huh1jßh³j¸"h´M2hj "h²hubjA )�”}”(hhh]”hÌ)�”}”(hŒ"Wrapper for dma_buf_dynamic_attach”h]”hŒ"Wrapper for dma_buf_dynamic_attach”…”�”}”(hj$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:142: ./drivers/dma-buf/dma-buf.c”h´M2hj$h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j@ hj "h²hh³j¸"h´M2ubeh}”(h]”h ]”(jîŒfunction”eh"]”h$]”h&]”ja jîjb j.$jc j.$jd ‰je ‰jf ‰uh1jÚh²hhjèh³Nh´Nubjh )�”}”(hŒò**Parameters** ``struct dma_buf *dmabuf`` [in] buffer to attach device to. ``struct device *dev`` [in] device to be attached. **Description** Wrapper to call dma_buf_dynamic_attach() for drivers which still use a static mapping.”h]”(hÌ)�”}”(hŒ**Parameters**”h]”jr )�”}”(hj8$h]”hŒ Parameters”…”�”}”(hj:$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hj6$ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:142: ./drivers/dma-buf/dma-buf.c”h´M6hj2$ubj´ )�”}”(hhh]”(j¹ )�”}”(hŒ?``struct dma_buf *dmabuf`` [in] buffer to attach device to. ”h]”(j¿ )�”}”(hŒ``struct dma_buf *dmabuf``”h]”jâ)�”}”(hjW$h]”hŒstruct dma_buf *dmabuf”…”�”}”(hjY$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjU$ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:142: ./drivers/dma-buf/dma-buf.c”h´M3hjQ$ubjÙ )�”}”(hhh]”hÌ)�”}”(hŒ#[in] buffer to attach device to.”h]”hŒ#[in] buffer to attach device to.”…”�”}”(hjp$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jl$h´M3hjm$ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hjQ$ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³jl$h´M3hjN$ubj¹ )�”}”(hŒ6``struct device *dev`` [in] device to be attached. ”h]”(j¿ )�”}”(hŒ``struct device *dev``”h]”jâ)�”}”(hj�$h]”hŒstruct device *dev”…”�”}”(hj’$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjŽ$ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:142: ./drivers/dma-buf/dma-buf.c”h´M4hjŠ$ubjÙ )�”}”(hhh]”hÌ)�”}”(hŒ[in] device to be attached.”h]”hŒ[in] device to be attached.”…”�”}”(hj©$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j¥$h´M4hj¦$ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hjŠ$ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³j¥$h´M4hjN$ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j³ hj2$ubhÌ)�”}”(hŒ**Description**”h]”jr )�”}”(hjË$h]”hŒ Description”…”�”}”(hjÍ$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hjÉ$ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:142: ./drivers/dma-buf/dma-buf.c”h´M6hj2$ubhÌ)�”}”(hŒVWrapper to call dma_buf_dynamic_attach() for drivers which still use a static mapping.”h]”hŒVWrapper to call dma_buf_dynamic_attach() for drivers which still use a static mapping.”…”�”}”(hjá$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:142: ./drivers/dma-buf/dma-buf.c”h´M5hj2$ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jg hjèh²hh³Nh´NubjÉ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÕŒdma_buf_detach (C function)”Œc.dma_buf_detach”hNt”auh1jÈhjèh²hh³Nh´NubjÛ)�”}”(hhh]”(jà)�”}”(hŒOvoid dma_buf_detach (struct dma_buf *dmabuf, struct dma_buf_attachment *attach)”h]”jæ)�”}”(hŒNvoid dma_buf_detach(struct dma_buf *dmabuf, struct dma_buf_attachment *attach)”h]”(jM)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj%h²hh³Nh´Nubah}”(h]”h ]”jYah"]”h$]”h&]”uh1jLhj %h²hh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:142: ./drivers/dma-buf/dma-buf.c”h´MAubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj%h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj %h²hh³j%h´MAubj )�”}”(hŒdma_buf_detach”h]”j )�”}”(hŒdma_buf_detach”h]”hŒdma_buf_detach”…”�”}”(hj1%h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj-%ubah}”(h]”h ]”(j' j( eh"]”h$]”h&]”j÷jøuh1j hj %h²hh³j%h´MAubjŒ)�”}”(hŒ;(struct dma_buf *dmabuf, struct dma_buf_attachment *attach)”h]”(j’)�”}”(hŒstruct dma_buf *dmabuf”h]”(jì)�”}”(hjïh]”hŒstruct”…”�”}”(hjM%h²hh³Nh´Nubah}”(h]”h ]”jøah"]”h$]”h&]”uh1jëhjI%ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjZ%h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjI%ubh)�”}”(hhh]”j )�”}”(hŒdma_buf”h]”hŒdma_buf”…”�”}”(hjk%h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjh%ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jîŒreftype”jGŒ reftarget”jm%Œmodname”NŒ classname”Nj³j¶)�”}”j¹]”jO)�”}”jGj3%sbŒc.dma_buf_detach”†”asbuh1hhjI%ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‹%h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjI%ubjd)�”}”(hjgh]”hŒ*”…”�”}”(hj™%h²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchjI%ubj )�”}”(hŒdmabuf”h]”hŒdmabuf”…”�”}”(hj¦%h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjI%ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj÷jøuh1j‘hjE%ubj’)�”}”(hŒ!struct dma_buf_attachment *attach”h]”(jì)�”}”(hjïh]”hŒstruct”…”�”}”(hj¿%h²hh³Nh´Nubah}”(h]”h ]”jøah"]”h$]”h&]”uh1jëhj»%ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÌ%h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj»%ubh)�”}”(hhh]”j )�”}”(hŒdma_buf_attachment”h]”hŒdma_buf_attachment”…”�”}”(hjÝ%h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjÚ%ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jîŒreftype”jGŒ reftarget”jß%Œmodname”NŒ classname”Nj³j¶)�”}”j¹]”j‡%Œc.dma_buf_detach”†”asbuh1hhj»%ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjû%h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj»%ubjd)�”}”(hjgh]”hŒ*”…”�”}”(hj &h²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchj»%ubj )�”}”(hŒattach”h]”hŒattach”…”�”}”(hj&h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj»%ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj÷jøuh1j‘hjE%ubeh}”(h]”h ]”h"]”h$]”h&]”j÷jøuh1j‹hj %h²hh³j%h´MAubeh}”(h]”h ]”h"]”h$]”h&]”j÷jøj2 ˆuh1jåj3 j4 hj%h²hh³j%h´MAubah}”(h]”j%ah ]”(j8 j9 eh"]”h$]”h&]”j= ˆj> )j? huh1jßh³j%h´MAhj%h²hubjA )�”}”(hhh]”hÌ)�”}”(hŒ:Remove the given attachment from dmabuf's attachments list”h]”hŒ` for device-specific detach.”h]”(hÌ)�”}”(hŒ**Parameters**”h]”jr )�”}”(hjb&h]”hŒ Parameters”…”�”}”(hjd&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hj`&ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:142: ./drivers/dma-buf/dma-buf.c”h´MEhj\&ubj´ )�”}”(hhh]”(j¹ )�”}”(hŒ:``struct dma_buf *dmabuf`` [in] buffer to detach from. ”h]”(j¿ )�”}”(hŒ``struct dma_buf *dmabuf``”h]”jâ)�”}”(hj�&h]”hŒstruct dma_buf *dmabuf”…”�”}”(hjƒ&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj&ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:142: ./drivers/dma-buf/dma-buf.c”h´MBhj{&ubjÙ )�”}”(hhh]”hÌ)�”}”(hŒ[in] buffer to detach from.”h]”hŒ[in] buffer to detach from.”…”�”}”(hjš&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j–&h´MBhj—&ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hj{&ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³j–&h´MBhjx&ubj¹ )�”}”(hŒd``struct dma_buf_attachment *attach`` [in] attachment to be detached; is free'd after this call. ”h]”(j¿ )�”}”(hŒ%``struct dma_buf_attachment *attach``”h]”jâ)�”}”(hjº&h]”hŒ!struct dma_buf_attachment *attach”…”�”}”(hj¼&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj¸&ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:142: ./drivers/dma-buf/dma-buf.c”h´MChj´&ubjÙ )�”}”(hhh]”hÌ)�”}”(hŒ=[in] attachment to be detached; is free'd after this call.”h]”hŒ?[in] attachment to be detached; is free’d after this call.”…”�”}”(hjÓ&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jÏ&h´MChjÐ&ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hj´&ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³jÏ&h´MChjx&ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j³ hj\&ubhÌ)�”}”(hŒ**Description**”h]”jr )�”}”(hjõ&h]”hŒ Description”…”�”}”(hj÷&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hjó&ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:142: ./drivers/dma-buf/dma-buf.c”h´MEhj\&ubhÌ)�”}”(hŒBClean up a device attachment obtained by calling dma_buf_attach().”h]”hŒBClean up a device attachment obtained by calling dma_buf_attach().”…”�”}”(hj 'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:142: ./drivers/dma-buf/dma-buf.c”h´MDhj\&ubhÌ)�”}”(hŒ\Optionally this calls :c:type:`dma_buf_ops.detach ` for device-specific detach.”h]”(hŒOptionally this calls ”…”�”}”(hj'h²hh³Nh´Nubh)�”}”(hŒ*:c:type:`dma_buf_ops.detach `”h]”jâ)�”}”(hj$'h]”hŒdma_buf_ops.detach”…”�”}”(hj&'h²hh³Nh´Nubah}”(h]”h ]”(jíjîŒc-type”eh"]”h$]”h&]”uh1jáhj"'ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”júŒ refdomain”jîŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰j³j·jŒ dma_buf_ops”uh1hh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:142: ./drivers/dma-buf/dma-buf.c”h´MFhj'ubhŒ for device-specific detach.”…”�”}”(hj'h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jA'h´MFhj\&ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jg hjèh²hh³Nh´NubjÉ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÕŒdma_buf_pin (C function)”Œ c.dma_buf_pin”hNt”auh1jÈhjèh²hh³Nh´NubjÛ)�”}”(hhh]”(jà)�”}”(hŒ3int dma_buf_pin (struct dma_buf_attachment *attach)”h]”jæ)�”}”(hŒ2int dma_buf_pin(struct dma_buf_attachment *attach)”h]”(jM)�”}”(hŒint”h]”hŒint”…”�”}”(hjl'h²hh³Nh´Nubah}”(h]”h ]”jYah"]”h$]”h&]”uh1jLhjh'h²hh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:142: ./drivers/dma-buf/dma-buf.c”h´M]ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj{'h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjh'h²hh³jz'h´M]ubj )�”}”(hŒ dma_buf_pin”h]”j )�”}”(hŒ dma_buf_pin”h]”hŒ dma_buf_pin”…”�”}”(hj�'h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj‰'ubah}”(h]”h ]”(j' j( eh"]”h$]”h&]”j÷jøuh1j hjh'h²hh³jz'h´M]ubjŒ)�”}”(hŒ#(struct dma_buf_attachment *attach)”h]”j’)�”}”(hŒ!struct dma_buf_attachment *attach”h]”(jì)�”}”(hjïh]”hŒstruct”…”�”}”(hj©'h²hh³Nh´Nubah}”(h]”h ]”jøah"]”h$]”h&]”uh1jëhj¥'ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¶'h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj¥'ubh)�”}”(hhh]”j )�”}”(hŒdma_buf_attachment”h]”hŒdma_buf_attachment”…”�”}”(hjÇ'h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjÄ'ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jîŒreftype”jGŒ reftarget”jÉ'Œmodname”NŒ classname”Nj³j¶)�”}”j¹]”jO)�”}”jGj�'sbŒ c.dma_buf_pin”†”asbuh1hhj¥'ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjç'h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj¥'ubjd)�”}”(hjgh]”hŒ*”…”�”}”(hjõ'h²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchj¥'ubj )�”}”(hŒattach”h]”hŒattach”…”�”}”(hj(h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj¥'ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj÷jøuh1j‘hj¡'ubah}”(h]”h ]”h"]”h$]”h&]”j÷jøuh1j‹hjh'h²hh³jz'h´M]ubeh}”(h]”h ]”h"]”h$]”h&]”j÷jøj2 ˆuh1jåj3 j4 hjd'h²hh³jz'h´M]ubah}”(h]”j_'ah ]”(j8 j9 eh"]”h$]”h&]”j= ˆj> )j? huh1jßh³jz'h´M]hja'h²hubjA )�”}”(hhh]”hÌ)�”}”(hŒLock down the DMA-buf”h]”hŒLock down the DMA-buf”…”�”}”(hj,(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:142: ./drivers/dma-buf/dma-buf.c”h´M]hj)(h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j@ hja'h²hh³jz'h´M]ubeh}”(h]”h ]”(jîŒfunction”eh"]”h$]”h&]”ja jîjb jD(jc jD(jd ‰je ‰jf ‰uh1jÚh²hhjèh³Nh´Nubjh )�”}”(hXõ**Parameters** ``struct dma_buf_attachment *attach`` [in] attachment which should be pinned **Description** Only dynamic importers (who set up **attach** with dma_buf_dynamic_attach()) may call this, and only for limited use cases like scanout and not for temporary pin operations. It is not permitted to allow userspace to pin arbitrary amounts of buffers through this interface. Buffers must be unpinned by calling dma_buf_unpin(). **Return** 0 on success, negative error code on failure.”h]”(hÌ)�”}”(hŒ**Parameters**”h]”jr )�”}”(hjN(h]”hŒ Parameters”…”�”}”(hjP(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hjL(ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:142: ./drivers/dma-buf/dma-buf.c”h´MahjH(ubj´ )�”}”(hhh]”j¹ )�”}”(hŒP``struct dma_buf_attachment *attach`` [in] attachment which should be pinned ”h]”(j¿ )�”}”(hŒ%``struct dma_buf_attachment *attach``”h]”jâ)�”}”(hjm(h]”hŒ!struct dma_buf_attachment *attach”…”�”}”(hjo(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjk(ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:142: ./drivers/dma-buf/dma-buf.c”h´M^hjg(ubjÙ )�”}”(hhh]”hÌ)�”}”(hŒ)[in] attachment which should be pinned”h]”hŒ)[in] attachment which should be pinned”…”�”}”(hj†(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j‚(h´M^hjƒ(ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hjg(ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³j‚(h´M^hjd(ubah}”(h]”h ]”h"]”h$]”h&]”uh1j³ hjH(ubhÌ)�”}”(hŒ**Description**”h]”jr )�”}”(hj¨(h]”hŒ Description”…”�”}”(hjª(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hj¦(ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:142: ./drivers/dma-buf/dma-buf.c”h´M`hjH(ubhÌ)�”}”(hXOnly dynamic importers (who set up **attach** with dma_buf_dynamic_attach()) may call this, and only for limited use cases like scanout and not for temporary pin operations. It is not permitted to allow userspace to pin arbitrary amounts of buffers through this interface.”h]”(hŒ#Only dynamic importers (who set up ”…”�”}”(hj¾(h²hh³Nh´Nubjr )�”}”(hŒ **attach**”h]”hŒattach”…”�”}”(hjÆ(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hj¾(ubhŒã with dma_buf_dynamic_attach()) may call this, and only for limited use cases like scanout and not for temporary pin operations. It is not permitted to allow userspace to pin arbitrary amounts of buffers through this interface.”…”�”}”(hj¾(h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:142: ./drivers/dma-buf/dma-buf.c”h´M_hjH(ubhÌ)�”}”(hŒ4Buffers must be unpinned by calling dma_buf_unpin().”h]”hŒ4Buffers must be unpinned by calling dma_buf_unpin().”…”�”}”(hjß(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:142: ./drivers/dma-buf/dma-buf.c”h´MdhjH(ubhÌ)�”}”(hŒ **Return**”h]”jr )�”}”(hjð(h]”hŒReturn”…”�”}”(hjò(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hjî(ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:142: ./drivers/dma-buf/dma-buf.c”h´MfhjH(ubhÌ)�”}”(hŒ-0 on success, negative error code on failure.”h]”hŒ-0 on success, negative error code on failure.”…”�”}”(hj)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:142: ./drivers/dma-buf/dma-buf.c”h´MghjH(ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jg hjèh²hh³Nh´NubjÉ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÕŒdma_buf_unpin (C function)”Œc.dma_buf_unpin”hNt”auh1jÈhjèh²hh³Nh´NubjÛ)�”}”(hhh]”(jà)�”}”(hŒ6void dma_buf_unpin (struct dma_buf_attachment *attach)”h]”jæ)�”}”(hŒ5void dma_buf_unpin(struct dma_buf_attachment *attach)”h]”(jM)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj5)h²hh³Nh´Nubah}”(h]”h ]”jYah"]”h$]”h&]”uh1jLhj1)h²hh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:142: ./drivers/dma-buf/dma-buf.c”h´M{ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjD)h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj1)h²hh³jC)h´M{ubj )�”}”(hŒ dma_buf_unpin”h]”j )�”}”(hŒ dma_buf_unpin”h]”hŒ dma_buf_unpin”…”�”}”(hjV)h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjR)ubah}”(h]”h ]”(j' j( eh"]”h$]”h&]”j÷jøuh1j hj1)h²hh³jC)h´M{ubjŒ)�”}”(hŒ#(struct dma_buf_attachment *attach)”h]”j’)�”}”(hŒ!struct dma_buf_attachment *attach”h]”(jì)�”}”(hjïh]”hŒstruct”…”�”}”(hjr)h²hh³Nh´Nubah}”(h]”h ]”jøah"]”h$]”h&]”uh1jëhjn)ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj)h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjn)ubh)�”}”(hhh]”j )�”}”(hŒdma_buf_attachment”h]”hŒdma_buf_attachment”…”�”}”(hj�)h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj�)ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jîŒreftype”jGŒ reftarget”j’)Œmodname”NŒ classname”Nj³j¶)�”}”j¹]”jO)�”}”jGjX)sbŒc.dma_buf_unpin”†”asbuh1hhjn)ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj°)h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjn)ubjd)�”}”(hjgh]”hŒ*”…”�”}”(hj¾)h²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchjn)ubj )�”}”(hŒattach”h]”hŒattach”…”�”}”(hjË)h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjn)ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj÷jøuh1j‘hjj)ubah}”(h]”h ]”h"]”h$]”h&]”j÷jøuh1j‹hj1)h²hh³jC)h´M{ubeh}”(h]”h ]”h"]”h$]”h&]”j÷jøj2 ˆuh1jåj3 j4 hj-)h²hh³jC)h´M{ubah}”(h]”j()ah ]”(j8 j9 eh"]”h$]”h&]”j= ˆj> )j? huh1jßh³jC)h´M{hj*)h²hubjA )�”}”(hhh]”hÌ)�”}”(hŒUnpin a DMA-buf”h]”hŒUnpin a DMA-buf”…”�”}”(hjõ)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:142: ./drivers/dma-buf/dma-buf.c”h´M{hjò)h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j@ hj*)h²hh³jC)h´M{ubeh}”(h]”h ]”(jîŒfunction”eh"]”h$]”h&]”ja jîjb j *jc j *jd ‰je ‰jf ‰uh1jÚh²hhjèh³Nh´Nubjh )�”}”(hXI**Parameters** ``struct dma_buf_attachment *attach`` [in] attachment which should be unpinned **Description** This unpins a buffer pinned by dma_buf_pin() and allows the exporter to move any mapping of **attach** again and inform the importer through :c:type:`dma_buf_attach_ops.invalidate_mappings `.”h]”(hÌ)�”}”(hŒ**Parameters**”h]”jr )�”}”(hj*h]”hŒ Parameters”…”�”}”(hj*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hj*ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:142: ./drivers/dma-buf/dma-buf.c”h´Mhj*ubj´ )�”}”(hhh]”j¹ )�”}”(hŒR``struct dma_buf_attachment *attach`` [in] attachment which should be unpinned ”h]”(j¿ )�”}”(hŒ%``struct dma_buf_attachment *attach``”h]”jâ)�”}”(hj6*h]”hŒ!struct dma_buf_attachment *attach”…”�”}”(hj8*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj4*ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:142: ./drivers/dma-buf/dma-buf.c”h´M|hj0*ubjÙ )�”}”(hhh]”hÌ)�”}”(hŒ+[in] attachment which should be unpinned”h]”hŒ+[in] attachment which should be unpinned”…”�”}”(hjO*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jK*h´M|hjL*ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hj0*ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³jK*h´M|hj-*ubah}”(h]”h ]”h"]”h$]”h&]”uh1j³ hj*ubhÌ)�”}”(hŒ**Description**”h]”jr )�”}”(hjq*h]”hŒ Description”…”�”}”(hjs*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hjo*ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:142: ./drivers/dma-buf/dma-buf.c”h´M~hj*ubhÌ)�”}”(hŒÓThis unpins a buffer pinned by dma_buf_pin() and allows the exporter to move any mapping of **attach** again and inform the importer through :c:type:`dma_buf_attach_ops.invalidate_mappings `.”h]”(hŒ\This unpins a buffer pinned by dma_buf_pin() and allows the exporter to move any mapping of ”…”�”}”(hj‡*h²hh³Nh´Nubjr )�”}”(hŒ **attach**”h]”hŒattach”…”�”}”(hj�*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hj‡*ubhŒ' again and inform the importer through ”…”�”}”(hj‡*h²hh³Nh´Nubh)�”}”(hŒE:c:type:`dma_buf_attach_ops.invalidate_mappings `”h]”jâ)�”}”(hj£*h]”hŒ&dma_buf_attach_ops.invalidate_mappings”…”�”}”(hj¥*h²hh³Nh´Nubah}”(h]”h ]”(jíjîŒc-type”eh"]”h$]”h&]”uh1jáhj¡*ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”júŒ refdomain”jîŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰j³j·jŒdma_buf_attach_ops”uh1hh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:142: ./drivers/dma-buf/dma-buf.c”h´M}hj‡*ubhŒ.”…”�”}”(hj‡*h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jÀ*h´M}hj*ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jg hjèh²hh³Nh´NubjÉ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÕŒ#dma_buf_map_attachment (C function)”Œc.dma_buf_map_attachment”hNt”auh1jÈhjèh²hh³Nh´NubjÛ)�”}”(hhh]”(jà)�”}”(hŒostruct sg_table * dma_buf_map_attachment (struct dma_buf_attachment *attach, enum dma_data_direction direction)”h]”jæ)�”}”(hŒmstruct sg_table *dma_buf_map_attachment(struct dma_buf_attachment *attach, enum dma_data_direction direction)”h]”(jì)�”}”(hjïh]”hŒstruct”…”�”}”(hjë*h²hh³Nh´Nubah}”(h]”h ]”jøah"]”h$]”h&]”uh1jëhjç*h²hh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:142: ./drivers/dma-buf/dma-buf.c”h´M�ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjù*h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjç*h²hh³jø*h´M�ubh)�”}”(hhh]”j )�”}”(hŒsg_table”h]”hŒsg_table”…”�”}”(hj +h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj+ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jîŒreftype”jGŒ reftarget”j +Œmodname”NŒ classname”Nj³j¶)�”}”j¹]”jO)�”}”jGŒdma_buf_map_attachment”sbŒc.dma_buf_map_attachment”†”asbuh1hhjç*h²hh³jø*h´M�ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj++h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjç*h²hh³jø*h´M�ubjd)�”}”(hjgh]”hŒ*”…”�”}”(hj9+h²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchjç*h²hh³jø*h´M�ubj )�”}”(hŒdma_buf_map_attachment”h]”j )�”}”(hj(+h]”hŒdma_buf_map_attachment”…”�”}”(hjJ+h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjF+ubah}”(h]”h ]”(j' j( eh"]”h$]”h&]”j÷jøuh1j hjç*h²hh³jø*h´M�ubjŒ)�”}”(hŒF(struct dma_buf_attachment *attach, enum dma_data_direction direction)”h]”(j’)�”}”(hŒ!struct dma_buf_attachment *attach”h]”(jì)�”}”(hjïh]”hŒstruct”…”�”}”(hje+h²hh³Nh´Nubah}”(h]”h ]”jøah"]”h$]”h&]”uh1jëhja+ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjr+h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhja+ubh)�”}”(hhh]”j )�”}”(hŒdma_buf_attachment”h]”hŒdma_buf_attachment”…”�”}”(hjƒ+h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj€+ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jîŒreftype”jGŒ reftarget”j…+Œmodname”NŒ classname”Nj³j¶)�”}”j¹]”j&+Œc.dma_buf_map_attachment”†”asbuh1hhja+ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¡+h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhja+ubjd)�”}”(hjgh]”hŒ*”…”�”}”(hj¯+h²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchja+ubj )�”}”(hŒattach”h]”hŒattach”…”�”}”(hj¼+h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hja+ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj÷jøuh1j‘hj]+ubj’)�”}”(hŒ!enum dma_data_direction direction”h]”(jì)�”}”(hŒenum”h]”hŒenum”…”�”}”(hjÕ+h²hh³Nh´Nubah}”(h]”h ]”jøah"]”h$]”h&]”uh1jëhjÑ+ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjã+h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjÑ+ubh)�”}”(hhh]”j )�”}”(hŒdma_data_direction”h]”hŒdma_data_direction”…”�”}”(hjô+h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjñ+ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jîŒreftype”jGŒ reftarget”jö+Œmodname”NŒ classname”Nj³j¶)�”}”j¹]”j&+Œc.dma_buf_map_attachment”†”asbuh1hhjÑ+ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj,h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjÑ+ubj )�”}”(hŒ direction”h]”hŒ direction”…”�”}”(hj ,h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjÑ+ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj÷jøuh1j‘hj]+ubeh}”(h]”h ]”h"]”h$]”h&]”j÷jøuh1j‹hjç*h²hh³jø*h´M�ubeh}”(h]”h ]”h"]”h$]”h&]”j÷jøj2 ˆuh1jåj3 j4 hjã*h²hh³jø*h´M�ubah}”(h]”jÞ*ah ]”(j8 j9 eh"]”h$]”h&]”j= ˆj> )j? huh1jßh³jø*h´M�hjà*h²hubjA )�”}”(hhh]”hÌ)�”}”(hŒ‡Returns the scatterlist table of the attachment; mapped into _device_ address space. Is a wrapper for map_dma_buf() of the dma_buf_ops.”h]”hŒ‡Returns the scatterlist table of the attachment; mapped into _device_ address space. Is a wrapper for map_dma_buf() of the dma_buf_ops.”…”�”}”(hjJ,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:142: ./drivers/dma-buf/dma-buf.c”h´M�hjG,h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j@ hjà*h²hh³jø*h´M�ubeh}”(h]”h ]”(jîŒfunction”eh"]”h$]”h&]”ja jîjb jb,jc jb,jd ‰je ‰jf ‰uh1jÚh²hhjèh³Nh´Nubjh )�”}”(hX**Parameters** ``struct dma_buf_attachment *attach`` [in] attachment whose scatterlist is to be returned ``enum dma_data_direction direction`` [in] direction of DMA transfer **Description** Returns sg_table containing the scatterlist to be returned; returns ERR_PTR on error. May return -EINTR if it is interrupted by a signal. On success, the DMA addresses and lengths in the returned scatterlist are PAGE_SIZE aligned. A mapping must be unmapped by using dma_buf_unmap_attachment(). Note that the underlying backing storage is pinned for as long as a mapping exists, therefore users/importers should not hold onto a mapping for undue amounts of time. Important: Dynamic importers must wait for the exclusive fence of the struct dma_resv attached to the DMA-BUF first.”h]”(hÌ)�”}”(hŒ**Parameters**”h]”jr )�”}”(hjl,h]”hŒ Parameters”…”�”}”(hjn,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hjj,ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:142: ./drivers/dma-buf/dma-buf.c”h´M”hjf,ubj´ )�”}”(hhh]”(j¹ )�”}”(hŒ]``struct dma_buf_attachment *attach`` [in] attachment whose scatterlist is to be returned ”h]”(j¿ )�”}”(hŒ%``struct dma_buf_attachment *attach``”h]”jâ)�”}”(hj‹,h]”hŒ!struct dma_buf_attachment *attach”…”�”}”(hj�,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj‰,ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:142: ./drivers/dma-buf/dma-buf.c”h´M“hj…,ubjÙ )�”}”(hhh]”hÌ)�”}”(hŒ6[in] attachment whose scatterlist is to be returned”h]”hŒ6[in] attachment whose scatterlist is to be returned”…”�”}”(hj¤,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j ,h´M“hj¡,ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hj…,ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³j ,h´M“hj‚,ubj¹ )�”}”(hŒH``enum dma_data_direction direction`` [in] direction of DMA transfer ”h]”(j¿ )�”}”(hŒ%``enum dma_data_direction direction``”h]”jâ)�”}”(hjÄ,h]”hŒ!enum dma_data_direction direction”…”�”}”(hjÆ,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjÂ,ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:142: ./drivers/dma-buf/dma-buf.c”h´M”hj¾,ubjÙ )�”}”(hhh]”hÌ)�”}”(hŒ![in] direction of DMA transfer”h]”hŒ![in] direction of DMA transfer”…”�”}”(hjÝ,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jÙ,h´M”hjÚ,ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hj¾,ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³jÙ,h´M”hj‚,ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j³ hjf,ubhÌ)�”}”(hŒ**Description**”h]”jr )�”}”(hjÿ,h]”hŒ Description”…”�”}”(hj-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hjý,ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:142: ./drivers/dma-buf/dma-buf.c”h´M–hjf,ubhÌ)�”}”(hŒ‰Returns sg_table containing the scatterlist to be returned; returns ERR_PTR on error. May return -EINTR if it is interrupted by a signal.”h]”hŒ‰Returns sg_table containing the scatterlist to be returned; returns ERR_PTR on error. May return -EINTR if it is interrupted by a signal.”…”�”}”(hj-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:142: ./drivers/dma-buf/dma-buf.c”h´M•hjf,ubhÌ)�”}”(hŒ\On success, the DMA addresses and lengths in the returned scatterlist are PAGE_SIZE aligned.”h]”hŒ\On success, the DMA addresses and lengths in the returned scatterlist are PAGE_SIZE aligned.”…”�”}”(hj$-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:142: ./drivers/dma-buf/dma-buf.c”h´M˜hjf,ubhÌ)�”}”(hŒçA mapping must be unmapped by using dma_buf_unmap_attachment(). Note that the underlying backing storage is pinned for as long as a mapping exists, therefore users/importers should not hold onto a mapping for undue amounts of time.”h]”hŒçA mapping must be unmapped by using dma_buf_unmap_attachment(). Note that the underlying backing storage is pinned for as long as a mapping exists, therefore users/importers should not hold onto a mapping for undue amounts of time.”…”�”}”(hj3-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:142: ./drivers/dma-buf/dma-buf.c”h´M›hjf,ubhÌ)�”}”(hŒtImportant: Dynamic importers must wait for the exclusive fence of the struct dma_resv attached to the DMA-BUF first.”h]”hŒtImportant: Dynamic importers must wait for the exclusive fence of the struct dma_resv attached to the DMA-BUF first.”…”�”}”(hjB-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:142: ./drivers/dma-buf/dma-buf.c”h´M hjf,ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jg hjèh²hh³Nh´NubjÉ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÕŒ,dma_buf_map_attachment_unlocked (C function)”Œ!c.dma_buf_map_attachment_unlocked”hNt”auh1jÈhjèh²hh³Nh´NubjÛ)�”}”(hhh]”(jà)�”}”(hŒxstruct sg_table * dma_buf_map_attachment_unlocked (struct dma_buf_attachment *attach, enum dma_data_direction direction)”h]”jæ)�”}”(hŒvstruct sg_table *dma_buf_map_attachment_unlocked(struct dma_buf_attachment *attach, enum dma_data_direction direction)”h]”(jì)�”}”(hjïh]”hŒstruct”…”�”}”(hjq-h²hh³Nh´Nubah}”(h]”h ]”jøah"]”h$]”h&]”uh1jëhjm-h²hh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:142: ./drivers/dma-buf/dma-buf.c”h´Mïubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj-h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjm-h²hh³j~-h´Mïubh)�”}”(hhh]”j )�”}”(hŒsg_table”h]”hŒsg_table”…”�”}”(hj�-h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj�-ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jîŒreftype”jGŒ reftarget”j’-Œmodname”NŒ classname”Nj³j¶)�”}”j¹]”jO)�”}”jGŒdma_buf_map_attachment_unlocked”sbŒ!c.dma_buf_map_attachment_unlocked”†”asbuh1hhjm-h²hh³j~-h´Mïubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj±-h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjm-h²hh³j~-h´Mïubjd)�”}”(hjgh]”hŒ*”…”�”}”(hj¿-h²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchjm-h²hh³j~-h´Mïubj )�”}”(hŒdma_buf_map_attachment_unlocked”h]”j )�”}”(hj®-h]”hŒdma_buf_map_attachment_unlocked”…”�”}”(hjÐ-h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjÌ-ubah}”(h]”h ]”(j' j( eh"]”h$]”h&]”j÷jøuh1j hjm-h²hh³j~-h´MïubjŒ)�”}”(hŒF(struct dma_buf_attachment *attach, enum dma_data_direction direction)”h]”(j’)�”}”(hŒ!struct dma_buf_attachment *attach”h]”(jì)�”}”(hjïh]”hŒstruct”…”�”}”(hjë-h²hh³Nh´Nubah}”(h]”h ]”jøah"]”h$]”h&]”uh1jëhjç-ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjø-h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjç-ubh)�”}”(hhh]”j )�”}”(hŒdma_buf_attachment”h]”hŒdma_buf_attachment”…”�”}”(hj .h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj.ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jîŒreftype”jGŒ reftarget”j .Œmodname”NŒ classname”Nj³j¶)�”}”j¹]”j¬-Œ!c.dma_buf_map_attachment_unlocked”†”asbuh1hhjç-ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj'.h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjç-ubjd)�”}”(hjgh]”hŒ*”…”�”}”(hj5.h²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchjç-ubj )�”}”(hŒattach”h]”hŒattach”…”�”}”(hjB.h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjç-ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj÷jøuh1j‘hjã-ubj’)�”}”(hŒ!enum dma_data_direction direction”h]”(jì)�”}”(hj×+h]”hŒenum”…”�”}”(hj[.h²hh³Nh´Nubah}”(h]”h ]”jøah"]”h$]”h&]”uh1jëhjW.ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh.h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjW.ubh)�”}”(hhh]”j )�”}”(hŒdma_data_direction”h]”hŒdma_data_direction”…”�”}”(hjy.h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjv.ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jîŒreftype”jGŒ reftarget”j{.Œmodname”NŒ classname”Nj³j¶)�”}”j¹]”j¬-Œ!c.dma_buf_map_attachment_unlocked”†”asbuh1hhjW.ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj—.h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjW.ubj )�”}”(hŒ direction”h]”hŒ direction”…”�”}”(hj¥.h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjW.ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj÷jøuh1j‘hjã-ubeh}”(h]”h ]”h"]”h$]”h&]”j÷jøuh1j‹hjm-h²hh³j~-h´Mïubeh}”(h]”h ]”h"]”h$]”h&]”j÷jøj2 ˆuh1jåj3 j4 hji-h²hh³j~-h´Mïubah}”(h]”jd-ah ]”(j8 j9 eh"]”h$]”h&]”j= ˆj> )j? huh1jßh³j~-h´Mïhjf-h²hubjA )�”}”(hhh]”hÌ)�”}”(hŒ‡Returns the scatterlist table of the attachment; mapped into _device_ address space. Is a wrapper for map_dma_buf() of the dma_buf_ops.”h]”hŒ‡Returns the scatterlist table of the attachment; mapped into _device_ address space. Is a wrapper for map_dma_buf() of the dma_buf_ops.”…”�”}”(hjÏ.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:142: ./drivers/dma-buf/dma-buf.c”h´MïhjÌ.h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j@ hjf-h²hh³j~-h´Mïubeh}”(h]”h ]”(jîŒfunction”eh"]”h$]”h&]”ja jîjb jç.jc jç.jd ‰je ‰jf ‰uh1jÚh²hhjèh³Nh´Nubjh )�”}”(hŒù**Parameters** ``struct dma_buf_attachment *attach`` [in] attachment whose scatterlist is to be returned ``enum dma_data_direction direction`` [in] direction of DMA transfer **Description** Unlocked variant of dma_buf_map_attachment().”h]”(hÌ)�”}”(hŒ**Parameters**”h]”jr )�”}”(hjñ.h]”hŒ Parameters”…”�”}”(hjó.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hjï.ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:142: ./drivers/dma-buf/dma-buf.c”h´Móhjë.ubj´ )�”}”(hhh]”(j¹ )�”}”(hŒ]``struct dma_buf_attachment *attach`` [in] attachment whose scatterlist is to be returned ”h]”(j¿ )�”}”(hŒ%``struct dma_buf_attachment *attach``”h]”jâ)�”}”(hj/h]”hŒ!struct dma_buf_attachment *attach”…”�”}”(hj/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj/ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:142: ./drivers/dma-buf/dma-buf.c”h´Mòhj /ubjÙ )�”}”(hhh]”hÌ)�”}”(hŒ6[in] attachment whose scatterlist is to be returned”h]”hŒ6[in] attachment whose scatterlist is to be returned”…”�”}”(hj)/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j%/h´Mòhj&/ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hj /ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³j%/h´Mòhj/ubj¹ )�”}”(hŒH``enum dma_data_direction direction`` [in] direction of DMA transfer ”h]”(j¿ )�”}”(hŒ%``enum dma_data_direction direction``”h]”jâ)�”}”(hjI/h]”hŒ!enum dma_data_direction direction”…”�”}”(hjK/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjG/ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:142: ./drivers/dma-buf/dma-buf.c”h´MóhjC/ubjÙ )�”}”(hhh]”hÌ)�”}”(hŒ![in] direction of DMA transfer”h]”hŒ![in] direction of DMA transfer”…”�”}”(hjb/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j^/h´Móhj_/ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hjC/ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³j^/h´Móhj/ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j³ hjë.ubhÌ)�”}”(hŒ**Description**”h]”jr )�”}”(hj„/h]”hŒ Description”…”�”}”(hj†/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hj‚/ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:142: ./drivers/dma-buf/dma-buf.c”h´Mõhjë.ubhÌ)�”}”(hŒ-Unlocked variant of dma_buf_map_attachment().”h]”hŒ-Unlocked variant of dma_buf_map_attachment().”…”�”}”(hjš/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:142: ./drivers/dma-buf/dma-buf.c”h´Môhjë.ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jg hjèh²hh³Nh´NubjÉ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÕŒ%dma_buf_unmap_attachment (C function)”Œc.dma_buf_unmap_attachment”hNt”auh1jÈhjèh²hh³Nh´NubjÛ)�”}”(hhh]”(jà)�”}”(hŒvoid dma_buf_unmap_attachment (struct dma_buf_attachment *attach, struct sg_table *sg_table, enum dma_data_direction direction)”h]”jæ)�”}”(hŒ~void dma_buf_unmap_attachment(struct dma_buf_attachment *attach, struct sg_table *sg_table, enum dma_data_direction direction)”h]”(jM)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjÉ/h²hh³Nh´Nubah}”(h]”h ]”jYah"]”h$]”h&]”uh1jLhjÅ/h²hh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:142: ./drivers/dma-buf/dma-buf.c”h´M ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjØ/h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjÅ/h²hh³j×/h´M ubj )�”}”(hŒdma_buf_unmap_attachment”h]”j )�”}”(hŒdma_buf_unmap_attachment”h]”hŒdma_buf_unmap_attachment”…”�”}”(hjê/h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjæ/ubah}”(h]”h ]”(j' j( eh"]”h$]”h&]”j÷jøuh1j hjÅ/h²hh³j×/h´M ubjŒ)�”}”(hŒa(struct dma_buf_attachment *attach, struct sg_table *sg_table, enum dma_data_direction direction)”h]”(j’)�”}”(hŒ!struct dma_buf_attachment *attach”h]”(jì)�”}”(hjïh]”hŒstruct”…”�”}”(hj0h²hh³Nh´Nubah}”(h]”h ]”jøah"]”h$]”h&]”uh1jëhj0ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj0h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj0ubh)�”}”(hhh]”j )�”}”(hŒdma_buf_attachment”h]”hŒdma_buf_attachment”…”�”}”(hj$0h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj!0ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jîŒreftype”jGŒ reftarget”j&0Œmodname”NŒ classname”Nj³j¶)�”}”j¹]”jO)�”}”jGjì/sbŒc.dma_buf_unmap_attachment”†”asbuh1hhj0ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjD0h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj0ubjd)�”}”(hjgh]”hŒ*”…”�”}”(hjR0h²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchj0ubj )�”}”(hŒattach”h]”hŒattach”…”�”}”(hj_0h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj0ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj÷jøuh1j‘hjþ/ubj’)�”}”(hŒstruct sg_table *sg_table”h]”(jì)�”}”(hjïh]”hŒstruct”…”�”}”(hjx0h²hh³Nh´Nubah}”(h]”h ]”jøah"]”h$]”h&]”uh1jëhjt0ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj…0h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjt0ubh)�”}”(hhh]”j )�”}”(hŒsg_table”h]”hŒsg_table”…”�”}”(hj–0h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj“0ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jîŒreftype”jGŒ reftarget”j˜0Œmodname”NŒ classname”Nj³j¶)�”}”j¹]”j@0Œc.dma_buf_unmap_attachment”†”asbuh1hhjt0ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj´0h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjt0ubjd)�”}”(hjgh]”hŒ*”…”�”}”(hjÂ0h²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchjt0ubj )�”}”(hŒsg_table”h]”hŒsg_table”…”�”}”(hjÏ0h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjt0ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj÷jøuh1j‘hjþ/ubj’)�”}”(hŒ!enum dma_data_direction direction”h]”(jì)�”}”(hj×+h]”hŒenum”…”�”}”(hjè0h²hh³Nh´Nubah}”(h]”h ]”jøah"]”h$]”h&]”uh1jëhjä0ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”•}”(hjõ0h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjä0ubh)�”}”(hhh]”j )�”}”(hŒdma_data_direction”h]”hŒdma_data_direction”…”�”}”(hj1h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj1ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jîŒreftype”jGŒ reftarget”j1Œmodname”NŒ classname”Nj³j¶)�”}”j¹]”j@0Œc.dma_buf_unmap_attachment”†”asbuh1hhjä0ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj$1h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjä0ubj )�”}”(hŒ direction”h]”hŒ direction”…”�”}”(hj21h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjä0ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj÷jøuh1j‘hjþ/ubeh}”(h]”h ]”h"]”h$]”h&]”j÷jøuh1j‹hjÅ/h²hh³j×/h´M ubeh}”(h]”h ]”h"]”h$]”h&]”j÷jøj2 ˆuh1jåj3 j4 hjÁ/h²hh³j×/h´M ubah}”(h]”j¼/ah ]”(j8 j9 eh"]”h$]”h&]”j= ˆj> )j? huh1jßh³j×/h´M hj¾/h²hubjA )�”}”(hhh]”hÌ)�”}”(hŒ‰unmaps and decreases usecount of the buffer;might deallocate the scatterlist associated. Is a wrapper for unmap_dma_buf() of dma_buf_ops.”h]”hŒ‰unmaps and decreases usecount of the buffer;might deallocate the scatterlist associated. Is a wrapper for unmap_dma_buf() of dma_buf_ops.”…”�”}”(hj\1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:142: ./drivers/dma-buf/dma-buf.c”h´M hjY1h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j@ hj¾/h²hh³j×/h´M ubeh}”(h]”h ]”(jîŒfunction”eh"]”h$]”h&]”ja jîjb jt1jc jt1jd ‰je ‰jf ‰uh1jÚh²hhjèh³Nh´Nubjh )�”}”(hX^**Parameters** ``struct dma_buf_attachment *attach`` [in] attachment to unmap buffer from ``struct sg_table *sg_table`` [in] scatterlist info of the buffer to unmap ``enum dma_data_direction direction`` [in] direction of DMA transfer **Description** This unmaps a DMA mapping for **attached** obtained by dma_buf_map_attachment().”h]”(hÌ)�”}”(hŒ**Parameters**”h]”jr )�”}”(hj~1h]”hŒ Parameters”…”�”}”(hj€1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hj|1ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:142: ./drivers/dma-buf/dma-buf.c”h´Mhjx1ubj´ )�”}”(hhh]”(j¹ )�”}”(hŒN``struct dma_buf_attachment *attach`` [in] attachment to unmap buffer from ”h]”(j¿ )�”}”(hŒ%``struct dma_buf_attachment *attach``”h]”jâ)�”}”(hj�1h]”hŒ!struct dma_buf_attachment *attach”…”�”}”(hjŸ1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj›1ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:142: ./drivers/dma-buf/dma-buf.c”h´Mhj—1ubjÙ )�”}”(hhh]”hÌ)�”}”(hŒ'[in] attachment to unmap buffer from”h]”hŒ'[in] attachment to unmap buffer from”…”�”}”(hj¶1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j²1h´Mhj³1ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hj—1ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³j²1h´Mhj”1ubj¹ )�”}”(hŒN``struct sg_table *sg_table`` [in] scatterlist info of the buffer to unmap ”h]”(j¿ )�”}”(hŒ``struct sg_table *sg_table``”h]”jâ)�”}”(hjÖ1h]”hŒstruct sg_table *sg_table”…”�”}”(hjØ1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjÔ1ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:142: ./drivers/dma-buf/dma-buf.c”h´MhjÐ1ubjÙ )�”}”(hhh]”hÌ)�”}”(hŒ/[in] scatterlist info of the buffer to unmap”h]”hŒ/[in] scatterlist info of the buffer to unmap”…”�”}”(hjï1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jë1h´Mhjì1ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hjÐ1ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³jë1h´Mhj”1ubj¹ )�”}”(hŒH``enum dma_data_direction direction`` [in] direction of DMA transfer ”h]”(j¿ )�”}”(hŒ%``enum dma_data_direction direction``”h]”jâ)�”}”(hj2h]”hŒ!enum dma_data_direction direction”…”�”}”(hj2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj 2ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:142: ./drivers/dma-buf/dma-buf.c”h´Mhj 2ubjÙ )�”}”(hhh]”hÌ)�”}”(hŒ![in] direction of DMA transfer”h]”hŒ![in] direction of DMA transfer”…”�”}”(hj(2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j$2h´Mhj%2ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hj 2ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³j$2h´Mhj”1ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j³ hjx1ubhÌ)�”}”(hŒ**Description**”h]”jr )�”}”(hjJ2h]”hŒ Description”…”�”}”(hjL2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hjH2ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:142: ./drivers/dma-buf/dma-buf.c”h´Mhjx1ubhÌ)�”}”(hŒPThis unmaps a DMA mapping for **attached** obtained by dma_buf_map_attachment().”h]”(hŒThis unmaps a DMA mapping for ”…”�”}”(hj`2h²hh³Nh´Nubjr )�”}”(hŒ **attached**”h]”hŒattached”…”�”}”(hjh2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hj`2ubhŒ& obtained by dma_buf_map_attachment().”…”�”}”(hj`2h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:142: ./drivers/dma-buf/dma-buf.c”h´Mhjx1ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jg hjèh²hh³Nh´NubjÉ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÕŒ.dma_buf_unmap_attachment_unlocked (C function)”Œ#c.dma_buf_unmap_attachment_unlocked”hNt”auh1jÈhjèh²hh³Nh´NubjÛ)�”}”(hhh]”(jà)�”}”(hŒˆvoid dma_buf_unmap_attachment_unlocked (struct dma_buf_attachment *attach, struct sg_table *sg_table, enum dma_data_direction direction)”h]”jæ)�”}”(hŒ‡void dma_buf_unmap_attachment_unlocked(struct dma_buf_attachment *attach, struct sg_table *sg_table, enum dma_data_direction direction)”h]”(jM)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj¡2h²hh³Nh´Nubah}”(h]”h ]”jYah"]”h$]”h&]”uh1jLhj�2h²hh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:142: ./drivers/dma-buf/dma-buf.c”h´M(ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj°2h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj�2h²hh³j¯2h´M(ubj )�”}”(hŒ!dma_buf_unmap_attachment_unlocked”h]”j )�”}”(hŒ!dma_buf_unmap_attachment_unlocked”h]”hŒ!dma_buf_unmap_attachment_unlocked”…”�”}”(hjÂ2h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj¾2ubah}”(h]”h ]”(j' j( eh"]”h$]”h&]”j÷jøuh1j hj�2h²hh³j¯2h´M(ubjŒ)�”}”(hŒa(struct dma_buf_attachment *attach, struct sg_table *sg_table, enum dma_data_direction direction)”h]”(j’)�”}”(hŒ!struct dma_buf_attachment *attach”h]”(jì)�”}”(hjïh]”hŒstruct”…”�”}”(hjÞ2h²hh³Nh´Nubah}”(h]”h ]”jøah"]”h$]”h&]”uh1jëhjÚ2ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjë2h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjÚ2ubh)�”}”(hhh]”j )�”}”(hŒdma_buf_attachment”h]”hŒdma_buf_attachment”…”�”}”(hjü2h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjù2ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jîŒreftype”jGŒ reftarget”jþ2Œmodname”NŒ classname”Nj³j¶)�”}”j¹]”jO)�”}”jGjÄ2sbŒ#c.dma_buf_unmap_attachment_unlocked”†”asbuh1hhjÚ2ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj3h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjÚ2ubjd)�”}”(hjgh]”hŒ*”…”�”}”(hj*3h²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchjÚ2ubj )�”}”(hŒattach”h]”hŒattach”…”�”}”(hj73h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjÚ2ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj÷jøuh1j‘hjÖ2ubj’)�”}”(hŒstruct sg_table *sg_table”h]”(jì)�”}”(hjïh]”hŒstruct”…”�”}”(hjP3h²hh³Nh´Nubah}”(h]”h ]”jøah"]”h$]”h&]”uh1jëhjL3ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj]3h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjL3ubh)�”}”(hhh]”j )�”}”(hŒsg_table”h]”hŒsg_table”…”�”}”(hjn3h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjk3ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jîŒreftype”jGŒ reftarget”jp3Œmodname”NŒ classname”Nj³j¶)�”}”j¹]”j3Œ#c.dma_buf_unmap_attachment_unlocked”†”asbuh1hhjL3ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŒ3h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjL3ubjd)�”}”(hjgh]”hŒ*”…”�”}”(hjš3h²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchjL3ubj )�”}”(hŒsg_table”h]”hŒsg_table”…”�”}”(hj§3h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjL3ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj÷jøuh1j‘hjÖ2ubj’)�”}”(hŒ!enum dma_data_direction direction”h]”(jì)�”}”(hj×+h]”hŒenum”…”�”}”(hjÀ3h²hh³Nh´Nubah}”(h]”h ]”jøah"]”h$]”h&]”uh1jëhj¼3ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÍ3h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj¼3ubh)�”}”(hhh]”j )�”}”(hŒdma_data_direction”h]”hŒdma_data_direction”…”�”}”(hjÞ3h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjÛ3ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jîŒreftype”jGŒ reftarget”jà3Œmodname”NŒ classname”Nj³j¶)�”}”j¹]”j3Œ#c.dma_buf_unmap_attachment_unlocked”†”asbuh1hhj¼3ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjü3h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj¼3ubj )�”}”(hŒ direction”h]”hŒ direction”…”�”}”(hj 4h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj¼3ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj÷jøuh1j‘hjÖ2ubeh}”(h]”h ]”h"]”h$]”h&]”j÷jøuh1j‹hj�2h²hh³j¯2h´M(ubeh}”(h]”h ]”h"]”h$]”h&]”j÷jøj2 ˆuh1jåj3 j4 hj™2h²hh³j¯2h´M(ubah}”(h]”j”2ah ]”(j8 j9 eh"]”h$]”h&]”j= ˆj> )j? huh1jßh³j¯2h´M(hj–2h²hubjA )�”}”(hhh]”hÌ)�”}”(hŒ‰unmaps and decreases usecount of the buffer;might deallocate the scatterlist associated. Is a wrapper for unmap_dma_buf() of dma_buf_ops.”h]”hŒ‰unmaps and decreases usecount of the buffer;might deallocate the scatterlist associated. Is a wrapper for unmap_dma_buf() of dma_buf_ops.”…”�”}”(hj44h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:142: ./drivers/dma-buf/dma-buf.c”h´M(hj14h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j@ hj–2h²hh³j¯2h´M(ubeh}”(h]”h ]”(jîŒfunction”eh"]”h$]”h&]”ja jîjb jL4jc jL4jd ‰je ‰jf ‰uh1jÚh²hhjèh³Nh´Nubjh )�”}”(hX=**Parameters** ``struct dma_buf_attachment *attach`` [in] attachment to unmap buffer from ``struct sg_table *sg_table`` [in] scatterlist info of the buffer to unmap ``enum dma_data_direction direction`` [in] direction of DMA transfer **Description** Unlocked variant of dma_buf_unmap_attachment().”h]”(hÌ)�”}”(hŒ**Parameters**”h]”jr )�”}”(hjV4h]”hŒ Parameters”…”�”}”(hjX4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hjT4ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:142: ./drivers/dma-buf/dma-buf.c”h´M,hjP4ubj´ )�”}”(hhh]”(j¹ )�”}”(hŒN``struct dma_buf_attachment *attach`` [in] attachment to unmap buffer from ”h]”(j¿ )�”}”(hŒ%``struct dma_buf_attachment *attach``”h]”jâ)�”}”(hju4h]”hŒ!struct dma_buf_attachment *attach”…”�”}”(hjw4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjs4ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:142: ./drivers/dma-buf/dma-buf.c”h´M+hjo4ubjÙ )�”}”(hhh]”hÌ)�”}”(hŒ'[in] attachment to unmap buffer from”h]”hŒ'[in] attachment to unmap buffer from”…”�”}”(hjŽ4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jŠ4h´M+hj‹4ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hjo4ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³jŠ4h´M+hjl4ubj¹ )�”}”(hŒN``struct sg_table *sg_table`` [in] scatterlist info of the buffer to unmap ”h]”(j¿ )�”}”(hŒ``struct sg_table *sg_table``”h]”jâ)�”}”(hj®4h]”hŒstruct sg_table *sg_table”…”�”}”(hj°4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj¬4ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:142: ./drivers/dma-buf/dma-buf.c”h´M,hj¨4ubjÙ )�”}”(hhh]”hÌ)�”}”(hŒ/[in] scatterlist info of the buffer to unmap”h]”hŒ/[in] scatterlist info of the buffer to unmap”…”�”}”(hjÇ4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jÃ4h´M,hjÄ4ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hj¨4ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³jÃ4h´M,hjl4ubj¹ )�”}”(hŒH``enum dma_data_direction direction`` [in] direction of DMA transfer ”h]”(j¿ )�”}”(hŒ%``enum dma_data_direction direction``”h]”jâ)�”}”(hjç4h]”hŒ!enum dma_data_direction direction”…”�”}”(hjé4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjå4ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:142: ./drivers/dma-buf/dma-buf.c”h´M-hjá4ubjÙ )�”}”(hhh]”hÌ)�”}”(hŒ![in] direction of DMA transfer”h]”hŒ![in] direction of DMA transfer”…”�”}”(hj5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jü4h´M-hjý4ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hjá4ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³jü4h´M-hjl4ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j³ hjP4ubhÌ)�”}”(hŒ**Description**”h]”jr )�”}”(hj"5h]”hŒ Description”…”�”}”(hj$5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hj 5ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:142: ./drivers/dma-buf/dma-buf.c”h´M/hjP4ubhÌ)�”}”(hŒ/Unlocked variant of dma_buf_unmap_attachment().”h]”hŒ/Unlocked variant of dma_buf_unmap_attachment().”…”�”}”(hj85h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:142: ./drivers/dma-buf/dma-buf.c”h´M.hjP4ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jg hjèh²hh³Nh´NubjÉ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÕŒ%dma_buf_attach_revocable (C function)”Œc.dma_buf_attach_revocable”hNt”auh1jÈhjèh²hh³Nh´NubjÛ)�”}”(hhh]”(jà)�”}”(hŒAbool dma_buf_attach_revocable (struct dma_buf_attachment *attach)”h]”jæ)�”}”(hŒ@bool dma_buf_attach_revocable(struct dma_buf_attachment *attach)”h]”(jM)�”}”(hŒbool”h]”hŒbool”…”�”}”(hjg5h²hh³Nh´Nubah}”(h]”h ]”jYah"]”h$]”h&]”uh1jLhjc5h²hh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:142: ./drivers/dma-buf/dma-buf.c”h´MAubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjv5h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjc5h²hh³ju5h´MAubj )�”}”(hŒdma_buf_attach_revocable”h]”j )�”}”(hŒdma_buf_attach_revocable”h]”hŒdma_buf_attach_revocable”…”�”}”(hjˆ5h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj„5ubah}”(h]”h ]”(j' j( eh"]”h$]”h&]”j÷jøuh1j hjc5h²hh³ju5h´MAubjŒ)�”}”(hŒ#(struct dma_buf_attachment *attach)”h]”j’)�”}”(hŒ!struct dma_buf_attachment *attach”h]”(jì)�”}”(hjïh]”hŒstruct”…”�”}”(hj¤5h²hh³Nh´Nubah}”(h]”h ]”jøah"]”h$]”h&]”uh1jëhj 5ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj±5h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj 5ubh)�”}”(hhh]”j )�”}”(hŒdma_buf_attachment”h]”hŒdma_buf_attachment”…”�”}”(hjÂ5h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj¿5ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jîŒreftype”jGŒ reftarget”jÄ5Œmodname”NŒ classname”Nj³j¶)�”}”j¹]”jO)�”}”jGjŠ5sbŒc.dma_buf_attach_revocable”†”asbuh1hhj 5ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjâ5h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj 5ubjd)�”}”(hjgh]”hŒ*”…”�”}”(hjð5h²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchj 5ubj )�”}”(hŒattach”h]”hŒattach”…”�”}”(hjý5h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj 5ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj÷jøuh1j‘hjœ5ubah}”(h]”h ]”h"]”h$]”h&]”j÷jøuh1j‹hjc5h²hh³ju5h´MAubeh}”(h]”h ]”h"]”h$]”h&]”j÷jøj2 ˆuh1jåj3 j4 hj_5h²hh³ju5h´MAubah}”(h]”jZ5ah ]”(j8 j9 eh"]”h$]”h&]”j= ˆj> )j? huh1jßh³ju5h´MAhj\5h²hubjA )�”}”(hhh]”hÌ)�”}”(hŒ8check if a DMA-buf importer implements revoke semantics.”h]”hŒ8check if a DMA-buf importer implements revoke semantics.”…”�”}”(hj'6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:142: ./drivers/dma-buf/dma-buf.c”h´MAhj$6h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j@ hj\5h²hh³ju5h´MAubeh}”(h]”h ]”(jîŒfunction”eh"]”h$]”h&]”ja jîjb j?6jc j?6jd ‰je ‰jf ‰uh1jÚh²hhjèh³Nh´Nubjh )�”}”(hXR**Parameters** ``struct dma_buf_attachment *attach`` the DMA-buf attachment to check **Description** Returns true if the DMA-buf importer can support the revoke sequence explained in dma_buf_invalidate_mappings() within bounded time. Meaning the importer implements invalidate_mappings() and ensures that unmap is called as a result.”h]”(hÌ)�”}”(hŒ**Parameters**”h]”jr )�”}”(hjI6h]”hŒ Parameters”…”�”}”(hjK6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hjG6ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:142: ./drivers/dma-buf/dma-buf.c”h´MEhjC6ubj´ )�”}”(hhh]”j¹ )�”}”(hŒF``struct dma_buf_attachment *attach`` the DMA-buf attachment to check ”h]”(j¿ )�”}”(hŒ%``struct dma_buf_attachment *attach``”h]”jâ)�”}”(hjh6h]”hŒ!struct dma_buf_attachment *attach”…”�”}”(hjj6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjf6ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:142: ./drivers/dma-buf/dma-buf.c”h´MChjb6ubjÙ )�”}”(hhh]”hÌ)�”}”(hŒthe DMA-buf attachment to check”h]”hŒthe DMA-buf attachment to check”…”�”}”(hj�6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j}6h´MChj~6ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hjb6ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³j}6h´MChj_6ubah}”(h]”h ]”h"]”h$]”h&]”uh1j³ hjC6ubhÌ)�”}”(hŒ**Description**”h]”jr )�”}”(hj£6h]”hŒ Description”…”�”}”(hj¥6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hj¡6ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:142: ./drivers/dma-buf/dma-buf.c”h´MEhjC6ubhÌ)�”}”(hŒèReturns true if the DMA-buf importer can support the revoke sequence explained in dma_buf_invalidate_mappings() within bounded time. Meaning the importer implements invalidate_mappings() and ensures that unmap is called as a result.”h]”hŒèReturns true if the DMA-buf importer can support the revoke sequence explained in dma_buf_invalidate_mappings() within bounded time. Meaning the importer implements invalidate_mappings() and ensures that unmap is called as a result.”…”�”}”(hj¹6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:142: ./drivers/dma-buf/dma-buf.c”h´MDhjC6ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jg hjèh²hh³Nh´NubjÉ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÕŒ(dma_buf_invalidate_mappings (C function)”Œc.dma_buf_invalidate_mappings”hNt”auh1jÈhjèh²hh³Nh´NubjÛ)�”}”(hhh]”(jà)�”}”(hŒ9void dma_buf_invalidate_mappings (struct dma_buf *dmabuf)”h]”jæ)�”}”(hŒ8void dma_buf_invalidate_mappings(struct dma_buf *dmabuf)”h]”(jM)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjè6h²hh³Nh´Nubah}”(h]”h ]”jYah"]”h$]”h&]”uh1jLhjä6h²hh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:142: ./drivers/dma-buf/dma-buf.c”h´MRubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj÷6h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjä6h²hh³jö6h´MRubj )�”}”(hŒdma_buf_invalidate_mappings”h]”j )�”}”(hŒdma_buf_invalidate_mappings”h]”hŒdma_buf_invalidate_mappings”…”�”}”(hj 7h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj7ubah}”(h]”h ]”(j' j( eh"]”h$]”h&]”j÷jøuh1j hjä6h²hh³jö6h´MRubjŒ)�”}”(hŒ(struct dma_buf *dmabuf)”h]”j’)�”}”(hŒstruct dma_buf *dmabuf”h]”(jì)�”}”(hjïh]”hŒstruct”…”�”}”(hj%7h²hh³Nh´Nubah}”(h]”h ]”jøah"]”h$]”h&]”uh1jëhj!7ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj27h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj!7ubh)�”}”(hhh]”j )�”}”(hŒdma_buf”h]”hŒdma_buf”…”�”}”(hjC7h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj@7ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jîŒreftype”jGŒ reftarget”jE7Œmodname”NŒ classname”Nj³j¶)�”}”j¹]”jO)�”}”jGj 7sbŒc.dma_buf_invalidate_mappings”†”asbuh1hhj!7ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjc7h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj!7ubjd)�”}”(hjgh]”hŒ*”…”�”}”(hjq7h²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchj!7ubj )�”}”(hŒdmabuf”h]”hŒdmabuf”…”�”}”(hj~7h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj!7ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj÷jøuh1j‘hj7ubah}”(h]”h ]”h"]”h$]”h&]”j÷jøuh1j‹hjä6h²hh³jö6h´MRubeh}”(h]”h ]”h"]”h$]”h&]”j÷jøj2 ˆuh1jåj3 j4 hjà6h²hh³jö6h´MRubah}”(h]”jÛ6ah ]”(j8 j9 eh"]”h$]”h&]”j= ˆj> )j? huh1jßh³jö6h´MRhjÝ6h²hubjA )�”}”(hhh]”hÌ)�”}”(hŒ)notify attachments that DMA-buf is moving”h]”hŒ)notify attachments that DMA-buf is moving”…”�”}”(hj¨7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:142: ./drivers/dma-buf/dma-buf.c”h´MRhj¥7h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j@ hjÝ6h²hh³jö6h´MRubeh}”(h]”h ]”(jîŒfunction”eh"]”h$]”h&]”ja jîjb jÀ7jc jÀ7jd ‰je ‰jf ‰uh1jÚh²hhjèh³Nh´Nubjh )�”}”(hXy**Parameters** ``struct dma_buf *dmabuf`` [in] buffer which is moving **Description** Informs all attachments that they need to destroy and recreate all their mappings. If the attachment is dynamic then the dynamic importer is expected to invalidate any caches it has of the mapping result and perform a new mapping request before allowing HW to do any further DMA. If the attachment is pinned then this informs the pinned importer that the underlying mapping is no longer available. Pinned importers may take this is as a permanent revocation and never establish new mappings so exporters should not trigger it lightly. Upon return importers may continue to access the DMA-buf memory. The caller must do two additional waits to ensure that the memory is no longer being accessed: 1) Until dma_resv_wait_timeout() retires fences the importer is allowed to fully access the memory. 2) Until the importer calls unmap it is allowed to speculatively read-and-discard the memory. It must not write to the memory. A caller wishing to use dma_buf_invalidate_mappings() to fully stop access to the DMA-buf must wait for both. Dynamic callers can often use just the first. All importers providing a invalidate_mappings() op must ensure that unmap is called within bounded time after the op. Pinned importers that do not support a invalidate_mappings() op will eventually perform unmap when they are done with the buffer, which may be an ubounded time from calling this function. dma_buf_attach_revocable() can be used to prevent such importers from attaching. Importers are free to request a new mapping in parallel as this function returns.”h]”(hÌ)�”}”(hŒ**Parameters**”h]”jr )�”}”(hjÊ7h]”hŒ Parameters”…”�”}”(hjÌ7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hjÈ7ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:142: ./drivers/dma-buf/dma-buf.c”h´MVhjÄ7ubj´ )�”}”(hhh]”j¹ )�”}”(hŒ:``struct dma_buf *dmabuf`` [in] buffer which is moving ”h]”(j¿ )�”}”(hŒ``struct dma_buf *dmabuf``”h]”jâ)�”}”(hjé7h]”hŒstruct dma_buf *dmabuf”…”�”}”(hjë7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjç7ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:142: ./drivers/dma-buf/dma-buf.c”h´MThjã7ubjÙ )�”}”(hhh]”hÌ)�”}”(hŒ[in] buffer which is moving”h]”hŒ[in] buffer which is moving”…”�”}”(hj8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jþ7h´MThjÿ7ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hjã7ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³jþ7h´MThjà7ubah}”(h]”h ]”h"]”h$]”h&]”uh1j³ hjÄ7ubhÌ)�”}”(hŒ**Description**”h]”jr )�”}”(hj$8h]”hŒ Description”…”�”}”(hj&8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hj"8ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:142: ./drivers/dma-buf/dma-buf.c”h´MVhjÄ7ubhÌ)�”}”(hXInforms all attachments that they need to destroy and recreate all their mappings. If the attachment is dynamic then the dynamic importer is expected to invalidate any caches it has of the mapping result and perform a new mapping request before allowing HW to do any further DMA.”h]”hXInforms all attachments that they need to destroy and recreate all their mappings. If the attachment is dynamic then the dynamic importer is expected to invalidate any caches it has of the mapping result and perform a new mapping request before allowing HW to do any further DMA.”…”�”}”(hj:8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:142: ./drivers/dma-buf/dma-buf.c”h´MUhjÄ7ubhÌ)�”}”(hŒþIf the attachment is pinned then this informs the pinned importer that the underlying mapping is no longer available. Pinned importers may take this is as a permanent revocation and never establish new mappings so exporters should not trigger it lightly.”h]”hŒþIf the attachment is pinned then this informs the pinned importer that the underlying mapping is no longer available. Pinned importers may take this is as a permanent revocation and never establish new mappings so exporters should not trigger it lightly.”…”�”}”(hjI8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:142: ./drivers/dma-buf/dma-buf.c”h´MZhjÄ7ubhÌ)�”}”(hŒŸUpon return importers may continue to access the DMA-buf memory. The caller must do two additional waits to ensure that the memory is no longer being accessed:”h]”hŒŸUpon return importers may continue to access the DMA-buf memory. The caller must do two additional waits to ensure that the memory is no longer being accessed:”…”�”}”(hjX8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:142: ./drivers/dma-buf/dma-buf.c”h´M_hjÄ7ubhø)�”}”(hŒé1) Until dma_resv_wait_timeout() retires fences the importer is allowed to fully access the memory. 2) Until the importer calls unmap it is allowed to speculatively read-and-discard the memory. It must not write to the memory. ”h]”jm)�”}”(hhh]”(j)�”}”(hŒ`Until dma_resv_wait_timeout() retires fences the importer is allowed to fully access the memory.”h]”hÌ)�”}”(hŒ`Until dma_resv_wait_timeout() retires fences the importer is allowed to fully access the memory.”h]”hŒ`Until dma_resv_wait_timeout() retires fences the importer is allowed to fully access the memory.”…”�”}”(hjr8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:142: ./drivers/dma-buf/dma-buf.c”h´Mchjn8ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjk8ubj)�”}”(hŒ|Until the importer calls unmap it is allowed to speculatively read-and-discard the memory. It must not write to the memory. ”h]”hÌ)�”}”(hŒ{Until the importer calls unmap it is allowed to speculatively read-and-discard the memory. It must not write to the memory.”h]”hŒ{Until the importer calls unmap it is allowed to speculatively read-and-discard the memory. It must not write to the memory.”…”�”}”(hj‹8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:142: ./drivers/dma-buf/dma-buf.c”h´Mehj‡8ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjk8ubeh}”(h]”h ]”h"]”h$]”h&]”jSjTjUhjVŒ)”uh1jlhjg8ubah}”(h]”h ]”h"]”h$]”h&]”uh1h÷h³j€8h´MchjÄ7ubhÌ)�”}”(hŒ›A caller wishing to use dma_buf_invalidate_mappings() to fully stop access to the DMA-buf must wait for both. Dynamic callers can often use just the first.”h]”hŒ›A caller wishing to use dma_buf_invalidate_mappings() to fully stop access to the DMA-buf must wait for both. Dynamic callers can often use just the first.”…”�”}”(hj­8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:142: ./drivers/dma-buf/dma-buf.c”h´MhhjÄ7ubhÌ)�”}”(hŒuAll importers providing a invalidate_mappings() op must ensure that unmap is called within bounded time after the op.”h]”hŒuAll importers providing a invalidate_mappings() op must ensure that unmap is called within bounded time after the op.”…”�”}”(hj¼8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:142: ./drivers/dma-buf/dma-buf.c”h´MkhjÄ7ubhÌ)�”}”(hX Pinned importers that do not support a invalidate_mappings() op will eventually perform unmap when they are done with the buffer, which may be an ubounded time from calling this function. dma_buf_attach_revocable() can be used to prevent such importers from attaching.”h]”hX Pinned importers that do not support a invalidate_mappings() op will eventually perform unmap when they are done with the buffer, which may be an ubounded time from calling this function. dma_buf_attach_revocable() can be used to prevent such importers from attaching.”…”�”}”(hjË8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:142: ./drivers/dma-buf/dma-buf.c”h´MnhjÄ7ubhÌ)�”}”(hŒQImporters are free to request a new mapping in parallel as this function returns.”h]”hŒQImporters are free to request a new mapping in parallel as this function returns.”…”�”}”(hjÚ8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:142: ./drivers/dma-buf/dma-buf.c”h´MshjÄ7ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jg hjèh²hh³Nh´NubjÉ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÕŒ%dma_buf_begin_cpu_access (C function)”Œc.dma_buf_begin_cpu_access”hNt”auh1jÈhjèh²hh³Nh´NubjÛ)�”}”(hhh]”(jà)�”}”(hŒXint dma_buf_begin_cpu_access (struct dma_buf *dmabuf, enum dma_data_direction direction)”h]”jæ)�”}”(hŒWint dma_buf_begin_cpu_access(struct dma_buf *dmabuf, enum dma_data_direction direction)”h]”(jM)�”}”(hŒint”h]”hŒint”…”�”}”(hj 9h²hh³Nh´Nubah}”(h]”h ]”jYah"]”h$]”h&]”uh1jLhj9h²hh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:142: ./drivers/dma-buf/dma-buf.c”h´Mîubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj9h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj9h²hh³j9h´Mîubj )�”}”(hŒdma_buf_begin_cpu_access”h]”j )�”}”(hŒdma_buf_begin_cpu_access”h]”hŒdma_buf_begin_cpu_access”…”�”}”(hj*9h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj&9ubah}”(h]”h ]”(j' j( eh"]”h$]”h&]”j÷jøuh1j hj9h²hh³j9h´MîubjŒ)�”}”(hŒ;(struct dma_buf *dmabuf, enum dma_data_direction direction)”h]”(j’)�”}”(hŒstruct dma_buf *dmabuf”h]”(jì)�”}”(hjïh]”hŒstruct”…”�”}”(hjF9h²hh³Nh´Nubah}”(h]”h ]”jøah"]”h$]”h&]”uh1jëhjB9ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjS9h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjB9ubh)�”}”(hhh]”j )�”}”(hŒdma_buf”h]”hŒdma_buf”…”�”}”(hjd9h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hja9ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jîŒreftype”jGŒ reftarget”jf9Œmodname”NŒ classname”Nj³j¶)�”}”j¹]”jO)�”}”jGj,9sbŒc.dma_buf_begin_cpu_access”†”asbuh1hhjB9ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj„9h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjB9ubjd)�”}”(hjgh]”hŒ*”…”�”}”(hj’9h²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchjB9ubj )�”}”(hŒdmabuf”h]”hŒdmabuf”…”�”}”(hjŸ9h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjB9ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj÷jøuh1j‘hj>9ubj’)�”}”(hŒ!enum dma_data_direction direction”h]”(jì)�”}”(hj×+h]”hŒenum”…”�”}”(hj¸9h²hh³Nh´Nubah}”(h]”h ]”jøah"]”h$]”h&]”uh1jëhj´9ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÅ9h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj´9ubh)�”}”(hhh]”j )�”}”(hŒdma_data_direction”h]”hŒdma_data_direction”…”�”}”(hjÖ9h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjÓ9ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jîŒreftype”jGŒ reftarget”jØ9Œmodname”NŒ classname”Nj³j¶)�”}”j¹]”j€9Œc.dma_buf_begin_cpu_access”†”asbuh1hhj´9ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjô9h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj´9ubj )�”}”(hŒ direction”h]”hŒ direction”…”�”}”(hj:h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj´9ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj÷jøuh1j‘hj>9ubeh}”(h]”h ]”h"]”h$]”h&]”j÷jøuh1j‹hj9h²hh³j9h´Mîubeh}”(h]”h ]”h"]”h$]”h&]”j÷jøj2 ˆuh1jåj3 j4 hj9h²hh³j9h´Mîubah}”(h]”jü8ah ]”(j8 j9 eh"]”h$]”h&]”j= ˆj> )j? huh1jßh³j9h´Mîhjþ8h²hubjA )�”}”(hhh]”hÌ)�”}”(hŒåMust be called before accessing a dma_buf from the cpu in the kernel context. Calls begin_cpu_access to allow exporter-specific preparations. Coherency is only guaranteed in the specified range for the specified access direction.”h]”hŒåMust be called before accessing a dma_buf from the cpu in the kernel context. Calls begin_cpu_access to allow exporter-specific preparations. Coherency is only guaranteed in the specified range for the specified access direction.”…”�”}”(hj,:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:142: ./drivers/dma-buf/dma-buf.c”h´Mîhj):h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j@ hjþ8h²hh³j9h´Mîubeh}”(h]”h ]”(jîŒfunction”eh"]”h$]”h&]”ja jîjb jD:jc jD:jd ‰je ‰jf ‰uh1jÚh²hhjèh³Nh´Nubjh )�”}”(hXÕ**Parameters** ``struct dma_buf *dmabuf`` [in] buffer to prepare cpu access for. ``enum dma_data_direction direction`` [in] direction of access. **Description** After the cpu access is complete the caller should call dma_buf_end_cpu_access(). Only when cpu access is bracketed by both calls is it guaranteed to be coherent with other DMA access. This function will also wait for any DMA transactions tracked through implicit synchronization in :c:type:`dma_buf.resv `. For DMA transactions with explicit synchronization this function will only ensure cache coherency, callers must ensure synchronization with such DMA transactions on their own. Can return negative error values, returns 0 on success.”h]”(hÌ)�”}”(hŒ**Parameters**”h]”jr )�”}”(hjN:h]”hŒ Parameters”…”�”}”(hjP:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hjL:ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:142: ./drivers/dma-buf/dma-buf.c”h´MòhjH:ubj´ )�”}”(hhh]”(j¹ )�”}”(hŒE``struct dma_buf *dmabuf`` [in] buffer to prepare cpu access for. ”h]”(j¿ )�”}”(hŒ``struct dma_buf *dmabuf``”h]”jâ)�”}”(hjm:h]”hŒstruct dma_buf *dmabuf”…”�”}”(hjo:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjk:ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:142: ./drivers/dma-buf/dma-buf.c”h´Mòhjg:ubjÙ )�”}”(hhh]”hÌ)�”}”(hŒ)[in] buffer to prepare cpu access for.”h]”hŒ)[in] buffer to prepare cpu access for.”…”�”}”(hj†:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j‚:h´Mòhjƒ:ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hjg:ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³j‚:h´Mòhjd:ubj¹ )�”}”(hŒC``enum dma_data_direction direction`` [in] direction of access. ”h]”(j¿ )�”}”(hŒ%``enum dma_data_direction direction``”h]”jâ)�”}”(hj¦:h]”hŒ!enum dma_data_direction direction”…”�”}”(hj¨:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj¤:ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:142: ./drivers/dma-buf/dma-buf.c”h´Móhj :ubjÙ )�”}”(hhh]”hÌ)�”}”(hŒ[in] direction of access.”h]”hŒ[in] direction of access.”…”�”}”(hj¿:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j»:h´Móhj¼:ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hj :ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³j»:h´Móhjd:ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j³ hjH:ubhÌ)�”}”(hŒ**Description**”h]”jr )�”}”(hjá:h]”hŒ Description”…”�”}”(hjã:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hjß:ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:142: ./drivers/dma-buf/dma-buf.c”h´MõhjH:ubhÌ)�”}”(hŒ¸After the cpu access is complete the caller should call dma_buf_end_cpu_access(). Only when cpu access is bracketed by both calls is it guaranteed to be coherent with other DMA access.”h]”hŒ¸After the cpu access is complete the caller should call dma_buf_end_cpu_access(). Only when cpu access is bracketed by both calls is it guaranteed to be coherent with other DMA access.”…”�”}”(hj÷:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:142: ./drivers/dma-buf/dma-buf.c”h´MôhjH:ubhÌ)�”}”(hX3This function will also wait for any DMA transactions tracked through implicit synchronization in :c:type:`dma_buf.resv `. For DMA transactions with explicit synchronization this function will only ensure cache coherency, callers must ensure synchronization with such DMA transactions on their own.”h]”(hŒbThis function will also wait for any DMA transactions tracked through implicit synchronization in ”…”�”}”(hj;h²hh³Nh´Nubh)�”}”(hŒ :c:type:`dma_buf.resv `”h]”jâ)�”}”(hj;h]”hŒ dma_buf.resv”…”�”}”(hj;h²hh³Nh´Nubah}”(h]”h ]”(jíjîŒc-type”eh"]”h$]”h&]”uh1jáhj;ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”júŒ refdomain”jîŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰j³j·jŒdma_buf”uh1hh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:142: ./drivers/dma-buf/dma-buf.c”h´Møhj;ubhŒ±. For DMA transactions with explicit synchronization this function will only ensure cache coherency, callers must ensure synchronization with such DMA transactions on their own.”…”�”}”(hj;h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j-;h´MøhjH:ubhÌ)�”}”(hŒ7Can return negative error values, returns 0 on success.”h]”hŒ7Can return negative error values, returns 0 on success.”…”�”}”(hj8;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:142: ./drivers/dma-buf/dma-buf.c”h´MýhjH:ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jg hjèh²hh³Nh´NubjÉ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÕŒ#dma_buf_end_cpu_access (C function)”Œc.dma_buf_end_cpu_access”hNt”auh1jÈhjèh²hh³Nh´NubjÛ)�”}”(hhh]”(jà)�”}”(hŒVint dma_buf_end_cpu_access (struct dma_buf *dmabuf, enum dma_data_direction direction)”h]”jæ)�”}”(hŒUint dma_buf_end_cpu_access(struct dma_buf *dmabuf, enum dma_data_direction direction)”h]”(jM)�”}”(hŒint”h]”hŒint”…”�”}”(hjg;h²hh³Nh´Nubah}”(h]”h ]”jYah"]”h$]”h&]”uh1jLhjc;h²hh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:142: ./drivers/dma-buf/dma-buf.c”h´Mubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjv;h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjc;h²hh³ju;h´Mubj )�”}”(hŒdma_buf_end_cpu_access”h]”j )�”}”(hŒdma_buf_end_cpu_access”h]”hŒdma_buf_end_cpu_access”…”�”}”(hjˆ;h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj„;ubah}”(h]”h ]”(j' j( eh"]”h$]”h&]”j÷jøuh1j hjc;h²hh³ju;h´MubjŒ)�”}”(hŒ;(struct dma_buf *dmabuf, enum dma_data_direction direction)”h]”(j’)�”}”(hŒstruct dma_buf *dmabuf”h]”(jì)�”}”(hjïh]”hŒstruct”…”�”}”(hj¤;h²hh³Nh´Nubah}”(h]”h ]”jøah"]”h$]”h&]”uh1jëhj ;ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj±;h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj ;ubh)�”}”(hhh]”j )�”}”(hŒdma_buf”h]”hŒdma_buf”…”�”}”(hjÂ;h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj¿;ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jîŒreftype”jGŒ reftarget”jÄ;Œmodname”NŒ classname”Nj³j¶)�”}”j¹]”jO)�”}”jGjŠ;sbŒc.dma_buf_end_cpu_access”†”asbuh1hhj ;ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjâ;h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj ;ubjd)�”}”(hjgh]”hŒ*”…”�”}”(hjð;h²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchj ;ubj )�”}”(hŒdmabuf”h]”hŒdmabuf”…”�”}”(hjý;h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj ;ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj÷jøuh1j‘hjœ;ubj’)�”}”(hŒ!enum dma_data_direction direction”h]”(jì)�”}”(hj×+h]”hŒenum”…”�”}”(hj<h²hh³Nh´Nubah}”(h]”h ]”jøah"]”h$]”h&]”uh1jëhj<ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj#<h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj<ubh)�”}”(hhh]”j )�”}”(hŒdma_data_direction”h]”hŒdma_data_direction”…”�”}”(hj4<h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj1<ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jîŒreftype”jGŒ reftarget”j6<Œmodname”NŒ classname”Nj³j¶)�”}”j¹]”jÞ;Œc.dma_buf_end_cpu_access”†”asbuh1hhj<ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjR<h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj<ubj )�”}”(hŒ direction”h]”hŒ direction”…”�”}”(hj`<h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj<ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj÷jøuh1j‘hjœ;ubeh}”(h]”h ]”h"]”h$]”h&]”j÷jøuh1j‹hjc;h²hh³ju;h´Mubeh}”(h]”h ]”h"]”h$]”h&]”j÷jøj2 ˆuh1jåj3 j4 hj_;h²hh³ju;h´Mubah}”(h]”jZ;ah ]”(j8 j9 eh"]”h$]”h&]”j= ˆj> )j? huh1jßh³ju;h´Mhj\;h²hubjA )�”}”(hhh]”hÌ)�”}”(hŒÝMust be called after accessing a dma_buf from the cpu in the kernel context. Calls end_cpu_access to allow exporter-specific actions. Coherency is only guaranteed in the specified range for the specified access direction.”h]”hŒÝMust be called after accessing a dma_buf from the cpu in the kernel context. Calls end_cpu_access to allow exporter-specific actions. Coherency is only guaranteed in the specified range for the specified access direction.”…”�”}”(hjŠ<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:142: ./drivers/dma-buf/dma-buf.c”h´Mhj‡<h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j@ hj\;h²hh³ju;h´Mubeh}”(h]”h ]”(jîŒfunction”eh"]”h$]”h&]”ja jîjb j¢<jc j¢<jd ‰je ‰jf ‰uh1jÚh²hhjèh³Nh´Nubjh )�”}”(hX,**Parameters** ``struct dma_buf *dmabuf`` [in] buffer to complete cpu access for. ``enum dma_data_direction direction`` [in] direction of access. **Description** This terminates CPU access started with dma_buf_begin_cpu_access(). Can return negative error values, returns 0 on success.”h]”(hÌ)�”}”(hŒ**Parameters**”h]”jr )�”}”(hj¬<h]”hŒ Parameters”…”�”}”(hj®<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hjª<ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:142: ./drivers/dma-buf/dma-buf.c”h´Mhj¦<ubj´ )�”}”(hhh]”(j¹ )�”}”(hŒF``struct dma_buf *dmabuf`` [in] buffer to complete cpu access for. ”h]”(j¿ )�”}”(hŒ``struct dma_buf *dmabuf``”h]”jâ)�”}”(hjË<h]”hŒstruct dma_buf *dmabuf”…”�”}”(hjÍ<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjÉ<ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:142: ./drivers/dma-buf/dma-buf.c”h´MhjÅ<ubjÙ )�”}”(hhh]”hÌ)�”}”(hŒ*[in] buffer to complete cpu access for.”h]”hŒ*[in] buffer to complete cpu access for.”…”�”}”(hjä<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jà<h´Mhjá<ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hjÅ<ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³jà<h´MhjÂ<ubj¹ )�”}”(hŒC``enum dma_data_direction direction`` [in] direction of access. ”h]”(j¿ )�”}”(hŒ%``enum dma_data_direction direction``”h]”jâ)�”}”(hj=h]”hŒ!enum dma_data_direction direction”…”�”}”(hj=h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj=ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:142: ./drivers/dma-buf/dma-buf.c”h´Mhjþ<ubjÙ )�”}”(hhh]”hÌ)�”}”(hŒ[in] direction of access.”h]”hŒ[in] direction of access.”…”�”}”(hj=h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j=h´Mhj=ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hjþ<ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³j=h´MhjÂ<ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j³ hj¦<ubhÌ)�”}”(hŒ**Description**”h]”jr )�”}”(hj?=h]”hŒ Description”…”�”}”(hjA=h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hj==ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:142: ./drivers/dma-buf/dma-buf.c”h´M hj¦<ubhÌ)�”}”(hŒCThis terminates CPU access started with dma_buf_begin_cpu_access().”h]”hŒCThis terminates CPU access started with dma_buf_begin_cpu_access().”…”�”}”(hjU=h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:142: ./drivers/dma-buf/dma-buf.c”h´Mhj¦<ubhÌ)�”}”(hŒ7Can return negative error values, returns 0 on success.”h]”hŒ7Can return negative error values, returns 0 on success.”…”�”}”(hjd=h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:142: ./drivers/dma-buf/dma-buf.c”h´M!hj¦<ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jg hjèh²hh³Nh´NubjÉ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÕŒdma_buf_mmap (C function)”Œc.dma_buf_mmap”hNt”auh1jÈhjèh²hh³Nh´NubjÛ)�”}”(hhh]”(jà)�”}”(hŒZint dma_buf_mmap (struct dma_buf *dmabuf, struct vm_area_struct *vma, unsigned long pgoff)”h]”jæ)�”}”(hŒYint dma_buf_mmap(struct dma_buf *dmabuf, struct vm_area_struct *vma, unsigned long pgoff)”h]”(jM)�”}”(hŒint”h]”hŒint”…”�”}”(hj“=h²hh³Nh´Nubah}”(h]”h ]”jYah"]”h$]”h&]”uh1jLhj�=h²hh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:142: ./drivers/dma-buf/dma-buf.c”h´M6ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¢=h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj�=h²hh³j¡=h´M6ubj )�”}”(hŒ dma_buf_mmap”h]”j )�”}”(hŒ dma_buf_mmap”h]”hŒ dma_buf_mmap”…”�”}”(hj´=h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj°=ubah}”(h]”h ]”(j' j( eh"]”h$]”h&]”j÷jøuh1j hj�=h²hh³j¡=h´M6ubjŒ)�”}”(hŒI(struct dma_buf *dmabuf, struct vm_area_struct *vma, unsigned long pgoff)”h]”(j’)�”}”(hŒstruct dma_buf *dmabuf”h]”(jì)�”}”(hjïh]”hŒstruct”…”�”}”(hjÐ=h²hh³Nh´Nubah}”(h]”h ]”jøah"]”h$]”h&]”uh1jëhjÌ=ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÝ=h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjÌ=ubh)�”}”(hhh]”j )�”}”(hŒdma_buf”h]”hŒdma_buf”…”�”}”(hjî=h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjë=ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jîŒreftype”jGŒ reftarget”jð=Œmodname”NŒ classname”Nj³j¶)�”}”j¹]”jO)�”}”jGj¶=sbŒc.dma_buf_mmap”†”asbuh1hhjÌ=ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj>h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjÌ=ubjd)�”}”(hjgh]”hŒ*”…”�”}”(hj>h²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchjÌ=ubj )�”}”(hŒdmabuf”h]”hŒdmabuf”…”�”}”(hj)>h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjÌ=ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj÷jøuh1j‘hjÈ=ubj’)�”}”(hŒstruct vm_area_struct *vma”h]”(jì)�”}”(hjïh]”hŒstruct”…”�”}”(hjB>h²hh³Nh´Nubah}”(h]”h ]”jøah"]”h$]”h&]”uh1jëhj>>ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjO>h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj>>ubh)�”}”(hhh]”j )�”}”(hŒvm_area_struct”h]”hŒvm_area_struct”…”�”}”(hj`>h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj]>ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jîŒreftype”jGŒ reftarget”jb>Œmodname”NŒ classname”Nj³j¶)�”}”j¹]”j >Œc.dma_buf_mmap”†”asbuh1hhj>>ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj~>h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj>>ubjd)�”}”(hjgh]”hŒ*”…”�”}”(hjŒ>h²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchj>>ubj )�”}”(hŒvma”h]”hŒvma”…”�”}”(hj™>h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj>>ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj÷jøuh1j‘hjÈ=ubj’)�”}”(hŒunsigned long pgoff”h]”(jM)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj²>h²hh³Nh´Nubah}”(h]”h ]”jYah"]”h$]”h&]”uh1jLhj®>ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÀ>h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj®>ubjM)�”}”(hŒlong”h]”hŒlong”…”�”}”(hjÎ>h²hh³Nh´Nubah}”(h]”h ]”jYah"]”h$]”h&]”uh1jLhj®>ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÜ>h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj®>ubj )�”}”(hŒpgoff”h]”hŒpgoff”…”�”}”(hjê>h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj®>ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj÷jøuh1j‘hjÈ=ubeh}”(h]”h ]”h"]”h$]”h&]”j÷jøuh1j‹hj�=h²hh³j¡=h´M6ubeh}”(h]”h ]”h"]”h$]”h&]”j÷jøj2 ˆuh1jåj3 j4 hj‹=h²hh³j¡=h´M6ubah}”(h]”j†=ah ]”(j8 j9 eh"]”h$]”h&]”j= ˆj> )j? huh1jßh³j¡=h´M6hjˆ=h²hubjA )�”}”(hhh]”hÌ)�”}”(hŒ,Setup up a userspace mmap with the given vma”h]”hŒ,Setup up a userspace mmap with the given vma”…”�”}”(hj?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:142: ./drivers/dma-buf/dma-buf.c”h´M6hj?h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j@ hjˆ=h²hh³j¡=h´M6ubeh}”(h]”h ]”(jîŒfunction”eh"]”h$]”h&]”ja jîjb j,?jc j,?jd ‰je ‰jf ‰uh1jÚh²hhjèh³Nh´Nubjh )�”}”(hX<**Parameters** ``struct dma_buf *dmabuf`` [in] buffer that should back the vma ``struct vm_area_struct *vma`` [in] vma for the mmap ``unsigned long pgoff`` [in] offset in pages where this mmap should start within the dma-buf buffer. **Description** This function adjusts the passed in vma so that it points at the file of the dma_buf operation. It also adjusts the starting pgoff and does bounds checking on the size of the vma. Then it calls the exporters mmap function to set up the mapping. Can return negative error values, returns 0 on success.”h]”(hÌ)�”}”(hŒ**Parameters**”h]”jr )�”}”(hj6?h]”hŒ Parameters”…”�”}”(hj8?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hj4?ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:142: ./drivers/dma-buf/dma-buf.c”h´M:hj0?ubj´ )�”}”(hhh]”(j¹ )�”}”(hŒC``struct dma_buf *dmabuf`` [in] buffer that should back the vma ”h]”(j¿ )�”}”(hŒ``struct dma_buf *dmabuf``”h]”jâ)�”}”(hjU?h]”hŒstruct dma_buf *dmabuf”…”�”}”(hjW?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjS?ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:142: ./drivers/dma-buf/dma-buf.c”h´M7hjO?ubjÙ )�”}”(hhh]”hÌ)�”}”(hŒ'[in] buffer that should back the vma”h]”hŒ'[in] buffer that should back the vma”…”�”}”(hjn?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jj?h´M7hjk?ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hjO?ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³jj?h´M7hjL?ubj¹ )�”}”(hŒ8``struct vm_area_struct *vma`` [in] vma for the mmap ”h]”(j¿ )�”}”(hŒ``struct vm_area_struct *vma``”h]”jâ)�”}”(hjŽ?h]”hŒstruct vm_area_struct *vma”…”�”}”(hj�?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjŒ?ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:142: ./drivers/dma-buf/dma-buf.c”h´M8hjˆ?ubjÙ )�”}”(hhh]”hÌ)�”}”(hŒ[in] vma for the mmap”h]”hŒ[in] vma for the mmap”…”�”}”(hj§?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j£?h´M8hj¤?ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hjˆ?ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³j£?h´M8hjL?ubj¹ )�”}”(hŒh``unsigned long pgoff`` [in] offset in pages where this mmap should start within the dma-buf buffer. ”h]”(j¿ )�”}”(hŒ``unsigned long pgoff``”h]”jâ)�”}”(hjÇ?h]”hŒunsigned long pgoff”…”�”}”(hjÉ?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjÅ?ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:142: ./drivers/dma-buf/dma-buf.c”h´M:hjÁ?ubjÙ )�”}”(hhh]”hÌ)�”}”(hŒO[in] offset in pages where this mmap should start within the dma-buf buffer.”h]”hŒO[in] offset in pages where this mmap should start within the dma-buf buffer.”…”�”}”(hjà?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:142: ./drivers/dma-buf/dma-buf.c”h´M9hjÝ?ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hjÁ?ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³jÜ?h´M:hjL?ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j³ hj0?ubhÌ)�”}”(hŒ**Description**”h]”jr )�”}”(hj@h]”hŒ Description”…”�”}”(hj@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hj@ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:142: ./drivers/dma-buf/dma-buf.c”h´M<hj0?ubhÌ)�”}”(hŒôThis function adjusts the passed in vma so that it points at the file of the dma_buf operation. It also adjusts the starting pgoff and does bounds checking on the size of the vma. Then it calls the exporters mmap function to set up the mapping.”h]”hŒôThis function adjusts the passed in vma so that it points at the file of the dma_buf operation. It also adjusts the starting pgoff and does bounds checking on the size of the vma. Then it calls the exporters mmap function to set up the mapping.”…”�”}”(hj@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:142: ./drivers/dma-buf/dma-buf.c”h´M;hj0?ubhÌ)�”}”(hŒ7Can return negative error values, returns 0 on success.”h]”hŒ7Can return negative error values, returns 0 on success.”…”�”}”(hj(@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:142: ./drivers/dma-buf/dma-buf.c”h´M@hj0?ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jg hjèh²hh³Nh´NubjÉ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÕŒdma_buf_vmap (C function)”Œc.dma_buf_vmap”hNt”auh1jÈhjèh²hh³Nh´NubjÛ)�”}”(hhh]”(jà)�”}”(hŒ@int dma_buf_vmap (struct dma_buf *dmabuf, struct iosys_map *map)”h]”jæ)�”}”(hŒ?int dma_buf_vmap(struct dma_buf *dmabuf, struct iosys_map *map)”h]”(jM)�”}”(hŒint”h]”hŒint”…”�”}”(hjW@h²hh³Nh´Nubah}”(h]”h ]”jYah"]”h$]”h&]”uh1jLhjS@h²hh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:142: ./drivers/dma-buf/dma-buf.c”h´Maubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjf@h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjS@h²hh³je@h´Maubj )�”}”(hŒ dma_buf_vmap”h]”j )�”}”(hŒ dma_buf_vmap”h]”hŒ dma_buf_vmap”…”�”}”(hjx@h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjt@ubah}”(h]”h ]”(j' j( eh"]”h$]”h&]”j÷jøuh1j hjS@h²hh³je@h´MaubjŒ)�”}”(hŒ/(struct dma_buf *dmabuf, struct iosys_map *map)”h]”(j’)�”}”(hŒstruct dma_buf *dmabuf”h]”(jì)�”}”(hjïh]”hŒstruct”…”�”}”(hj”@h²hh³Nh´Nubah}”(h]”h ]”jøah"]”h$]”h&]”uh1jëhj�@ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¡@h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj�@ubh)�”}”(hhh]”j )�”}”(hŒdma_buf”h]”hŒdma_buf”…”�”}”(hj²@h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj¯@ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jîŒreftype”jGŒ reftarget”j´@Œmodname”NŒ classname”Nj³j¶)�”}”j¹]”jO)�”}”jGjz@sbŒc.dma_buf_vmap”†”asbuh1hhj�@ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÒ@h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj�@ubjd)�”}”(hjgh]”hŒ*”…”�”}”(hjà@h²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchj�@ubj )�”}”(hŒdmabuf”h]”hŒdmabuf”…”�”}”(hjí@h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj�@ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj÷jøuh1j‘hjŒ@ubj’)�”}”(hŒstruct iosys_map *map”h]”(jì)�”}”(hjïh]”hŒstruct”…”�”}”(hjAh²hh³Nh´Nubah}”(h]”h ]”jøah"]”h$]”h&]”uh1jëhjAubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjAh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjAubh)�”}”(hhh]”j )�”}”(hŒ iosys_map”h]”hŒ iosys_map”…”�”}”(hj$Ah²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj!Aubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jîŒreftype”jGŒ reftarget”j&AŒmodname”NŒ classname”Nj³j¶)�”}”j¹]”jÎ@Œc.dma_buf_vmap”†”asbuh1hhjAubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjBAh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjAubjd)�”}”(hjgh]”hŒ*”…”�”}”(hjPAh²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchjAubj )�”}”(hŒmap”h]”hŒmap”…”�”}”(hj]Ah²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjAubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj÷jøuh1j‘hjŒ@ubeh}”(h]”h ]”h"]”h$]”h&]”j÷jøuh1j‹hjS@h²hh³je@h´Maubeh}”(h]”h ]”h"]”h$]”h&]”j÷jøj2 ˆuh1jåj3 j4 hjO@h²hh³je@h´Maubah}”(h]”jJ@ah ]”(j8 j9 eh"]”h$]”h&]”j= ˆj> )j? huh1jßh³je@h´MahjL@h²hubjA )�”}”(hhh]”hÌ)�”}”(hŒxCreate virtual mapping for the buffer object into kernel address space. Same restrictions as for vmap and friends apply.”h]”hŒxCreate virtual mapping for the buffer object into kernel address space. Same restrictions as for vmap and friends apply.”…”�”}”(hj‡Ah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:142: ./drivers/dma-buf/dma-buf.c”h´Mahj„Ah²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j@ hjL@h²hh³je@h´Maubeh}”(h]”h ]”(jîŒfunction”eh"]”h$]”h&]”ja jîjb jŸAjc jŸAjd ‰je ‰jf ‰uh1jÚh²hhjèh³Nh´Nubjh )�”}”(hX%**Parameters** ``struct dma_buf *dmabuf`` [in] buffer to vmap ``struct iosys_map *map`` [out] returns the vmap pointer **Description** This call may fail due to lack of virtual mapping address space. These calls are optional in drivers. The intended use for them is for mapping objects linear in kernel space for high use objects. To ensure coherency users must call dma_buf_begin_cpu_access() and dma_buf_end_cpu_access() around any cpu access performed through this mapping. Returns 0 on success, or a negative errno code otherwise.”h]”(hÌ)�”}”(hŒ**Parameters**”h]”jr )�”}”(hj©Ah]”hŒ Parameters”…”�”}”(hj«Ah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hj§Aubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:142: ./drivers/dma-buf/dma-buf.c”h´Mehj£Aubj´ )�”}”(hhh]”(j¹ )�”}”(hŒ2``struct dma_buf *dmabuf`` [in] buffer to vmap ”h]”(j¿ )�”}”(hŒ``struct dma_buf *dmabuf``”h]”jâ)�”}”(hjÈAh]”hŒstruct dma_buf *dmabuf”…”�”}”(hjÊAh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjÆAubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:142: ./drivers/dma-buf/dma-buf.c”h´MchjÂAubjÙ )�”}”(hhh]”hÌ)�”}”(hŒ[in] buffer to vmap”h]”hŒ[in] buffer to vmap”…”�”}”(hjáAh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jÝAh´MchjÞAubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hjÂAubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³jÝAh´Mchj¿Aubj¹ )�”}”(hŒ;``struct iosys_map *map`` [out] returns the vmap pointer ”h]”(j¿ )�”}”(hŒ``struct iosys_map *map``”h]”jâ)�”}”(hjBh]”hŒstruct iosys_map *map”…”�”}”(hjBh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjÿAubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:142: ./drivers/dma-buf/dma-buf.c”h´MdhjûAubjÙ )�”}”(hhh]”hÌ)�”}”(hŒ [out] returns the vmap pointer”h]”hŒ [out] returns the vmap pointer”…”�”}”(hjBh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jBh´MdhjBubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hjûAubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³jBh´Mdhj¿Aubeh}”(h]”h ]”h"]”h$]”h&]”uh1j³ hj£AubhÌ)�”}”(hŒ**Description**”h]”jr )�”}”(hjBh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hj:Bubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:142: ./drivers/dma-buf/dma-buf.c”h´Mfhj£AubhÌ)�”}”(hŒÃThis call may fail due to lack of virtual mapping address space. These calls are optional in drivers. The intended use for them is for mapping objects linear in kernel space for high use objects.”h]”hŒÃThis call may fail due to lack of virtual mapping address space. These calls are optional in drivers. The intended use for them is for mapping objects linear in kernel space for high use objects.”…”�”}”(hjRBh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:142: ./drivers/dma-buf/dma-buf.c”h´Mehj£AubhÌ)�”}”(hŒ‘To ensure coherency users must call dma_buf_begin_cpu_access() and dma_buf_end_cpu_access() around any cpu access performed through this mapping.”h]”hŒ‘To ensure coherency users must call dma_buf_begin_cpu_access() and dma_buf_end_cpu_access() around any cpu access performed through this mapping.”…”�”}”(hjaBh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:142: ./drivers/dma-buf/dma-buf.c”h´Mihj£AubhÌ)�”}”(hŒ9Returns 0 on success, or a negative errno code otherwise.”h]”hŒ9Returns 0 on success, or a negative errno code otherwise.”…”�”}”(hjpBh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:142: ./drivers/dma-buf/dma-buf.c”h´Mmhj£Aubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jg hjèh²hh³Nh´NubjÉ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÕŒ"dma_buf_vmap_unlocked (C function)”Œc.dma_buf_vmap_unlocked”hNt”auh1jÈhjèh²hh³Nh´NubjÛ)�”}”(hhh]”(jà)�”}”(hŒIint dma_buf_vmap_unlocked (struct dma_buf *dmabuf, struct iosys_map *map)”h]”jæ)�”}”(hŒHint dma_buf_vmap_unlocked(struct dma_buf *dmabuf, struct iosys_map *map)”h]”(jM)�”}”(hŒint”h]”hŒint”…”�”}”(hjŸBh²hh³Nh´Nubah}”(h]”h ]”jYah"]”h$]”h&]”uh1jLhj›Bh²hh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:142: ./drivers/dma-buf/dma-buf.c”h´M–ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj®Bh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj›Bh²hh³j­Bh´M–ubj )�”}”(hŒdma_buf_vmap_unlocked”h]”j )�”}”(hŒdma_buf_vmap_unlocked”h]”hŒdma_buf_vmap_unlocked”…”�”}”(hjÀBh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj¼Bubah}”(h]”h ]”(j' j( eh"]”h$]”h&]”j÷jøuh1j hj›Bh²hh³j­Bh´M–ubjŒ)�”}”(hŒ/(struct dma_buf *dmabuf, struct iosys_map *map)”h]”(j’)�”}”(hŒstruct dma_buf *dmabuf”h]”(jì)�”}”(hjïh]”hŒstruct”…”�”}”(hjÜBh²hh³Nh´Nubah}”(h]”h ]”jøah"]”h$]”h&]”uh1jëhjØBubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjéBh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjØBubh)�”}”(hhh]”j )�”}”(hŒdma_buf”h]”hŒdma_buf”…”�”}”(hjúBh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj÷Bubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jîŒreftype”jGŒ reftarget”jüBŒmodname”NŒ classname”Nj³j¶)�”}”j¹]”jO)�”}”jGjÂBsbŒc.dma_buf_vmap_unlocked”†”asbuh1hhjØBubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjCh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjØBubjd)�”}”(hjgh]”hŒ*”…”�”}”(hj(Ch²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchjØBubj )�”}”(hŒdmabuf”h]”hŒdmabuf”…”�”}”(hj5Ch²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjØBubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj÷jøuh1j‘hjÔBubj’)�”}”(hŒstruct iosys_map *map”h]”(jì)�”}”(hjïh]”hŒstruct”…”�”}”(hjNCh²hh³Nh´Nubah}”(h]”h ]”jøah"]”h$]”h&]”uh1jëhjJCubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj[Ch²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjJCubh)�”}”(hhh]”j )�”}”(hŒ iosys_map”h]”hŒ iosys_map”…”�”}”(hjlCh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjiCubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jîŒreftype”jGŒ reftarget”jnCŒmodname”NŒ classname”Nj³j¶)�”}”j¹]”jCŒc.dma_buf_vmap_unlocked”†”asbuh1hhjJCubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŠCh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjJCubjd)�”}”(hjgh]”hŒ*”…”�”}”(hj˜Ch²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchjJCubj )�”}”(hŒmap”h]”hŒmap”…”�”}”(hj¥Ch²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjJCubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj÷jøuh1j‘hjÔBubeh}”(h]”h ]”h"]”h$]”h&]”j÷jøuh1j‹hj›Bh²hh³j­Bh´M–ubeh}”(h]”h ]”•Xh"]”h$]”h&]”j÷jøj2 ˆuh1jåj3 j4 hj—Bh²hh³j­Bh´M–ubah}”(h]”j’Bah ]”(j8 j9 eh"]”h$]”h&]”j= ˆj> )j? huh1jßh³j­Bh´M–hj”Bh²hubjA )�”}”(hhh]”hÌ)�”}”(hŒxCreate virtual mapping for the buffer object into kernel address space. Same restrictions as for vmap and friends apply.”h]”hŒxCreate virtual mapping for the buffer object into kernel address space. Same restrictions as for vmap and friends apply.”…”�”}”(hjÏCh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:142: ./drivers/dma-buf/dma-buf.c”h´M–hjÌCh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j@ hj”Bh²hh³j­Bh´M–ubeh}”(h]”h ]”(jîŒfunction”eh"]”h$]”h&]”ja jîjb jçCjc jçCjd ‰je ‰jf ‰uh1jÚh²hhjèh³Nh´Nubjh )�”}”(hŒñ**Parameters** ``struct dma_buf *dmabuf`` [in] buffer to vmap ``struct iosys_map *map`` [out] returns the vmap pointer **Description** Unlocked version of dma_buf_vmap() Returns 0 on success, or a negative errno code otherwise.”h]”(hÌ)�”}”(hŒ**Parameters**”h]”jr )�”}”(hjñCh]”hŒ Parameters”…”�”}”(hjóCh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hjïCubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:142: ./drivers/dma-buf/dma-buf.c”h´MšhjëCubj´ )�”}”(hhh]”(j¹ )�”}”(hŒ2``struct dma_buf *dmabuf`` [in] buffer to vmap ”h]”(j¿ )�”}”(hŒ``struct dma_buf *dmabuf``”h]”jâ)�”}”(hjDh]”hŒstruct dma_buf *dmabuf”…”�”}”(hjDh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjDubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:142: ./drivers/dma-buf/dma-buf.c”h´M˜hj DubjÙ )�”}”(hhh]”hÌ)�”}”(hŒ[in] buffer to vmap”h]”hŒ[in] buffer to vmap”…”�”}”(hj)Dh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j%Dh´M˜hj&Dubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hj Dubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³j%Dh´M˜hjDubj¹ )�”}”(hŒ;``struct iosys_map *map`` [out] returns the vmap pointer ”h]”(j¿ )�”}”(hŒ``struct iosys_map *map``”h]”jâ)�”}”(hjIDh]”hŒstruct iosys_map *map”…”�”}”(hjKDh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjGDubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:142: ./drivers/dma-buf/dma-buf.c”h´M™hjCDubjÙ )�”}”(hhh]”hÌ)�”}”(hŒ [out] returns the vmap pointer”h]”hŒ [out] returns the vmap pointer”…”�”}”(hjbDh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j^Dh´M™hj_Dubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hjCDubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³j^Dh´M™hjDubeh}”(h]”h ]”h"]”h$]”h&]”uh1j³ hjëCubhÌ)�”}”(hŒ**Description**”h]”jr )�”}”(hj„Dh]”hŒ Description”…”�”}”(hj†Dh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hj‚Dubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:142: ./drivers/dma-buf/dma-buf.c”h´M›hjëCubhÌ)�”}”(hŒ"Unlocked version of dma_buf_vmap()”h]”hŒ"Unlocked version of dma_buf_vmap()”…”�”}”(hjšDh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:142: ./drivers/dma-buf/dma-buf.c”h´MšhjëCubhÌ)�”}”(hŒ9Returns 0 on success, or a negative errno code otherwise.”h]”hŒ9Returns 0 on success, or a negative errno code otherwise.”…”�”}”(hj©Dh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:142: ./drivers/dma-buf/dma-buf.c”h´MœhjëCubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jg hjèh²hh³Nh´NubjÉ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÕŒdma_buf_vunmap (C function)”Œc.dma_buf_vunmap”hNt”auh1jÈhjèh²hh³Nh´NubjÛ)�”}”(hhh]”(jà)�”}”(hŒCvoid dma_buf_vunmap (struct dma_buf *dmabuf, struct iosys_map *map)”h]”jæ)�”}”(hŒBvoid dma_buf_vunmap(struct dma_buf *dmabuf, struct iosys_map *map)”h]”(jM)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjØDh²hh³Nh´Nubah}”(h]”h ]”jYah"]”h$]”h&]”uh1jLhjÔDh²hh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:142: ./drivers/dma-buf/dma-buf.c”h´M±ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjçDh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjÔDh²hh³jæDh´M±ubj )�”}”(hŒdma_buf_vunmap”h]”j )�”}”(hŒdma_buf_vunmap”h]”hŒdma_buf_vunmap”…”�”}”(hjùDh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjõDubah}”(h]”h ]”(j' j( eh"]”h$]”h&]”j÷jøuh1j hjÔDh²hh³jæDh´M±ubjŒ)�”}”(hŒ/(struct dma_buf *dmabuf, struct iosys_map *map)”h]”(j’)�”}”(hŒstruct dma_buf *dmabuf”h]”(jì)�”}”(hjïh]”hŒstruct”…”�”}”(hjEh²hh³Nh´Nubah}”(h]”h ]”jøah"]”h$]”h&]”uh1jëhjEubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj"Eh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjEubh)�”}”(hhh]”j )�”}”(hŒdma_buf”h]”hŒdma_buf”…”�”}”(hj3Eh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj0Eubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jîŒreftype”jGŒ reftarget”j5EŒmodname”NŒ classname”Nj³j¶)�”}”j¹]”jO)�”}”jGjûDsbŒc.dma_buf_vunmap”†”asbuh1hhjEubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjSEh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjEubjd)�”}”(hjgh]”hŒ*”…”�”}”(hjaEh²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchjEubj )�”}”(hŒdmabuf”h]”hŒdmabuf”…”�”}”(hjnEh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjEubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj÷jøuh1j‘hj Eubj’)�”}”(hŒstruct iosys_map *map”h]”(jì)�”}”(hjïh]”hŒstruct”…”�”}”(hj‡Eh²hh³Nh´Nubah}”(h]”h ]”jøah"]”h$]”h&]”uh1jëhjƒEubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj”Eh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjƒEubh)�”}”(hhh]”j )�”}”(hŒ iosys_map”h]”hŒ iosys_map”…”�”}”(hj¥Eh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj¢Eubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jîŒreftype”jGŒ reftarget”j§EŒmodname”NŒ classname”Nj³j¶)�”}”j¹]”jOEŒc.dma_buf_vunmap”†”asbuh1hhjƒEubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÃEh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjƒEubjd)�”}”(hjgh]”hŒ*”…”�”}”(hjÑEh²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchjƒEubj )�”}”(hŒmap”h]”hŒmap”…”�”}”(hjÞEh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjƒEubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj÷jøuh1j‘hj Eubeh}”(h]”h ]”h"]”h$]”h&]”j÷jøuh1j‹hjÔDh²hh³jæDh´M±ubeh}”(h]”h ]”h"]”h$]”h&]”j÷jøj2 ˆuh1jåj3 j4 hjÐDh²hh³jæDh´M±ubah}”(h]”jËDah ]”(j8 j9 eh"]”h$]”h&]”j= ˆj> )j? huh1jßh³jæDh´M±hjÍDh²hubjA )�”}”(hhh]”hÌ)�”}”(hŒ&Unmap a vmap obtained by dma_buf_vmap.”h]”hŒ&Unmap a vmap obtained by dma_buf_vmap.”…”�”}”(hjFh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:142: ./drivers/dma-buf/dma-buf.c”h´M±hjFh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j@ hjÍDh²hh³jæDh´M±ubeh}”(h]”h ]”(jîŒfunction”eh"]”h$]”h&]”ja jîjb j Fjc j Fjd ‰je ‰jf ‰uh1jÚh²hhjèh³Nh´Nubjh )�”}”(hŒ�**Parameters** ``struct dma_buf *dmabuf`` [in] buffer to vunmap ``struct iosys_map *map`` [in] vmap pointer to vunmap”h]”(hÌ)�”}”(hŒ**Parameters**”h]”jr )�”}”(hj*Fh]”hŒ Parameters”…”�”}”(hj,Fh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hj(Fubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:142: ./drivers/dma-buf/dma-buf.c”h´Mµhj$Fubj´ )�”}”(hhh]”(j¹ )�”}”(hŒ4``struct dma_buf *dmabuf`` [in] buffer to vunmap ”h]”(j¿ )�”}”(hŒ``struct dma_buf *dmabuf``”h]”jâ)�”}”(hjIFh]”hŒstruct dma_buf *dmabuf”…”�”}”(hjKFh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjGFubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:142: ./drivers/dma-buf/dma-buf.c”h´M²hjCFubjÙ )�”}”(hhh]”hÌ)�”}”(hŒ[in] buffer to vunmap”h]”hŒ[in] buffer to vunmap”…”�”}”(hjbFh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j^Fh´M²hj_Fubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hjCFubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³j^Fh´M²hj@Fubj¹ )�”}”(hŒ8``struct iosys_map *map`` [in] vmap pointer to vunmap”h]”(j¿ )�”}”(hŒ``struct iosys_map *map``”h]”jâ)�”}”(hj‚Fh]”hŒstruct iosys_map *map”…”�”}”(hj„Fh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj€Fubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:142: ./drivers/dma-buf/dma-buf.c”h´M´hj|FubjÙ )�”}”(hhh]”hÌ)�”}”(hŒ[in] vmap pointer to vunmap”h]”hŒ[in] vmap pointer to vunmap”…”�”}”(hj›Fh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:142: ./drivers/dma-buf/dma-buf.c”h´M³hj˜Fubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hj|Fubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³j—Fh´M´hj@Fubeh}”(h]”h ]”h"]”h$]”h&]”uh1j³ hj$Fubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jg hjèh²hh³Nh´NubjÉ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÕŒ$dma_buf_vunmap_unlocked (C function)”Œc.dma_buf_vunmap_unlocked”hNt”auh1jÈhjèh²hh³Nh´NubjÛ)�”}”(hhh]”(jà)�”}”(hŒLvoid dma_buf_vunmap_unlocked (struct dma_buf *dmabuf, struct iosys_map *map)”h]”jæ)�”}”(hŒKvoid dma_buf_vunmap_unlocked(struct dma_buf *dmabuf, struct iosys_map *map)”h]”(jM)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjÜFh²hh³Nh´Nubah}”(h]”h ]”jYah"]”h$]”h&]”uh1jLhjØFh²hh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:142: ./drivers/dma-buf/dma-buf.c”h´MÉubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjëFh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjØFh²hh³jêFh´MÉubj )�”}”(hŒdma_buf_vunmap_unlocked”h]”j )�”}”(hŒdma_buf_vunmap_unlocked”h]”hŒdma_buf_vunmap_unlocked”…”�”}”(hjýFh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjùFubah}”(h]”h ]”(j' j( eh"]”h$]”h&]”j÷jøuh1j hjØFh²hh³jêFh´MÉubjŒ)�”}”(hŒ/(struct dma_buf *dmabuf, struct iosys_map *map)”h]”(j’)�”}”(hŒstruct dma_buf *dmabuf”h]”(jì)�”}”(hjïh]”hŒstruct”…”�”}”(hjGh²hh³Nh´Nubah}”(h]”h ]”jøah"]”h$]”h&]”uh1jëhjGubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj&Gh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjGubh)�”}”(hhh]”j )�”}”(hŒdma_buf”h]”hŒdma_buf”…”�”}”(hj7Gh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj4Gubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jîŒreftype”jGŒ reftarget”j9GŒmodname”NŒ classname”Nj³j¶)�”}”j¹]”jO)�”}”jGjÿFsbŒc.dma_buf_vunmap_unlocked”†”asbuh1hhjGubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjWGh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjGubjd)�”}”(hjgh]”hŒ*”…”�”}”(hjeGh²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchjGubj )�”}”(hŒdmabuf”h]”hŒdmabuf”…”�”}”(hjrGh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjGubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj÷jøuh1j‘hjGubj’)�”}”(hŒstruct iosys_map *map”h]”(jì)�”}”(hjïh]”hŒstruct”…”�”}”(hj‹Gh²hh³Nh´Nubah}”(h]”h ]”jøah"]”h$]”h&]”uh1jëhj‡Gubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj˜Gh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj‡Gubh)�”}”(hhh]”j )�”}”(hŒ iosys_map”h]”hŒ iosys_map”…”�”}”(hj©Gh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj¦Gubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jîŒreftype”jGŒ reftarget”j«GŒmodname”NŒ classname”Nj³j¶)�”}”j¹]”jSGŒc.dma_buf_vunmap_unlocked”†”asbuh1hhj‡Gubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÇGh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj‡Gubjd)�”}”(hjgh]”hŒ*”…”�”}”(hjÕGh²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchj‡Gubj )�”}”(hŒmap”h]”hŒmap”…”�”}”(hjâGh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj‡Gubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj÷jøuh1j‘hjGubeh}”(h]”h ]”h"]”h$]”h&]”j÷jøuh1j‹hjØFh²hh³jêFh´MÉubeh}”(h]”h ]”h"]”h$]”h&]”j÷jøj2 ˆuh1jåj3 j4 hjÔFh²hh³jêFh´MÉubah}”(h]”jÏFah ]”(j8 j9 eh"]”h$]”h&]”j= ˆj> )j? huh1jßh³jêFh´MÉhjÑFh²hubjA )�”}”(hhh]”hÌ)�”}”(hŒ&Unmap a vmap obtained by dma_buf_vmap.”h]”hŒ&Unmap a vmap obtained by dma_buf_vmap.”…”�”}”(hj Hh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:142: ./drivers/dma-buf/dma-buf.c”h´MÉhj Hh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j@ hjÑFh²hh³jêFh´MÉubeh}”(h]”h ]”(jîŒfunction”eh"]”h$]”h&]”ja jîjb j$Hjc j$Hjd ‰je ‰jf ‰uh1jÚh²hhjèh³Nh´Nubjh )�”}”(hŒ�**Parameters** ``struct dma_buf *dmabuf`` [in] buffer to vunmap ``struct iosys_map *map`` [in] vmap pointer to vunmap”h]”(hÌ)�”}”(hŒ**Parameters**”h]”jr )�”}”(hj.Hh]”hŒ Parameters”…”�”}”(hj0Hh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hj,Hubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:142: ./drivers/dma-buf/dma-buf.c”h´MÍhj(Hubj´ )�”}”(hhh]”(j¹ )�”}”(hŒ4``struct dma_buf *dmabuf`` [in] buffer to vunmap ”h]”(j¿ )�”}”(hŒ``struct dma_buf *dmabuf``”h]”jâ)�”}”(hjMHh]”hŒstruct dma_buf *dmabuf”…”�”}”(hjOHh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjKHubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:142: ./drivers/dma-buf/dma-buf.c”h´MÊhjGHubjÙ )�”}”(hhh]”hÌ)�”}”(hŒ[in] buffer to vunmap”h]”hŒ[in] buffer to vunmap”…”�”}”(hjfHh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jbHh´MÊhjcHubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hjGHubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³jbHh´MÊhjDHubj¹ )�”}”(hŒ8``struct iosys_map *map`` [in] vmap pointer to vunmap”h]”(j¿ )�”}”(hŒ``struct iosys_map *map``”h]”jâ)�”}”(hj†Hh]”hŒstruct iosys_map *map”…”�”}”(hjˆHh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj„Hubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:142: ./drivers/dma-buf/dma-buf.c”h´MÌhj€HubjÙ )�”}”(hhh]”hÌ)�”}”(hŒ[in] vmap pointer to vunmap”h]”hŒ[in] vmap pointer to vunmap”…”�”}”(hjŸHh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:142: ./drivers/dma-buf/dma-buf.c”h´MËhjœHubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hj€Hubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³j›Hh´MÌhjDHubeh}”(h]”h ]”h"]”h$]”h&]”uh1j³ hj(Hubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jg hjèh²hh³Nh´NubjÉ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÕŒdma_buf_ops (C struct)”Œ c.dma_buf_ops”hNt”auh1jÈhjèh²hh³Nh´NubjÛ)�”}”(hhh]”(jà)�”}”(hŒ dma_buf_ops”h]”jæ)�”}”(hŒstruct dma_buf_ops”h]”(jì)�”}”(hjïh]”hŒstruct”…”�”}”(hjàHh²hh³Nh´Nubah}”(h]”h ]”jøah"]”h$]”h&]”uh1jëhjÜHh²hh³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:145: ./include/linux/dma-buf.h”h´Kubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjîHh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjÜHh²hh³jíHh´Kubj )�”}”(hŒ dma_buf_ops”h]”j )�”}”(hjÚHh]”hŒ dma_buf_ops”…”�”}”(hjIh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjüHubah}”(h]”h ]”(j' j( eh"]”h$]”h&]”j÷jøuh1j hjÜHh²hh³jíHh´Kubeh}”(h]”h ]”h"]”h$]”h&]”j÷jøj2 ˆuh1jåj3 j4 hjØHh²hh³jíHh´Kubah}”(h]”jÓHah ]”(j8 j9 eh"]”h$]”h&]”j= ˆj> )j? huh1jßh³jíHh´KhjÕHh²hubjA )�”}”(hhh]”hÌ)�”}”(hŒ%operations possible on struct dma_buf”h]”hŒ%operations possible on struct dma_buf”…”�”}”(hj"Ih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:145: ./include/linux/dma-buf.h”h´K hjIh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j@ hjÕHh²hh³jíHh´Kubeh}”(h]”h ]”(jîŒstruct”eh"]”h$]”h&]”ja jîjb j:Ijc j:Ijd ‰je ‰jf ‰uh1jÚh²hhjèh³Nh´Nubjh )�”}”(hXg#**Definition**:: struct dma_buf_ops { int (*attach)(struct dma_buf *, struct dma_buf_attachment *); void (*detach)(struct dma_buf *, struct dma_buf_attachment *); int (*pin)(struct dma_buf_attachment *attach); void (*unpin)(struct dma_buf_attachment *attach); struct sg_table * (*map_dma_buf)(struct dma_buf_attachment *, enum dma_data_direction); void (*unmap_dma_buf)(struct dma_buf_attachment *, struct sg_table *, enum dma_data_direction); void (*release)(struct dma_buf *); int (*begin_cpu_access)(struct dma_buf *, enum dma_data_direction); int (*end_cpu_access)(struct dma_buf *, enum dma_data_direction); int (*mmap)(struct dma_buf *, struct vm_area_struct *vma); int (*vmap)(struct dma_buf *dmabuf, struct iosys_map *map); void (*vunmap)(struct dma_buf *dmabuf, struct iosys_map *map); }; **Members** ``attach`` This is called from dma_buf_attach() to make sure that a given :c:type:`dma_buf_attachment.dev ` can access the provided :c:type:`dma_buf`. Exporters which support buffer objects in special locations like VRAM or device-specific carveout areas should check whether the buffer could be move to system memory (or directly accessed by the provided device), and otherwise need to fail the attach operation. The exporter should also in general check whether the current allocation fulfills the DMA constraints of the new device. If this is not the case, and the allocation cannot be moved, it should also fail the attach operation. Any exporter-private housekeeping data can be stored in the :c:type:`dma_buf_attachment.priv ` pointer. This callback is optional. Returns: 0 on success, negative error code on failure. It might return -EBUSY to signal that backing storage is already allocated and incompatible with the requirements of requesting device. ``detach`` This is called by dma_buf_detach() to release a :c:type:`dma_buf_attachment`. Provided so that exporters can clean up any housekeeping for an :c:type:`dma_buf_attachment`. This callback is optional. ``pin`` This is called by dma_buf_pin() and lets the exporter know that the DMA-buf can't be moved any more. Ideally, the exporter should pin the buffer so that it is generally accessible by all devices. This is called with the :c:type:`dmabuf.resv ` object locked and is mutual exclusive with **cache_sgt_mapping**. This is called automatically for non-dynamic importers from dma_buf_attach(). Note that similar to non-dynamic exporters in their **map_dma_buf** callback the driver must guarantee that the memory is available for use and cleared of any old data by the time this function returns. Drivers which pipeline their buffer moves internally must wait for all moves and clears to complete. Returns: 0 on success, negative error code on failure. ``unpin`` This is called by dma_buf_unpin() and lets the exporter know that the DMA-buf can be moved again. This is called with the dmabuf->resv object locked and is mutual exclusive with **cache_sgt_mapping**. This callback is optional. ``map_dma_buf`` This is called by dma_buf_map_attachment() and is used to map a shared :c:type:`dma_buf` into device address space, and it is mandatory. It can only be called if **attach** has been called successfully. This call may sleep, e.g. when the backing storage first needs to be allocated, or moved to a location suitable for all currently attached devices. Note that any specific buffer attributes required for this function should get added to device_dma_parameters accessible via :c:type:`device.dma_params ` from the :c:type:`dma_buf_attachment`. The **attach** callback should also check these constraints. If this is being called for the first time, the exporter can now choose to scan through the list of attachments for this buffer, collate the requirements of the attached devices, and choose an appropriate backing storage for the buffer. Based on enum dma_data_direction, it might be possible to have multiple users accessing at the same time (for reading, maybe), or any other kind of sharing that the exporter might wish to make available to buffer-users. This is always called with the dmabuf->resv object locked when the dynamic_mapping flag is true. Note that for non-dynamic exporters the driver must guarantee that that the memory is available for use and cleared of any old data by the time this function returns. Drivers which pipeline their buffer moves internally must wait for all moves and clears to complete. Dynamic exporters do not need to follow this rule: For non-dynamic importers the buffer is already pinned through **pin**, which has the same requirements. Dynamic importers otoh are required to obey the dma_resv fences. Returns: A :c:type:`sg_table` scatter list of the backing storage of the DMA buffer, already mapped into the device address space of the :c:type:`device` attached with the provided :c:type:`dma_buf_attachment`. The addresses and lengths in the scatter list are PAGE_SIZE aligned. On failure, returns a negative error value wrapped into a pointer. May also return -EINTR when a signal was received while being blocked. Note that exporters should not try to cache the scatter list, or return the same one for multiple calls. Caching is done either by the DMA-BUF code (for non-dynamic importers) or the importer. Ownership of the scatter list is transferred to the caller, and returned by **unmap_dma_buf**. ``unmap_dma_buf`` This is called by dma_buf_unmap_attachment() and should unmap and release the :c:type:`sg_table` allocated in **map_dma_buf**, and it is mandatory. For static dma_buf handling this might also unpin the backing storage if this is the last mapping of the DMA buffer. ``release`` Called after the last dma_buf_put to release the :c:type:`dma_buf`, and mandatory. ``begin_cpu_access`` This is called from dma_buf_begin_cpu_access() and allows the exporter to ensure that the memory is actually coherent for cpu access. The exporter also needs to ensure that cpu access is coherent for the access direction. The direction can be used by the exporter to optimize the cache flushing, i.e. access with a different direction (read instead of write) might return stale or even bogus data (e.g. when the exporter needs to copy the data to temporary storage). Note that this is both called through the DMA_BUF_IOCTL_SYNC IOCTL command for userspace mappings established through **mmap**, and also for kernel mappings established with **vmap**. This callback is optional. Returns: 0 on success or a negative error code on failure. This can for example fail when the backing storage can't be allocated. Can also return -ERESTARTSYS or -EINTR when the call has been interrupted and needs to be restarted. ``end_cpu_access`` This is called from dma_buf_end_cpu_access() when the importer is done accessing the CPU. The exporter can use this to flush caches and undo anything else done in **begin_cpu_access**. This callback is optional. Returns: 0 on success or a negative error code on failure. Can return -ERESTARTSYS or -EINTR when the call has been interrupted and needs to be restarted. ``mmap`` This callback is used by the dma_buf_mmap() function Note that the mapping needs to be incoherent, userspace is expected to bracket CPU access using the DMA_BUF_IOCTL_SYNC interface. Because dma-buf buffers have invariant size over their lifetime, the dma-buf core checks whether a vma is too large and rejects such mappings. The exporter hence does not need to duplicate this check. Drivers do not need to check this themselves. If an exporter needs to manually flush caches and hence needs to fake coherency for mmap support, it needs to be able to zap all the ptes pointing at the backing storage. Now linux mm needs a struct address_space associated with the struct file stored in vma->vm_file to do that with the function unmap_mapping_range. But the dma_buf framework only backs every dma_buf fd with the anon_file struct file, i.e. all dma_bufs share the same file. Hence exporters need to setup their own file (and address_space) association by setting vma->vm_file and adjusting vma->vm_pgoff in the dma_buf mmap callback. In the specific case of a gem driver the exporter could use the shmem file already provided by gem (and set vm_pgoff = 0). Exporters can then zap ptes by unmapping the corresponding range of the struct address_space associated with their own file. This callback is optional. Returns: 0 on success or a negative error code on failure. ``vmap`` [optional] creates a virtual mapping for the buffer into kernel address space. Same restrictions as for vmap and friends apply. ``vunmap`` [optional] unmaps a vmap from the buffer”h]”(hÌ)�”}”(hŒ**Definition**::”h]”(jr )�”}”(hŒ**Definition**”h]”hŒ Definition”…”�”}”(hjFIh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hjBIubhŒ:”…”�”}”(hjBIh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:145: ./include/linux/dma-buf.h”h´K$hj>Iubjè)�”}”(hX<struct dma_buf_ops { int (*attach)(struct dma_buf *, struct dma_buf_attachment *); void (*detach)(struct dma_buf *, struct dma_buf_attachment *); int (*pin)(struct dma_buf_attachment *attach); void (*unpin)(struct dma_buf_attachment *attach); struct sg_table * (*map_dma_buf)(struct dma_buf_attachment *, enum dma_data_direction); void (*unmap_dma_buf)(struct dma_buf_attachment *, struct sg_table *, enum dma_data_direction); void (*release)(struct dma_buf *); int (*begin_cpu_access)(struct dma_buf *, enum dma_data_direction); int (*end_cpu_access)(struct dma_buf *, enum dma_data_direction); int (*mmap)(struct dma_buf *, struct vm_area_struct *vma); int (*vmap)(struct dma_buf *dmabuf, struct iosys_map *map); void (*vunmap)(struct dma_buf *dmabuf, struct iosys_map *map); };”h]”hX<struct dma_buf_ops { int (*attach)(struct dma_buf *, struct dma_buf_attachment *); void (*detach)(struct dma_buf *, struct dma_buf_attachment *); int (*pin)(struct dma_buf_attachment *attach); void (*unpin)(struct dma_buf_attachment *attach); struct sg_table * (*map_dma_buf)(struct dma_buf_attachment *, enum dma_data_direction); void (*unmap_dma_buf)(struct dma_buf_attachment *, struct sg_table *, enum dma_data_direction); void (*release)(struct dma_buf *); int (*begin_cpu_access)(struct dma_buf *, enum dma_data_direction); int (*end_cpu_access)(struct dma_buf *, enum dma_data_direction); int (*mmap)(struct dma_buf *, struct vm_area_struct *vma); int (*vmap)(struct dma_buf *dmabuf, struct iosys_map *map); void (*vunmap)(struct dma_buf *dmabuf, struct iosys_map *map); };”…”�”}”hj_Isbah}”(h]”h ]”h"]”h$]”h&]”j÷jøuh1jçh³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:145: ./include/linux/dma-buf.h”h´K&hj>IubhÌ)�”}”(hŒ **Members**”h]”jr )�”}”(hjpIh]”hŒMembers”…”�”}”(hjrIh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hjnIubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:145: ./include/linux/dma-buf.h”h´K5hj>Iubj´ )�”}”(hhh]”(j¹ )�”}”(hXí``attach`` This is called from dma_buf_attach() to make sure that a given :c:type:`dma_buf_attachment.dev ` can access the provided :c:type:`dma_buf`. Exporters which support buffer objects in special locations like VRAM or device-specific carveout areas should check whether the buffer could be move to system memory (or directly accessed by the provided device), and otherwise need to fail the attach operation. The exporter should also in general check whether the current allocation fulfills the DMA constraints of the new device. If this is not the case, and the allocation cannot be moved, it should also fail the attach operation. Any exporter-private housekeeping data can be stored in the :c:type:`dma_buf_attachment.priv ` pointer. This callback is optional. Returns: 0 on success, negative error code on failure. It might return -EBUSY to signal that backing storage is already allocated and incompatible with the requirements of requesting device. ”h]”(j¿ )�”}”(hŒ ``attach``”h]”jâ)�”}”(hj�Ih]”hŒattach”…”�”}”(hj‘Ih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj�Iubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:145: ./include/linux/dma-buf.h”h´K=hj‰IubjÙ )�”}”(hhh]”(hÌ)�”}”(hX¦This is called from dma_buf_attach() to make sure that a given :c:type:`dma_buf_attachment.dev ` can access the provided :c:type:`dma_buf`. Exporters which support buffer objects in special locations like VRAM or device-specific carveout areas should check whether the buffer could be move to system memory (or directly accessed by the provided device), and otherwise need to fail the attach operation.”h]”(hŒ?This is called from dma_buf_attach() to make sure that a given ”…”�”}”(hj¨Ih²hh³Nh´Nubh)�”}”(hŒ5:c:type:`dma_buf_attachment.dev `”h]”jâ)�”}”(hj²Ih]”hŒdma_buf_attachment.dev”…”�”}”(hj´Ih²hh³Nh´Nubah}”(h]”h ]”(jíjîŒc-type”eh"]”h$]”h&]”uh1jáhj°Iubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”júŒ refdomain”jîŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰j³j·jŒdma_buf_attachment”uh1hh³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:145: ./include/linux/dma-buf.h”h´K(hj¨IubhŒ can access the provided ”…”�”}”(hj¨Ih²hh³Nh´Nubh)�”}”(hŒ:c:type:`dma_buf`”h]”jâ)�”}”(hjÖIh]”hŒdma_buf”…”�”}”(hjØIh²hh³Nh´Nubah}”(h]”h ]”(jíjîŒc-type”eh"]”h$]”h&]”uh1jáhjÔIubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”júŒ refdomain”jîŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰j³j·jŒdma_buf”uh1hh³jÏIh´K(hj¨IubhX. Exporters which support buffer objects in special locations like VRAM or device-specific carveout areas should check whether the buffer could be move to system memory (or directly accessed by the provided device), and otherwise need to fail the attach operation.”…”�”}”(hj¨Ih²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jÏIh´K(hj¥IubhÌ)�”}”(hŒßThe exporter should also in general check whether the current allocation fulfills the DMA constraints of the new device. If this is not the case, and the allocation cannot be moved, it should also fail the attach operation.”h]”hŒßThe exporter should also in general check whether the current allocation fulfills the DMA constraints of the new device. If this is not the case, and the allocation cannot be moved, it should also fail the attach operation.”…”�”}”(hjýIh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:145: ./include/linux/dma-buf.h”h´K/hj¥IubhÌ)�”}”(hŒ{Any exporter-private housekeeping data can be stored in the :c:type:`dma_buf_attachment.priv ` pointer.”h]”(hŒ`”h]”jâ)�”}”(hjJh]”hŒdma_buf_attachment.priv”…”�”}”(hjJh²hh³Nh´Nubah}”(h]”h ]”(jíjîŒc-type”eh"]”h$]”h&]”uh1jáhjJubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”júŒ refdomain”jîŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰j³j·jŒdma_buf_attachment”uh1hh³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:145: ./include/linux/dma-buf.h”h´K4hj JubhŒ pointer.”…”�”}”(hj Jh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j3Jh´K4hj¥IubhÌ)�”}”(hŒThis callback is optional.”h]”hŒThis callback is optional.”…”�”}”(hj>Jh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:145: ./include/linux/dma-buf.h”h´K7hj¥IubhÌ)�”}”(hŒReturns:”h]”hŒReturns:”…”�”}”(hjMJh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:145: ./include/linux/dma-buf.h”h´K9hj¥IubhÌ)�”}”(hŒµ0 on success, negative error code on failure. It might return -EBUSY to signal that backing storage is already allocated and incompatible with the requirements of requesting device.”h]”hŒµ0 on success, negative error code on failure. It might return -EBUSY to signal that backing storage is already allocated and incompatible with the requirements of requesting device.”…”�”}”(hj\Jh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:145: ./include/linux/dma-buf.h”h´K;hj¥Iubeh}”(h]”h ]”h"]”h$]”h&]”uh1jØ hj‰Iubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³j¤Ih´K=hj†Iubj¹ )�”}”(hŒÓ``detach`` This is called by dma_buf_detach() to release a :c:type:`dma_buf_attachment`. Provided so that exporters can clean up any housekeeping for an :c:type:`dma_buf_attachment`. This callback is optional. ”h]”(j¿ )�”}”(hŒ ``detach``”h]”jâ)�”}”(hj}Jh]”hŒdetach”…”�”}”(hjJh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj{Jubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:145: ./include/linux/dma-buf.h”h´KHhjwJubjÙ )�”}”(hhh]”(hÌ)�”}”(hŒ«This is called by dma_buf_detach() to release a :c:type:`dma_buf_attachment`. Provided so that exporters can clean up any housekeeping for an :c:type:`dma_buf_attachment`.”h]”(hŒ0This is called by dma_buf_detach() to release a ”…”�”}”(hj–Jh²hh³Nh´Nubh)�”}”(hŒ:c:type:`dma_buf_attachment`”h]”jâ)�”}”(hj Jh]”hŒdma_buf_attachment”…”�”}”(hj¢Jh²hh³Nh´Nubah}”(h]”h ]”(jíjîŒc-type”eh"]”h$]”h&]”uh1jáhjžJubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”júŒ refdomain”jîŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰j³j·jŒdma_buf_attachment”uh1hh³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:145: ./include/linux/dma-buf.h”h´KDhj–JubhŒB. Provided so that exporters can clean up any housekeeping for an ”…”�”}”(hj–Jh²hh³Nh´Nubh)�”}”(hŒ:c:type:`dma_buf_attachment`”h]”jâ)�”}”(hjÄJh]”hŒdma_buf_attachment”…”�”}”(hjÆJh²hh³Nh´Nubah}”(h]”h ]”(jíjîŒc-type”eh"]”h$]”h&]”uh1jáhjÂJubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”júŒ refdomain”jîŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰j³j·jŒdma_buf_attachment”uh1hh³j½Jh´KDhj–JubhŒ.”…”�”}”(hj–Jh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j½Jh´KDhj“JubhÌ)�”}”(hŒThis callback is optional.”h]”hŒThis callback is optional.”…”�”}”(hjëJh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j’Jh´KHhj“Jubeh}”(h]”h ]”h"]”h$]”h&]”uh1jØ hjwJubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³j’Jh´KHhj†Iubj¹ )�”}”(hXÿ``pin`` This is called by dma_buf_pin() and lets the exporter know that the DMA-buf can't be moved any more. Ideally, the exporter should pin the buffer so that it is generally accessible by all devices. This is called with the :c:type:`dmabuf.resv ` object locked and is mutual exclusive with **cache_sgt_mapping**. This is called automatically for non-dynamic importers from dma_buf_attach(). Note that similar to non-dynamic exporters in their **map_dma_buf** callback the driver must guarantee that the memory is available for use and cleared of any old data by the time this function returns. Drivers which pipeline their buffer moves internally must wait for all moves and clears to complete. Returns: 0 on success, negative error code on failure. ”h]”(j¿ )�”}”(hŒ``pin``”h]”jâ)�”}”(hj Kh]”hŒpin”…”�”}”(hj Kh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj Kubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:145: ./include/linux/dma-buf.h”h´KbhjKubjÙ )�”}”(hhh]”(hÌ)�”}”(hŒÃThis is called by dma_buf_pin() and lets the exporter know that the DMA-buf can't be moved any more. Ideally, the exporter should pin the buffer so that it is generally accessible by all devices.”h]”hŒÅThis is called by dma_buf_pin() and lets the exporter know that the DMA-buf can’t be moved any more. Ideally, the exporter should pin the buffer so that it is generally accessible by all devices.”…”�”}”(hj$Kh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:145: ./include/linux/dma-buf.h”h´KOhj!KubhÌ)�”}”(hŒxThis is called with the :c:type:`dmabuf.resv ` object locked and is mutual exclusive with **cache_sgt_mapping**.”h]”(hŒThis is called with the ”…”�”}”(hj3Kh²hh³Nh´Nubh)�”}”(hŒ:c:type:`dmabuf.resv `”h]”jâ)�”}”(hj=Kh]”hŒ dmabuf.resv”…”�”}”(hj?Kh²hh³Nh´Nubah}”(h]”h ]”(jíjîŒc-type”eh"]”h$]”h&]”uh1jáhj;Kubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”júŒ refdomain”jîŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰j³j·jŒdmabuf”uh1hh³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:145: ./include/linux/dma-buf.h”h´KThj3KubhŒ, object locked and is mutual exclusive with ”…”�”}”(hj3Kh²hh³Nh´Nubjr )�”}”(hŒ**cache_sgt_mapping**”h]”hŒcache_sgt_mapping”…”�”}”(hj_Kh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hj3KubhŒ.”…”�”}”(hj3Kh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jZKh´KThj!KubhÌ)�”}”(hŒMThis is called automatically for non-dynamic importers from dma_buf_attach().”h]”hŒMThis is called automatically for non-dynamic importers from dma_buf_attach().”…”�”}”(hjwKh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:145: ./include/linux/dma-buf.h”h´KWhj!KubhÌ)�”}”(hX/Note that similar to non-dynamic exporters in their **map_dma_buf** callback the driver must guarantee that the memory is available for use and cleared of any old data by the time this function returns. Drivers which pipeline their buffer moves internally must wait for all moves and clears to complete.”h]”(hŒ4Note that similar to non-dynamic exporters in their ”…”�”}”(hj†Kh²hh³Nh´Nubjr )�”}”(hŒ**map_dma_buf**”h]”hŒ map_dma_buf”…”�”}”(hjŽKh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hj†KubhŒì callback the driver must guarantee that the memory is available for use and cleared of any old data by the time this function returns. Drivers which pipeline their buffer moves internally must wait for all moves and clears to complete.”…”�”}”(hj†Kh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:145: ./include/linux/dma-buf.h”h´KZhj!KubhÌ)�”}”(hŒReturns:”h]”hŒReturns:”…”�”}”(hj§Kh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:145: ./include/linux/dma-buf.h”h´K`hj!KubhÌ)�”}”(hŒ-0 on success, negative error code on failure.”h]”hŒ-0 on success, negative error code on failure.”…”�”}”(hj¶Kh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j Kh´Kbhj!Kubeh}”(h]”h ]”h"]”h$]”h&]”uh1jØ hjKubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³j Kh´Kbhj†Iubj¹ )�”}”(hŒð``unpin`` This is called by dma_buf_unpin() and lets the exporter know that the DMA-buf can be moved again. This is called with the dmabuf->resv object locked and is mutual exclusive with **cache_sgt_mapping**. This callback is optional. ”h]”(j¿ )�”}”(hŒ ``unpin``”h]”jâ)�”}”(hjÖKh]”hŒunpin”…”�”}”(hjØKh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjÔKubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:145: ./include/linux/dma-buf.h”h´KohjÐKubjÙ )�”}”(hhh]”(hÌ)�”}”(hŒaThis is called by dma_buf_unpin() and lets the exporter know that the DMA-buf can be moved again.”h]”hŒaThis is called by dma_buf_unpin() and lets the exporter know that the DMA-buf can be moved again.”…”�”}”(hjïKh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:145: ./include/linux/dma-buf.h”h´KihjìKubhÌ)�”}”(hŒfThis is called with the dmabuf->resv object locked and is mutual exclusive with **cache_sgt_mapping**.”h]”(hŒPThis is called with the dmabuf->resv object locked and is mutual exclusive with ”…”�”}”(hjþKh²hh³Nh´Nubjr )�”}”(hŒ**cache_sgt_mapping**”h]”hŒcache_sgt_mapping”…”�”}”(hjLh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hjþKubhŒ.”…”�”}”(hjþKh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:145: ./include/linux/dma-buf.h”h´KlhjìKubhÌ)�”}”(hŒThis callback is optional.”h]”hŒThis callback is optional.”…”�”}”(hjLh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jëKh´KohjìKubeh}”(h]”h ]”h"]”h$]”h&]”uh1jØ hjÐKubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³jëKh´Kohj†Iubj¹ )�”}”(hXU ``map_dma_buf`` This is called by dma_buf_map_attachment() and is used to map a shared :c:type:`dma_buf` into device address space, and it is mandatory. It can only be called if **attach** has been called successfully. This call may sleep, e.g. when the backing storage first needs to be allocated, or moved to a location suitable for all currently attached devices. Note that any specific buffer attributes required for this function should get added to device_dma_parameters accessible via :c:type:`device.dma_params ` from the :c:type:`dma_buf_attachment`. The **attach** callback should also check these constraints. If this is being called for the first time, the exporter can now choose to scan through the list of attachments for this buffer, collate the requirements of the attached devices, and choose an appropriate backing storage for the buffer. Based on enum dma_data_direction, it might be possible to have multiple users accessing at the same time (for reading, maybe), or any other kind of sharing that the exporter might wish to make available to buffer-users. This is always called with the dmabuf->resv object locked when the dynamic_mapping flag is true. Note that for non-dynamic exporters the driver must guarantee that that the memory is available for use and cleared of any old data by the time this function returns. Drivers which pipeline their buffer moves internally must wait for all moves and clears to complete. Dynamic exporters do not need to follow this rule: For non-dynamic importers the buffer is already pinned through **pin**, which has the same requirements. Dynamic importers otoh are required to obey the dma_resv fences. Returns: A :c:type:`sg_table` scatter list of the backing storage of the DMA buffer, already mapped into the device address space of the :c:type:`device` attached with the provided :c:type:`dma_buf_attachment`. The addresses and lengths in the scatter list are PAGE_SIZE aligned. On failure, returns a negative error value wrapped into a pointer. May also return -EINTR when a signal was received while being blocked. Note that exporters should not try to cache the scatter list, or return the same one for multiple calls. Caching is done either by the DMA-BUF code (for non-dynamic importers) or the importer. Ownership of the scatter list is transferred to the caller, and returned by **unmap_dma_buf**. ”h]”(j¿ )�”}”(hŒ``map_dma_buf``”h]”jâ)�”}”(hj?Lh]”hŒ map_dma_buf”…”�”}”(hjALh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj=Lubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:145: ./include/linux/dma-buf.h”h´K¨hj9LubjÙ )�”}”(hhh]”(hÌ)�”}”(hŒÊThis is called by dma_buf_map_attachment() and is used to map a shared :c:type:`dma_buf` into device address space, and it is mandatory. It can only be called if **attach** has been called successfully.”h]”(hŒGThis is called by dma_buf_map_attachment() and is used to map a shared ”…”�”}”(hjXLh²hh³Nh´Nubh)�”}”(hŒ:c:type:`dma_buf`”h]”jâ)�”}”(hjbLh]”hŒdma_buf”…”�”}”(hjdLh²hh³Nh´Nubah}”(h]”h ]”(jíjîŒc-type”eh"]”h$]”h&]”uh1jáhj`Lubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”júŒ refdomain”jîŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰j³j·jŒdma_buf”uh1hh³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:145: ./include/linux/dma-buf.h”h´KvhjXLubhŒJ into device address space, and it is mandatory. It can only be called if ”…”�”}”(hjXLh²hh³Nh´Nubjr )�”}”(hŒ **attach**”h]”hŒattach”…”�”}”(hj„Lh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hjXLubhŒ has been called successfully.”…”�”}”(hjXLh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jLh´KvhjULubhÌ)�”}”(hŒ“This call may sleep, e.g. when the backing storage first needs to be allocated, or moved to a location suitable for all currently attached devices.”h]”hŒ“This call may sleep, e.g. when the backing storage first needs to be allocated, or moved to a location suitable for all currently attached devices.”…”�”}”(hjœLh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:145: ./include/linux/dma-buf.h”h´KzhjULubhÌ)�”}”(hXNote that any specific buffer attributes required for this function should get added to device_dma_parameters accessible via :c:type:`device.dma_params ` from the :c:type:`dma_buf_attachment`. The **attach** callback should also check these constraints.”h]”(hŒ}Note that any specific buffer attributes required for this function should get added to device_dma_parameters accessible via ”…”�”}”(hj«Lh²hh³Nh´Nubh)�”}”(hŒ$:c:type:`device.dma_params `”h]”jâ)�”}”(hjµLh]”hŒdevice.dma_params”…”�”}”(hj·Lh²hh³Nh´Nubah}”(h]”h ]”(jíjîŒc-type”eh"]”h$]”h&]”uh1jáhj³Lubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”júŒ refdomain”jîŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰j³j·jŒdevice”uh1hh³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:145: ./include/linux/dma-buf.h”h´K~hj«LubhŒ from the ”…”�”}”(hj«Lh²hh³Nh´Nubh)�”}”(hŒ:c:type:`dma_buf_attachment`”h]”jâ)�”}”(hjÙLh]”hŒdma_buf_attachment”…”�”}”(hjÛLh²hh³Nh´Nubah}”(h]”h ]”(jíjîŒc-type”eh"]”h$]”h&]”uh1jáhj×Lubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”júŒ refdomain”jîŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰j³j·jŒdma_buf_attachment”uh1hh³jÒLh´K~hj«LubhŒ. The ”…”�”}”(hj«Lh²hh³Nh´Nubjr )�”}”(hŒ **attach**”h]”hŒattach”…”�”}”(hjúLh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hj«LubhŒ. callback should also check these constraints.”…”�”}”(hj«Lh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jÒLh´K~hjULubhÌ)�”}”(hŒìIf this is being called for the first time, the exporter can now choose to scan through the list of attachments for this buffer, collate the requirements of the attached devices, and choose an appropriate backing storage for the buffer.”h]”hŒìIf this is being called for the first time, the exporter can now choose to scan through the list of attachments for this buffer, collate the requirements of the attached devices, and choose an appropriate backing storage for the buffer.”…”�”}”(hjMh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:145: ./include/linux/dma-buf.h”h´KƒhjULubhÌ)�”}”(hŒÛBased on enum dma_data_direction, it might be possible to have multiple users accessing at the same time (for reading, maybe), or any other kind of sharing that the exporter might wish to make available to buffer-users.”h]”hŒÛBased on enum dma_data_direction, it might be possible to have multiple users accessing at the same time (for reading, maybe), or any other kind of sharing that the exporter might wish to make available to buffer-users.”…”�”}”(hj!Mh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:145: ./include/linux/dma-buf.h”h´KˆhjULubhÌ)�”}”(hŒ`This is always called with the dmabuf->resv object locked when the dynamic_mapping flag is true.”h]”hŒ`This is always called with the dmabuf->resv object locked when the dynamic_mapping flag is true.”…”�”}”(hj0Mh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:145: ./include/linux/dma-buf.h”h´K�hjULubhÌ)�”}”(hXéNote that for non-dynamic exporters the driver must guarantee that that the memory is available for use and cleared of any old data by the time this function returns. Drivers which pipeline their buffer moves internally must wait for all moves and clears to complete. Dynamic exporters do not need to follow this rule: For non-dynamic importers the buffer is already pinned through **pin**, which has the same requirements. Dynamic importers otoh are required to obey the dma_resv fences.”h]”(hXNote that for non-dynamic exporters the driver must guarantee that that the memory is available for use and cleared of any old data by the time this function returns. Drivers which pipeline their buffer moves internally must wait for all moves and clears to complete. Dynamic exporters do not need to follow this rule: For non-dynamic importers the buffer is already pinned through ”…”�”}”(hj?Mh²hh³Nh´Nubjr )�”}”(hŒ**pin**”h]”hŒpin”…”�”}”(hjGMh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hj?MubhŒc, which has the same requirements. Dynamic importers otoh are required to obey the dma_resv fences.”…”�”}”(hj?Mh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:145: ./include/linux/dma-buf.h”h´K�hjULubhÌ)�”}”(hŒReturns:”h]”hŒReturns:”…”�”}”(hj`Mh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:145: ./include/linux/dma-buf.h”h´K™hjULubhÌ)�”}”(hXA :c:type:`sg_table` scatter list of the backing storage of the DMA buffer, already mapped into the device address space of the :c:type:`device` attached with the provided :c:type:`dma_buf_attachment`. The addresses and lengths in the scatter list are PAGE_SIZE aligned.”h]”(hŒA ”…”�”}”(hjoMh²hh³Nh´Nubh)�”}”(hŒ:c:type:`sg_table`”h]”jâ)�”}”(hjyMh]”hŒsg_table”…”�”}”(hj{Mh²hh³Nh´Nubah}”(h]”h ]”(jíjîŒc-type”eh"]”h$]”h&]”uh1jáhjwMubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”júŒ refdomain”jîŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰j³j·jŒsg_table”uh1hh³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:145: ./include/linux/dma-buf.h”h´K›hjoMubhŒl scatter list of the backing storage of the DMA buffer, already mapped into the device address space of the ”…”�”}”(hjoMh²hh³Nh´Nubh)�”}”(hŒ:c:type:`device`”h]”jâ)�”}”(hj�Mh]”hŒdevice”…”�”}”(hjŸMh²hh³Nh´Nubah}”(h]”h ]”(jíjîŒc-type”eh"]”h$]”h&]”uh1jáhj›Mubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”júŒ refdomain”jîŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰j³j·jŒdevice”uh1hh³j–Mh´K›hjoMubhŒ attached with the provided ”…”�”}”(hjoMh²hh³Nh´Nubh)�”}”(hŒ:c:type:`dma_buf_attachment`”h]”jâ)�”}”(hjÀMh]”hŒdma_buf_attachment”…”�”}”(hjÂMh²hh³Nh´Nubah}”(h]”h ]”(jíjîŒc-type”eh"]”h$]”h&]”uh1jáhj¾Mubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”júŒ refdomain”jîŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰j³j·jŒdma_buf_attachment”uh1hh³j–Mh´K›hjoMubhŒF. The addresses and lengths in the scatter list are PAGE_SIZE aligned.”…”�”}”(hjoMh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j–Mh´K›hjULubhÌ)�”}”(hŒ‰On failure, returns a negative error value wrapped into a pointer. May also return -EINTR when a signal was received while being blocked.”h]”hŒ‰On failure, returns a negative error value wrapped into a pointer. May also return -EINTR when a signal was received while being blocked.”…”�”}”(hjçMh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:145: ./include/linux/dma-buf.h”h´K hjULubhÌ)�”}”(hXNote that exporters should not try to cache the scatter list, or return the same one for multiple calls. Caching is done either by the DMA-BUF code (for non-dynamic importers) or the importer. Ownership of the scatter list is transferred to the caller, and returned by **unmap_dma_buf**.”h]”(hX Note that exporters should not try to cache the scatter list, or return the same one for multiple calls. Caching is done either by the DMA-BUF code (for non-dynamic importers) or the importer. Ownership of the scatter list is transferred to the caller, and returned by ”…”�”}”(hjöMh²hh³Nh´Nubjr )�”}”(hŒ**unmap_dma_buf**”h]”hŒ unmap_dma_buf”…”�”}”(hjþMh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hjöMubhŒ.”…”�”}”(hjöMh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:145: ./include/linux/dma-buf.h”h´K¤hjULubeh}”(h]”h ]”h"]”h$]”h&]”uh1jØ hj9Lubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³jTLh´K¨hj†Iubj¹ )�”}”(hX``unmap_dma_buf`` This is called by dma_buf_unmap_attachment() and should unmap and release the :c:type:`sg_table` allocated in **map_dma_buf**, and it is mandatory. For static dma_buf handling this might also unpin the backing storage if this is the last mapping of the DMA buffer. ”h]”(j¿ )�”}”(hŒ``unmap_dma_buf``”h]”jâ)�”}”(hj)Nh]”hŒ unmap_dma_buf”…”�”}”(hj+Nh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj'Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:145: ./include/linux/dma-buf.h”h´K²hj#NubjÙ )�”}”(hhh]”hÌ)�”}”(hXThis is called by dma_buf_unmap_attachment() and should unmap and release the :c:type:`sg_table` allocated in **map_dma_buf**, and it is mandatory. For static dma_buf handling this might also unpin the backing storage if this is the last mapping of the DMA buffer.”h]”(hŒNThis is called by dma_buf_unmap_attachment() and should unmap and release the ”…”�”}”(hjBNh²hh³Nh´Nubh)�”}”(hŒ:c:type:`sg_table`”h]”jâ)�”}”(hjLNh]”hŒsg_table”…”�”}”(hjNNh²hh³Nh´Nubah}”(h]”h ]”(jíjîŒc-type”eh"]”h$]”h&]”uh1jáhjJNubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”júŒ refdomain”jîŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰j³j·jŒsg_table”uh1hh³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:145: ./include/linux/dma-buf.h”h´K¯hjBNubhŒ allocated in ”…”�”}”(hjBNh²hh³Nh´Nubjr )�”}”(hŒ**map_dma_buf**”h]”hŒ map_dma_buf”…”�”}”(hjnNh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hjBNubhŒ‹, and it is mandatory. For static dma_buf handling this might also unpin the backing storage if this is the last mapping of the DMA buffer.”…”�”}”(hjBNh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jiNh´K¯hj?Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hj#Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³j>Nh´K²hj†Iubj¹ )�”}”(hŒ_``release`` Called after the last dma_buf_put to release the :c:type:`dma_buf`, and mandatory. ”h]”(j¿ )�”}”(hŒ ``release``”h]”jâ)�”}”(hj˜Nh]”hŒrelease”…”�”}”(hjšNh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj–Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:145: ./include/linux/dma-buf.h”h´KÀhj’NubjÙ )�”}”(hhh]”hÌ)�”}”(hŒRCalled after the last dma_buf_put to release the :c:type:`dma_buf`, and mandatory.”h]”(hŒ1Called after the last dma_buf_put to release the ”…”�”}”(hj±Nh²hh³Nh´Nubh)�”}”(hŒ:c:type:`dma_buf`”h]”jâ)�”}”(hj»Nh]”hŒdma_buf”…”�”}”(hj½Nh²hh³Nh´Nubah}”(h]”h ]”(jíjîŒc-type”eh"]”h$]”h&]”uh1jáhj¹Nubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”júŒ refdomain”jîŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰j³j·jŒdma_buf”uh1hh³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:145: ./include/linux/dma-buf.h”h´K¿hj±NubhŒ, and mandatory.”…”�”}”(hj±Nh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jØNh´K¿hj®Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hj’Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³j­Nh´KÀhj†Iubj¹ )�”}”(hX¦``begin_cpu_access`` This is called from dma_buf_begin_cpu_access() and allows the exporter to ensure that the memory is actually coherent for cpu access. The exporter also needs to ensure that cpu access is coherent for the access direction. The direction can be used by the exporter to optimize the cache flushing, i.e. access with a different direction (read instead of write) might return stale or even bogus data (e.g. when the exporter needs to copy the data to temporary storage). Note that this is both called through the DMA_BUF_IOCTL_SYNC IOCTL command for userspace mappings established through **mmap**, and also for kernel mappings established with **vmap**. This callback is optional. Returns: 0 on success or a negative error code on failure. This can for example fail when the backing storage can't be allocated. Can also return -ERESTARTSYS or -EINTR when the call has been interrupted and needs to be restarted. ”h]”(j¿ )�”}”(hŒ``begin_cpu_access``”h]”jâ)�”}”(hjõNh]”hŒbegin_cpu_access”…”�”}”(hj÷Nh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjóNubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:145: ./include/linux/dma-buf.h”h´KÛhjïNubjÙ )�”}”(hhh]”(hÌ)�”}”(hXÒThis is called from dma_buf_begin_cpu_access() and allows the exporter to ensure that the memory is actually coherent for cpu access. The exporter also needs to ensure that cpu access is coherent for the access direction. The direction can be used by the exporter to optimize the cache flushing, i.e. access with a different direction (read instead of write) might return stale or even bogus data (e.g. when the exporter needs to copy the data to temporary storage).”h]”hXÒThis is called from dma_buf_begin_cpu_access() and allows the exporter to ensure that the memory is actually coherent for cpu access. The exporter also needs to ensure that cpu access is coherent for the access direction. The direction can be used by the exporter to optimize the cache flushing, i.e. access with a different direction (read instead of write) might return stale or even bogus data (e.g. when the exporter needs to copy the data to temporary storage).”…”�”}”(hjOh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:145: ./include/linux/dma-buf.h”h´KÇhj OubhÌ)�”}”(hŒ·Note that this is both called through the DMA_BUF_IOCTL_SYNC IOCTL command for userspace mappings established through **mmap**, and also for kernel mappings established with **vmap**.”h]”(hŒvNote that this is both called through the DMA_BUF_IOCTL_SYNC IOCTL command for userspace mappings established through ”…”�”}”(hjOh²hh³Nh´Nubjr )�”}”(hŒ**mmap**”h]”hŒmmap”…”�”}”(hj%Oh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hjOubhŒ0, and also for kernel mappings established with ”…”�”}”(hjOh²hh³Nh´Nubjr )�”}”(hŒ**vmap**”h]”hŒvmap”…”�”}”(hj7Oh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hjOubhŒ.”…”�”}”(hjOh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:145: ./include/linux/dma-buf.h”h´KÐhj OubhÌ)�”}”(hŒThis callback is optional.”h]”hŒThis callback is optional.”…”�”}”(hjPOh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:145: ./include/linux/dma-buf.h”h´KÔhj OubhÌ)�”}”(hŒReturns:”h]”hŒReturns:”…”�”}”(hj_Oh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:145: ./include/linux/dma-buf.h”h´KÖhj OubhÌ)�”}”(hŒÝ0 on success or a negative error code on failure. This can for example fail when the backing storage can't be allocated. Can also return -ERESTARTSYS or -EINTR when the call has been interrupted and needs to be restarted.”h]”hŒß0 on success or a negative error code on failure. This can for example fail when the backing storage can’t be allocated. Can also return -ERESTARTSYS or -EINTR when the call has been interrupted and needs to be restarted.”…”�”}”(hjnOh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:145: ./include/linux/dma-buf.h”h´KØhj Oubeh}”(h]”h ]”h"]”h$]”h&]”uh1jØ hjïNubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³j Oh´KÛhj†Iubj¹ )�”}”(hX…``end_cpu_access`` This is called from dma_buf_end_cpu_access() when the importer is done accessing the CPU. The exporter can use this to flush caches and undo anything else done in **begin_cpu_access**. This callback is optional. Returns: 0 on success or a negative error code on failure. Can return -ERESTARTSYS or -EINTR when the call has been interrupted and needs to be restarted. ”h]”(j¿ )�”}”(hŒ``end_cpu_access``”h]”jâ)�”}”(hj�Oh]”hŒend_cpu_access”…”�”}”(hj‘Oh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj�Oubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:145: ./include/linux/dma-buf.h”h´Kìhj‰OubjÙ )�”}”(hhh]”(hÌ)�”}”(hŒ¸This is called from dma_buf_end_cpu_access() when the importer is done accessing the CPU. The exporter can use this to flush caches and undo anything else done in **begin_cpu_access**.”h]”(hŒ£This is called from dma_buf_end_cpu_access() when the importer is done accessing the CPU. The exporter can use this to flush caches and undo anything else done in ”…”�”}”(hj¨Oh²hh³Nh´Nubjr )�”}”(hŒ**begin_cpu_access**”h]”hŒbegin_cpu_access”…”�”}”(hj°Oh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hj¨OubhŒ.”…”�”}”(hj¨Oh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:145: ./include/linux/dma-buf.h”h´Kâhj¥OubhÌ)�”}”(hŒThis callback is optional.”h]”hŒThis callback is optional.”…”�”}”(hjÉOh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:145: ./include/linux/dma-buf.h”h´Kæhj¥OubhÌ)�”}”(hŒReturns:”h]”hŒReturns:”…”�”}”(hjØOh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:145: ./include/linux/dma-buf.h”h´Kèhj¥OubhÌ)�”}”(hŒ‘0 on success or a negative error code on failure. Can return -ERESTARTSYS or -EINTR when the call has been interrupted and needs to be restarted.”h]”hŒ‘0 on success or a negative error code on failure. Can return -ERESTARTSYS or -EINTR when the call has been interrupted and needs to be restarted.”…”�”}”(hjçOh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:145: ./include/linux/dma-buf.h”h´Kêhj¥Oubeh}”(h]”h ]”h"]”h$]”h&]”uh1jØ hj‰Oubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³j¤Oh´Kìhj†Iubj¹ )�”}”(hXf``mmap`` This callback is used by the dma_buf_mmap() function Note that the mapping needs to be incoherent, userspace is expected to bracket CPU access using the DMA_BUF_IOCTL_SYNC interface. Because dma-buf buffers have invariant size over their lifetime, the dma-buf core checks whether a vma is too large and rejects such mappings. The exporter hence does not need to duplicate this check. Drivers do not need to check this themselves. If an exporter needs to manually flush caches and hence needs to fake coherency for mmap support, it needs to be able to zap all the ptes pointing at the backing storage. Now linux mm needs a struct address_space associated with the struct file stored in vma->vm_file to do that with the function unmap_mapping_range. But the dma_buf framework only backs every dma_buf fd with the anon_file struct file, i.e. all dma_bufs share the same file. Hence exporters need to setup their own file (and address_space) association by setting vma->vm_file and adjusting vma->vm_pgoff in the dma_buf mmap callback. In the specific case of a gem driver the exporter could use the shmem file already provided by gem (and set vm_pgoff = 0). Exporters can then zap ptes by unmapping the corresponding range of the struct address_space associated with their own file. This callback is optional. Returns: 0 on success or a negative error code on failure. ”h]”(j¿ )�”}”(hŒ``mmap``”h]”jâ)�”}”(hjPh]”hŒmmap”…”�”}”(hj Ph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjPubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:145: ./include/linux/dma-buf.h”h´MhjPubjÙ )�”}”(hhh]”(hÌ)�”}”(hŒ4This callback is used by the dma_buf_mmap() function”h]”hŒ4This callback is used by the dma_buf_mmap() function”…”�”}”(hj!Ph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:145: ./include/linux/dma-buf.h”h´KóhjPubhÌ)�”}”(hŒ�Note that the mapping needs to be incoherent, userspace is expected to bracket CPU access using the DMA_BUF_IOCTL_SYNC interface.”h]”hŒ�Note that the mapping needs to be incoherent, userspace is expected to bracket CPU access using the DMA_BUF_IOCTL_SYNC interface.”…”�”•}”(hj0Ph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:145: ./include/linux/dma-buf.h”h´KõhjPubhÌ)�”}”(hŒöBecause dma-buf buffers have invariant size over their lifetime, the dma-buf core checks whether a vma is too large and rejects such mappings. The exporter hence does not need to duplicate this check. Drivers do not need to check this themselves.”h]”hŒöBecause dma-buf buffers have invariant size over their lifetime, the dma-buf core checks whether a vma is too large and rejects such mappings. The exporter hence does not need to duplicate this check. Drivers do not need to check this themselves.”…”�”}”(hj?Ph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:145: ./include/linux/dma-buf.h”h´KøhjPubhÌ)�”}”(hXºIf an exporter needs to manually flush caches and hence needs to fake coherency for mmap support, it needs to be able to zap all the ptes pointing at the backing storage. Now linux mm needs a struct address_space associated with the struct file stored in vma->vm_file to do that with the function unmap_mapping_range. But the dma_buf framework only backs every dma_buf fd with the anon_file struct file, i.e. all dma_bufs share the same file.”h]”hXºIf an exporter needs to manually flush caches and hence needs to fake coherency for mmap support, it needs to be able to zap all the ptes pointing at the backing storage. Now linux mm needs a struct address_space associated with the struct file stored in vma->vm_file to do that with the function unmap_mapping_range. But the dma_buf framework only backs every dma_buf fd with the anon_file struct file, i.e. all dma_bufs share the same file.”…”�”}”(hjNPh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:145: ./include/linux/dma-buf.h”h´KýhjPubhÌ)�”}”(hX–Hence exporters need to setup their own file (and address_space) association by setting vma->vm_file and adjusting vma->vm_pgoff in the dma_buf mmap callback. In the specific case of a gem driver the exporter could use the shmem file already provided by gem (and set vm_pgoff = 0). Exporters can then zap ptes by unmapping the corresponding range of the struct address_space associated with their own file.”h]”hX–Hence exporters need to setup their own file (and address_space) association by setting vma->vm_file and adjusting vma->vm_pgoff in the dma_buf mmap callback. In the specific case of a gem driver the exporter could use the shmem file already provided by gem (and set vm_pgoff = 0). Exporters can then zap ptes by unmapping the corresponding range of the struct address_space associated with their own file.”…”�”}”(hj]Ph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:145: ./include/linux/dma-buf.h”h´MhjPubhÌ)�”}”(hŒThis callback is optional.”h]”hŒThis callback is optional.”…”�”}”(hjlPh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:145: ./include/linux/dma-buf.h”h´M hjPubhÌ)�”}”(hŒReturns:”h]”hŒReturns:”…”�”}”(hj{Ph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:145: ./include/linux/dma-buf.h”h´MhjPubhÌ)�”}”(hŒ10 on success or a negative error code on failure.”h]”hŒ10 on success or a negative error code on failure.”…”�”}”(hjŠPh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jPh´MhjPubeh}”(h]”h ]”h"]”h$]”h&]”uh1jØ hjPubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³jPh´Mhj†Iubj¹ )�”}”(hŒ‰``vmap`` [optional] creates a virtual mapping for the buffer into kernel address space. Same restrictions as for vmap and friends apply. ”h]”(j¿ )�”}”(hŒ``vmap``”h]”jâ)�”}”(hjªPh]”hŒvmap”…”�”}”(hj¬Ph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj¨Pubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:145: ./include/linux/dma-buf.h”h´K#hj¤PubjÙ )�”}”(hhh]”hÌ)�”}”(hŒ[optional] creates a virtual mapping for the buffer into kernel address space. Same restrictions as for vmap and friends apply.”h]”hŒ[optional] creates a virtual mapping for the buffer into kernel address space. Same restrictions as for vmap and friends apply.”…”�”}”(hjÃPh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:145: ./include/linux/dma-buf.h”h´K"hjÀPubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hj¤Pubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³j¿Ph´K#hj†Iubj¹ )�”}”(hŒ3``vunmap`` [optional] unmaps a vmap from the buffer”h]”(j¿ )�”}”(hŒ ``vunmap``”h]”jâ)�”}”(hjäPh]”hŒvunmap”…”�”}”(hjæPh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjâPubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:145: ./include/linux/dma-buf.h”h´K#hjÞPubjÙ )�”}”(hhh]”hÌ)�”}”(hŒ([optional] unmaps a vmap from the buffer”h]”hŒ([optional] unmaps a vmap from the buffer”…”�”}”(hjýPh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:145: ./include/linux/dma-buf.h”h´K$hjúPubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hjÞPubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³jùPh´K#hj†Iubeh}”(h]”h ]”h"]”h$]”h&]”uh1j³ hj>Iubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jg hjèh²hh³Nh´NubjÉ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÕŒdma_buf (C struct)”Œ c.dma_buf”hNt”auh1jÈhjèh²hh³Nh´NubjÛ)�”}”(hhh]”(jà)�”}”(hŒdma_buf”h]”jæ)�”}”(hŒstruct dma_buf”h]”(jì)�”}”(hjïh]”hŒstruct”…”�”}”(hj>Qh²hh³Nh´Nubah}”(h]”h ]”jøah"]”h$]”h&]”uh1jëhj:Qh²hh³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:145: ./include/linux/dma-buf.h”h´K*ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjLQh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj:Qh²hh³jKQh´K*ubj )�”}”(hŒdma_buf”h]”j )�”}”(hj8Qh]”hŒdma_buf”…”�”}”(hj^Qh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjZQubah}”(h]”h ]”(j' j( eh"]”h$]”h&]”j÷jøuh1j hj:Qh²hh³jKQh´K*ubeh}”(h]”h ]”h"]”h$]”h&]”j÷jøj2 ˆuh1jåj3 j4 hj6Qh²hh³jKQh´K*ubah}”(h]”j1Qah ]”(j8 j9 eh"]”h$]”h&]”j= ˆj> )j? huh1jßh³jKQh´K*hj3Qh²hubjA )�”}”(hhh]”hÌ)�”}”(hŒshared buffer object”h]”hŒshared buffer object”…”�”}”(hj€Qh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:145: ./include/linux/dma-buf.h”h´Mhj}Qh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j@ hj3Qh²hh³jKQh´K*ubeh}”(h]”h ]”(jîŒstruct”eh"]”h$]”h&]”ja jîjb j˜Qjc j˜Qjd ‰je ‰jf ‰uh1jÚh²hhjèh³Nh´Nubjh )�”}”(hX’**Definition**:: struct dma_buf { size_t size; struct file *file; struct list_head attachments; const struct dma_buf_ops *ops; unsigned vmapping_counter; struct iosys_map vmap_ptr; const char *exp_name; const char *name; spinlock_t name_lock; struct module *owner; struct list_head list_node; void *priv; struct dma_resv *resv; wait_queue_head_t poll; struct dma_buf_poll_cb_t { struct dma_fence_cb cb; wait_queue_head_t *poll; __poll_t active; } cb_in, cb_out; }; **Members** ``size`` Size of the buffer; invariant over the lifetime of the buffer. ``file`` File pointer used for sharing buffers across, and for refcounting. See dma_buf_get() and dma_buf_put(). ``attachments`` List of dma_buf_attachment that denotes all devices attached, protected by :c:type:`dma_resv` lock **resv**. ``ops`` dma_buf_ops associated with this buffer object. ``vmapping_counter`` Used internally to refcnt the vmaps returned by dma_buf_vmap(). Protected by **resv**. ``vmap_ptr`` The current vmap ptr if **vmapping_counter** > 0. Protected by **resv**. ``exp_name`` Name of the exporter; useful for debugging. Must not be NULL ``name`` Userspace-provided name. Default value is NULL. If not NULL, length cannot be longer than DMA_BUF_NAME_LEN, including NIL char. Useful for accounting and debugging. Read/Write accesses are protected by **name_lock** See the IOCTLs DMA_BUF_SET_NAME or DMA_BUF_SET_NAME_A/B ``name_lock`` Spinlock to protect name access for read access. ``owner`` Pointer to exporter module; used for refcounting when exporter is a kernel module. ``list_node`` node for dma_buf accounting and debugging. ``priv`` exporter specific private data for this buffer object. ``resv`` Reservation object linked to this dma-buf. IMPLICIT SYNCHRONIZATION RULES: Drivers which support implicit synchronization of buffer access as e.g. exposed in `Implicit Fence Poll Support`_ must follow the below rules. - Drivers must add a read fence through dma_resv_add_fence() with the DMA_RESV_USAGE_READ flag for anything the userspace API considers a read access. This highly depends upon the API and window system. - Similarly drivers must add a write fence through dma_resv_add_fence() with the DMA_RESV_USAGE_WRITE flag for anything the userspace API considers write access. - Drivers may just always add a write fence, since that only causes unnecessary synchronization, but no correctness issues. - Some drivers only expose a synchronous userspace API with no pipelining across drivers. These do not set any fences for their access. An example here is v4l. - Driver should use dma_resv_usage_rw() when retrieving fences as dependency for implicit synchronization. DYNAMIC IMPORTER RULES: Dynamic importers, see dma_buf_attachment_is_dynamic(), have additional constraints on how they set up fences: - Dynamic importers must obey the write fences and wait for them to signal before allowing access to the buffer's underlying storage through the device. - Dynamic importers should set fences for any access that they can't disable immediately from their :c:type:`dma_buf_attach_ops.invalidate_mappings ` callback. IMPORTANT: All drivers and memory management related functions must obey the struct dma_resv rules, specifically the rules for updating and obeying fences. See enum dma_resv_usage for further descriptions. ``poll`` for userspace poll support ``cb_in`` for userspace poll support ``cb_out`` for userspace poll support”h]”(hÌ)�”}”(hŒ**Definition**::”h]”(jr )�”}”(hŒ**Definition**”h]”hŒ Definition”…”�”}”(hj¤Qh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hj QubhŒ:”…”�”}”(hj Qh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:145: ./include/linux/dma-buf.h”h´MhjœQubjè)�”}”(hXstruct dma_buf { size_t size; struct file *file; struct list_head attachments; const struct dma_buf_ops *ops; unsigned vmapping_counter; struct iosys_map vmap_ptr; const char *exp_name; const char *name; spinlock_t name_lock; struct module *owner; struct list_head list_node; void *priv; struct dma_resv *resv; wait_queue_head_t poll; struct dma_buf_poll_cb_t { struct dma_fence_cb cb; wait_queue_head_t *poll; __poll_t active; } cb_in, cb_out; };”h]”hXstruct dma_buf { size_t size; struct file *file; struct list_head attachments; const struct dma_buf_ops *ops; unsigned vmapping_counter; struct iosys_map vmap_ptr; const char *exp_name; const char *name; spinlock_t name_lock; struct module *owner; struct list_head list_node; void *priv; struct dma_resv *resv; wait_queue_head_t poll; struct dma_buf_poll_cb_t { struct dma_fence_cb cb; wait_queue_head_t *poll; __poll_t active; } cb_in, cb_out; };”…”�”}”hj½Qsbah}”(h]”h ]”h"]”h$]”h&]”j÷jøuh1jçh³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:145: ./include/linux/dma-buf.h”h´M!hjœQubhÌ)�”}”(hŒ **Members**”h]”jr )�”}”(hjÎQh]”hŒMembers”…”�”}”(hjÐQh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hjÌQubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:145: ./include/linux/dma-buf.h”h´M7hjœQubj´ )�”}”(hhh]”(j¹ )�”}”(hŒH``size`` Size of the buffer; invariant over the lifetime of the buffer. ”h]”(j¿ )�”}”(hŒ``size``”h]”jâ)�”}”(hjíQh]”hŒsize”…”�”}”(hjïQh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjëQubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:145: ./include/linux/dma-buf.h”h´M)hjçQubjÙ )�”}”(hhh]”hÌ)�”}”(hŒ>Size of the buffer; invariant over the lifetime of the buffer.”h]”hŒ>Size of the buffer; invariant over the lifetime of the buffer.”…”�”}”(hjRh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jRh´M)hjRubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hjçQubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³jRh´M)hjäQubj¹ )�”}”(hŒq``file`` File pointer used for sharing buffers across, and for refcounting. See dma_buf_get() and dma_buf_put(). ”h]”(j¿ )�”}”(hŒ``file``”h]”jâ)�”}”(hj&Rh]”hŒfile”…”�”}”(hj(Rh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj$Rubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:145: ./include/linux/dma-buf.h”h´M1hj RubjÙ )�”}”(hhh]”hÌ)�”}”(hŒgFile pointer used for sharing buffers across, and for refcounting. See dma_buf_get() and dma_buf_put().”h]”hŒgFile pointer used for sharing buffers across, and for refcounting. See dma_buf_get() and dma_buf_put().”…”�”}”(hj?Rh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:145: ./include/linux/dma-buf.h”h´M0hj 0. Protected by **resv**. ”h]”(j¿ )�”}”(hŒ ``vmap_ptr``”h]”jâ)�”}”(hjTSh]”hŒvmap_ptr”…”�”}”(hjVSh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjRSubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:145: ./include/linux/dma-buf.h”h´MKhjNSubjÙ )�”}”(hhh]”hÌ)�”}”(hŒHThe current vmap ptr if **vmapping_counter** > 0. Protected by **resv**.”h]”(hŒThe current vmap ptr if ”…”�”}”(hjmSh²hh³Nh´Nubjr )�”}”(hŒ**vmapping_counter**”h]”hŒvmapping_counter”…”�”}”(hjuSh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hjmSubhŒ > 0. Protected by ”…”�”}”(hjmSh²hh³Nh´Nubjr )�”}”(hŒ**resv**”h]”hŒresv”…”�”}”(hj‡Sh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hjmSubhŒ.”…”�”}”(hjmSh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jiSh´MKhjjSubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hjNSubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³jiSh´MKhjäQubj¹ )�”}”(hŒJ``exp_name`` Name of the exporter; useful for debugging. Must not be NULL ”h]”(j¿ )�”}”(hŒ ``exp_name``”h]”jâ)�”}”(hj±Sh]”hŒexp_name”…”�”}”(hj³Sh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj¯Subah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:145: ./include/linux/dma-buf.h”h´MQhj«SubjÙ )�”}”(hhh]”hÌ)�”}”(hŒTubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:145: ./include/linux/dma-buf.h”h´Mchj:TubjÙ )�”}”(hhh]”hÌ)�”}”(hŒ0Spinlock to protect name access for read access.”h]”hŒ0Spinlock to protect name access for read access.”…”�”}”(hjYTh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jUTh´MchjVTubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hj:Tubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³jUTh´MchjäQubj¹ )�”}”(hŒ]``owner`` Pointer to exporter module; used for refcounting when exporter is a kernel module. ”h]”(j¿ )�”}”(hŒ ``owner``”h]”jâ)�”}”(hjyTh]”hŒowner”…”�”}”(hj{Th²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjwTubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:145: ./include/linux/dma-buf.h”h´MhhjsTubjÙ )�”}”(hhh]”hÌ)�”}”(hŒRPointer to exporter module; used for refcounting when exporter is a kernel module.”h]”hŒRPointer to exporter module; used for refcounting when exporter is a kernel module.”…”�”}”(hj’Th²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:145: ./include/linux/dma-buf.h”h´Mghj�Tubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hjsTubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³jŽTh´MhhjäQubj¹ )�”}”(hŒ9``list_node`` node for dma_buf accounting and debugging. ”h]”(j¿ )�”}”(hŒ ``list_node``”h]”jâ)�”}”(hj³Th]”hŒ list_node”…”�”}”(hjµTh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj±Tubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:145: ./include/linux/dma-buf.h”h´Mnhj­TubjÙ )�”}”(hhh]”hÌ)�”}”(hŒ*node for dma_buf accounting and debugging.”h]”hŒ*node for dma_buf accounting and debugging.”…”�”}”(hjÌTh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jÈTh´MnhjÉTubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hj­Tubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³jÈTh´MnhjäQubj¹ )�”}”(hŒ@``priv`` exporter specific private data for this buffer object. ”h]”(j¿ )�”}”(hŒ``priv``”h]”jâ)�”}”(hjìTh]”hŒpriv”…”�”}”(hjîTh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjêTubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:145: ./include/linux/dma-buf.h”h´MqhjæTubjÙ )�”}”(hhh]”hÌ)�”}”(hŒ6exporter specific private data for this buffer object.”h]”hŒ6exporter specific private data for this buffer object.”…”�”}”(hjUh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jUh´MqhjUubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hjæTubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³jUh´MqhjäQubj¹ )�”}”(hXž``resv`` Reservation object linked to this dma-buf. IMPLICIT SYNCHRONIZATION RULES: Drivers which support implicit synchronization of buffer access as e.g. exposed in `Implicit Fence Poll Support`_ must follow the below rules. - Drivers must add a read fence through dma_resv_add_fence() with the DMA_RESV_USAGE_READ flag for anything the userspace API considers a read access. This highly depends upon the API and window system. - Similarly drivers must add a write fence through dma_resv_add_fence() with the DMA_RESV_USAGE_WRITE flag for anything the userspace API considers write access. - Drivers may just always add a write fence, since that only causes unnecessary synchronization, but no correctness issues. - Some drivers only expose a synchronous userspace API with no pipelining across drivers. These do not set any fences for their access. An example here is v4l. - Driver should use dma_resv_usage_rw() when retrieving fences as dependency for implicit synchronization. DYNAMIC IMPORTER RULES: Dynamic importers, see dma_buf_attachment_is_dynamic(), have additional constraints on how they set up fences: - Dynamic importers must obey the write fences and wait for them to signal before allowing access to the buffer's underlying storage through the device. - Dynamic importers should set fences for any access that they can't disable immediately from their :c:type:`dma_buf_attach_ops.invalidate_mappings ` callback. IMPORTANT: All drivers and memory management related functions must obey the struct dma_resv rules, specifically the rules for updating and obeying fences. See enum dma_resv_usage for further descriptions. ”h]”(j¿ )�”}”(hŒ``resv``”h]”jâ)�”}”(hj%Uh]”hŒresv”…”�”}”(hj'Uh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj#Uubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:145: ./include/linux/dma-buf.h”h´M hjUubjÙ )�”}”(hhh]”(hÌ)�”}”(hŒ*Reservation object linked to this dma-buf.”h]”hŒ*Reservation object linked to this dma-buf.”…”�”}”(hj>Uh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:145: ./include/linux/dma-buf.h”h´Muhj;UubhÌ)�”}”(hŒIMPLICIT SYNCHRONIZATION RULES:”h]”hŒIMPLICIT SYNCHRONIZATION RULES:”…”�”}”(hjMUh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:145: ./include/linux/dma-buf.h”h´Mwhj;UubhÌ)�”}”(hŒŽDrivers which support implicit synchronization of buffer access as e.g. exposed in `Implicit Fence Poll Support`_ must follow the below rules.”h]”(hŒSDrivers which support implicit synchronization of buffer access as e.g. exposed in ”…”�”}”(hj\Uh²hh³Nh´NubjÀ)�”}”(hŒ`Implicit Fence Poll Support`_”h]”hŒImplicit Fence Poll Support”…”�”}”(hjdUh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”ŒImplicit Fence Poll Support”jÑjuh1j¿hj\UjÓKubhŒ must follow the below rules.”…”�”}”(hj\Uh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:145: ./include/linux/dma-buf.h”h´Myhj;Uubhþ)�”}”(hhh]”(j)�”}”(hŒÉDrivers must add a read fence through dma_resv_add_fence() with the DMA_RESV_USAGE_READ flag for anything the userspace API considers a read access. This highly depends upon the API and window system. ”h]”hÌ)�”}”(hŒÈDrivers must add a read fence through dma_resv_add_fence() with the DMA_RESV_USAGE_READ flag for anything the userspace API considers a read access. This highly depends upon the API and window system.”h]”hŒÈDrivers must add a read fence through dma_resv_add_fence() with the DMA_RESV_USAGE_READ flag for anything the userspace API considers a read access. This highly depends upon the API and window system.”…”�”}”(hj†Uh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:145: ./include/linux/dma-buf.h”h´M}hj‚Uubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjUubj)�”}”(hŒ Similarly drivers must add a write fence through dma_resv_add_fence() with the DMA_RESV_USAGE_WRITE flag for anything the userspace API considers write access. ”h]”hÌ)�”}”(hŒŸSimilarly drivers must add a write fence through dma_resv_add_fence() with the DMA_RESV_USAGE_WRITE flag for anything the userspace API considers write access.”h]”hŒŸSimilarly drivers must add a write fence through dma_resv_add_fence() with the DMA_RESV_USAGE_WRITE flag for anything the userspace API considers write access.”…”�”}”(hjŸUh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:145: ./include/linux/dma-buf.h”h´M�hj›Uubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjUubj)�”}”(hŒzDrivers may just always add a write fence, since that only causes unnecessary synchronization, but no correctness issues. ”h]”hÌ)�”}”(hŒyDrivers may just always add a write fence, since that only causes unnecessary synchronization, but no correctness issues.”h]”hŒyDrivers may just always add a write fence, since that only causes unnecessary synchronization, but no correctness issues.”…”�”}”(hj¸Uh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:145: ./include/linux/dma-buf.h”h´M…hj´Uubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjUubj)�”}”(hŒžSome drivers only expose a synchronous userspace API with no pipelining across drivers. These do not set any fences for their access. An example here is v4l. ”h]”hÌ)�”}”(hŒ�Some drivers only expose a synchronous userspace API with no pipelining across drivers. These do not set any fences for their access. An example here is v4l.”h]”hŒ�Some drivers only expose a synchronous userspace API with no pipelining across drivers. These do not set any fences for their access. An example here is v4l.”…”�”}”(hjÑUh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:145: ./include/linux/dma-buf.h”h´MˆhjÍUubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjUubj)�”}”(hŒiDriver should use dma_resv_usage_rw() when retrieving fences as dependency for implicit synchronization. ”h]”hÌ)�”}”(hŒhDriver should use dma_resv_usage_rw() when retrieving fences as dependency for implicit synchronization.”h]”hŒhDriver should use dma_resv_usage_rw() when retrieving fences as dependency for implicit synchronization.”…”�”}”(hjêUh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:145: ./include/linux/dma-buf.h”h´MŒhjæUubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjUubeh}”(h]”h ]”h"]”h$]”h&]”jRjSuh1hýh³j”Uh´M}hj;UubhÌ)�”}”(hŒDYNAMIC IMPORTER RULES:”h]”hŒDYNAMIC IMPORTER RULES:”…”�”}”(hjVh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:145: ./include/linux/dma-buf.h”h´M�hj;UubhÌ)�”}”(hŒnDynamic importers, see dma_buf_attachment_is_dynamic(), have additional constraints on how they set up fences:”h]”hŒnDynamic importers, see dma_buf_attachment_is_dynamic(), have additional constraints on how they set up fences:”…”�”}”(hjVh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:145: ./include/linux/dma-buf.h”h´M‘hj;Uubhþ)�”}”(hhh]”(j)�”}”(hŒ—Dynamic importers must obey the write fences and wait for them to signal before allowing access to the buffer's underlying storage through the device. ”h]”hÌ)�”}”(hŒ–Dynamic importers must obey the write fences and wait for them to signal before allowing access to the buffer's underlying storage through the device.”h]”hŒ˜Dynamic importers must obey the write fences and wait for them to signal before allowing access to the buffer’s underlying storage through the device.”…”�”}”(hj*Vh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:145: ./include/linux/dma-buf.h”h´M”hj&Vubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj#Vubj)�”}”(hŒ²Dynamic importers should set fences for any access that they can't disable immediately from their :c:type:`dma_buf_attach_ops.invalidate_mappings ` callback. ”h]”hÌ)�”}”(hŒ±Dynamic importers should set fences for any access that they can't disable immediately from their :c:type:`dma_buf_attach_ops.invalidate_mappings ` callback.”h]”(hŒdDynamic importers should set fences for any access that they can’t disable immediately from their ”…”�”}”(hjCVh²hh³Nh´Nubh)�”}”(hŒE:c:type:`dma_buf_attach_ops.invalidate_mappings `”h]”jâ)�”}”(hjMVh]”hŒ&dma_buf_attach_ops.invalidate_mappings”…”�”}”(hjOVh²hh³Nh´Nubah}”(h]”h ]”(jíjîŒc-type”eh"]”h$]”h&]”uh1jáhjKVubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”júŒ refdomain”jîŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰j³j·jŒdma_buf_attach_ops”uh1hh³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:145: ./include/linux/dma-buf.h”h´M˜hjCVubhŒ callback.”…”�”}”(hjCVh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jjVh´M˜hj?Vubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj#Vubeh}”(h]”h ]”h"]”h$]”h&]”jRjSuh1hýh³j8Vh´M”hj;UubhÌ)�”}”(hŒ IMPORTANT:”h]”hŒ IMPORTANT:”…”�”}”(hj�Vh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:145: ./include/linux/dma-buf.h”h´Mœhj;UubhÌ)�”}”(hŒÂAll drivers and memory management related functions must obey the struct dma_resv rules, specifically the rules for updating and obeying fences. See enum dma_resv_usage for further descriptions.”h]”hŒÂAll drivers and memory management related functions must obey the struct dma_resv rules, specifically the rules for updating and obeying fences. See enum dma_resv_usage for further descriptions.”…”�”}”(hj�Vh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:145: ./include/linux/dma-buf.h”h´Mžhj;Uubeh}”(h]”h ]”h"]”h$]”h&]”uh1jØ hjUubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³j:Uh´M hjäQubj¹ )�”}”(hŒ$``poll`` for userspace poll support ”h]”(j¿ )�”}”(hŒ``poll``”h]”jâ)�”}”(hj±Vh]”hŒpoll”…”�”}”(hj³Vh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj¯Vubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:145: ./include/linux/dma-buf.h”h´M¦hj«VubjÙ )�”}”(hhh]”hÌ)�”}”(hŒfor userspace poll support”h]”hŒfor userspace poll support”…”�”}”(hjÊVh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jÆVh´M¦hjÇVubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hj«Vubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³jÆVh´M¦hjäQubj¹ )�”}”(hŒ%``cb_in`` for userspace poll support ”h]”(j¿ )�”}”(hŒ ``cb_in``”h]”jâ)�”}”(hjêVh]”hŒcb_in”…”�”}”(hjìVh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjèVubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:145: ./include/linux/dma-buf.h”h´M©hjäVubjÙ )�”}”(hhh]”hÌ)�”}”(hŒfor userspace poll support”h]”hŒfor userspace poll support”…”�”}”(hjWh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jÿVh´M©hjWubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hjäVubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³jÿVh´M©hjäQubj¹ )�”}”(hŒ%``cb_out`` for userspace poll support”h]”(j¿ )�”}”(hŒ ``cb_out``”h]”jâ)�”}”(hj#Wh]”hŒcb_out”…”�”}”(hj%Wh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj!Wubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:145: ./include/linux/dma-buf.h”h´M©hjWubjÙ )�”}”(hhh]”hÌ)�”}”(hŒfor userspace poll support”h]”hŒfor userspace poll support”…”�”}”(hj`.”h]”(hŒ-Device DMA access is handled by the separate ”…”�”}”(hjšWh²hh³Nh´Nubh)�”}”(hŒ8:c:type:`struct dma_buf_attachment `”h]”jâ)�”}”(hj¤Wh]”hŒstruct dma_buf_attachment”…”�”}”(hj¦Wh²hh³Nh´Nubah}”(h]”h ]”(jíjîŒc-type”eh"]”h$]”h&]”uh1jáhj¢Wubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”júŒ refdomain”jîŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰j³j·jŒdma_buf_attachment”uh1hh³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:145: ./include/linux/dma-buf.h”h´M#hjšWubhŒ.”…”�”}”(hjšWh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jÁWh´M#hjèh²hubjÉ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÕŒdma_buf_attach_ops (C struct)”Œc.dma_buf_attach_ops”hNt”auh1jÈhjèh²hh³Nh´NubjÛ)�”}”(hhh]”(jà)�”}”(hŒdma_buf_attach_ops”h]”jæ)�”}”(hŒstruct dma_buf_attach_ops”h]”(jì)�”}”(hjïh]”hŒstruct”…”�”}”(hjåWh²hh³Nh´Nubah}”(h]”h ]”jøah"]”h$]”h&]”uh1jëhjáWh²hh³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:145: ./include/linux/dma-buf.h”h´M(ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjóWh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjáWh²hh³jòWh´M(ubj )�”}”(hŒdma_buf_attach_ops”h]”j )�”}”(hjßWh]”hŒdma_buf_attach_ops”…”�”}”(hjXh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjXubah}”(h]”h ]”(j' j( eh"]”h$]”h&]”j÷jøuh1j hjáWh²hh³jòWh´M(ubeh}”(h]”h ]”h"]”h$]”h&]”j÷jøj2 ˆuh1jåj3 j4 hjÝWh²hh³jòWh´M(ubah}”(h]”jØWah ]”(j8 j9 eh"]”h$]”h&]”j= ˆj> )j? huh1jßh³jòWh´M(hjÚWh²hubjA )�”}”(hhh]”hÌ)�”}”(hŒ%importer operations for an attachment”h]”hŒ%importer operations for an attachment”…”�”}”(hj'Xh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:145: ./include/linux/dma-buf.h”h´M³hj$Xh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j@ hjÚWh²hh³jòWh´M(ubeh}”(h]”h ]”(jîŒstruct”eh"]”h$]”h&]”ja jîjb j?Xjc j?Xjd ‰je ‰jf ‰uh1jÚh²hhjèh³Nh´Nubjh )�”}”(hX6**Definition**:: struct dma_buf_attach_ops { bool allow_peer2peer; void (*invalidate_mappings)(struct dma_buf_attachment *attach); }; **Members** ``allow_peer2peer`` If this is set to true the importer must be able to handle peer resources without struct pages. ``invalidate_mappings`` [optional] notification that the DMA-buf is moving If this callback is provided the framework can avoid pinning the backing store while mappings exists. This callback is called with the lock of the reservation object associated with the dma_buf held and the mapping function must be called with this lock held as well. This makes sure that no mapping is created concurrently with an ongoing move operation. See the kdoc for dma_buf_invalidate_mappings() for details on the required behavior.”h]”(hÌ)�”}”(hŒ**Definition**::”h]”(jr )�”}”(hŒ**Definition**”h]”hŒ Definition”…”�”}”(hjKXh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hjGXubhŒ:”…”�”}”(hjGXh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:145: ./include/linux/dma-buf.h”h´M·hjCXubjè)�”}”(hŒ|struct dma_buf_attach_ops { bool allow_peer2peer; void (*invalidate_mappings)(struct dma_buf_attachment *attach); };”h]”hŒ|struct dma_buf_attach_ops { bool allow_peer2peer; void (*invalidate_mappings)(struct dma_buf_attachment *attach); };”…”�”}”hjdXsbah}”(h]”h ]”h"]”h$]”h&]”j÷jøuh1jçh³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:145: ./include/linux/dma-buf.h”h´M¹hjCXubhÌ)�”}”(hŒ **Members**”h]”jr )�”}”(hjuXh]”hŒMembers”…”�”}”(hjwXh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hjsXubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:145: ./include/linux/dma-buf.h”h´M¾hjCXubj´ )�”}”(hhh]”(j¹ )�”}”(hŒt``allow_peer2peer`` If this is set to true the importer must be able to handle peer resources without struct pages. ”h]”(j¿ )�”}”(hŒ``allow_peer2peer``”h]”jâ)�”}”(hj”Xh]”hŒallow_peer2peer”…”�”}”(hj–Xh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj’Xubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:145: ./include/linux/dma-buf.h”h´M»hjŽXubjÙ )�”}”(hhh]”hÌ)�”}”(hŒ_If this is set to true the importer must be able to handle peer resources without struct pages.”h]”hŒ_If this is set to true the importer must be able to handle peer resources without struct pages.”…”�”}”(hj­Xh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:145: ./include/linux/dma-buf.h”h´MºhjªXubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hjŽXubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³j©Xh´M»hj‹Xubj¹ )�”}”(hX``invalidate_mappings`` [optional] notification that the DMA-buf is moving If this callback is provided the framework can avoid pinning the backing store while mappings exists. This callback is called with the lock of the reservation object associated with the dma_buf held and the mapping function must be called with this lock held as well. This makes sure that no mapping is created concurrently with an ongoing move operation. See the kdoc for dma_buf_invalidate_mappings() for details on the required behavior.”h]”(j¿ )�”}”(hŒ``invalidate_mappings``”h]”jâ)�”}”(hjÎXh]”hŒinvalidate_mappings”…”�”}”(hjÐXh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjÌXubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:145: ./include/linux/dma-buf.h”h´MÌhjÈXubjÙ )�”}”(hhh]”(hÌ)�”}”(hŒ2[optional] notification that the DMA-buf is moving”h]”hŒ2[optional] notification that the DMA-buf is moving”…”�”}”(hjçXh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:145: ./include/linux/dma-buf.h”h´MÂhjäXubhÌ)�”}”(hŒeIf this callback is provided the framework can avoid pinning the backing store while mappings exists.”h]”hŒeIf this callback is provided the framework can avoid pinning the backing store while mappings exists.”…”�”}”(hjöXh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:145: ./include/linux/dma-buf.h”h´MÄhjäXubhÌ)�”}”(hŒýThis callback is called with the lock of the reservation object associated with the dma_buf held and the mapping function must be called with this lock held as well. This makes sure that no mapping is created concurrently with an ongoing move operation.”h]”hŒýThis callback is called with the lock of the reservation object associated with the dma_buf held and the mapping function must be called with this lock held as well. This makes sure that no mapping is created concurrently with an ongoing move operation.”…”�”}”(hjYh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:145: ./include/linux/dma-buf.h”h´MÇhjäXubhÌ)�”}”(hŒTSee the kdoc for dma_buf_invalidate_mappings() for details on the required behavior.”h]”hŒTSee the kdoc for dma_buf_invalidate_mappings() for details on the required behavior.”…”�”}”(hjYh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jãXh´MÌhjäXubeh}”(h]”h ]”h"]”h$]”h&]”uh1jØ hjÈXubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³jãXh´MÌhj‹Xubeh}”(h]”h ]”h"]”h$]”h&]”uh1j³ hjCXubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jg hjèh²hh³Nh´NubhÌ)�”}”(hŒ**Description**”h]”jr )�”}”(hj=Yh]”hŒ Description”…”�”}”(hj?Yh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hj;Yubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:145: ./include/linux/dma-buf.h”h´MÐhjèh²hubhÌ)�”}”(hŒ2Attachment operations implemented by the importer.”h]”hŒ2Attachment operations implemented by the importer.”…”�”}”(hjSYh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:145: ./include/linux/dma-buf.h”h´M´hjèh²hubjÉ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÕŒdma_buf_attachment (C struct)”Œc.dma_buf_attachment”hNt”auh1jÈhjèh²hh³Nh´NubjÛ)�”}”(hhh]”(jà)�”}”(hŒdma_buf_attachment”h]”jæ)�”}”(hŒstruct dma_buf_attachment”h]”(jì)�”}”(hjïh]”hŒstruct”…”�”}”(hj{Yh²hh³Nh´Nubah}”(h]”h ]”jøah"]”h$]”h&]”uh1jëhjwYh²hh³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:145: ./include/linux/dma-buf.h”h´M¹ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‰Yh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjwYh²hh³jˆYh´M¹ubj )�”}”(hŒdma_buf_attachment”h]”j )�”}”(hjuYh]”hŒdma_buf_attachment”…”�”}”(hj›Yh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj—Yubah}”(h]”h ]”(j' j( eh"]”h$]”h&]”j÷jøuh1j hjwYh²hh³jˆYh´M¹ubeh}”(h]”h ]”h"]”h$]”h&]”j÷jøj2 ˆuh1jåj3 j4 hjsYh²hh³jˆYh´M¹ubah}”(h]”jnYah ]”(j8 j9 eh"]”h$]”h&]”j= ˆj> )j? huh1jßh³jˆYh´M¹hjpYh²hubjA )�”}”(hhh]”hÌ)�”}”(hŒ#holds device-buffer attachment data”h]”hŒ#holds device-buffer attachment data”…”�”}”(hj½Yh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:145: ./include/linux/dma-buf.h”h´MÒhjºYh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j@ hjpYh²hh³jˆYh´M¹ubeh}”(h]”h ]”(jîŒstruct”eh"]”h$]”h&]”ja jîjb jÕYjc jÕYjd ‰je ‰jf ‰uh1jÚh²hhjèh³Nh´Nubjh )�”}”(hX**Definition**:: struct dma_buf_attachment { struct dma_buf *dmabuf; struct device *dev; struct list_head node; bool peer2peer; const struct dma_buf_attach_ops *importer_ops; void *importer_priv; void *priv; }; **Members** ``dmabuf`` buffer for this attachment. ``dev`` device attached to the buffer. ``node`` list of dma_buf_attachment, protected by dma_resv lock of the dmabuf. ``peer2peer`` true if the importer can handle peer resources without pages. ``importer_ops`` importer operations for this attachment, if provided dma_buf_map/unmap_attachment() must be called with the dma_resv lock held. ``importer_priv`` importer specific attachment data. ``priv`` exporter specific attachment data.”h]”(hÌ)�”}”(hŒ**Definition**::”h]”(jr )�”}”(hŒ**Definition**”h]”hŒ Definition”…”�”}”(hjáYh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hjÝYubhŒ:”…”�”}”(hjÝYh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:145: ./include/linux/dma-buf.h”h´MÖhjÙYubjè)�”}”(hŒÝstruct dma_buf_attachment { struct dma_buf *dmabuf; struct device *dev; struct list_head node; bool peer2peer; const struct dma_buf_attach_ops *importer_ops; void *importer_priv; void *priv; };”h]”hŒÝstruct dma_buf_attachment { struct dma_buf *dmabuf; struct device *dev; struct list_head node; bool peer2peer; const struct dma_buf_attach_ops *importer_ops; void *importer_priv; void *priv; };”…”�”}”hjúYsbah}”(h]”h ]”h"]”h$]”h&]”j÷jøuh1jçh³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:145: ./include/linux/dma-buf.h”h´MØhjÙYubhÌ)�”}”(hŒ **Members**”h]”jr )�”}”(hj Zh]”hŒMembers”…”�”}”(hj Zh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hj Zubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:145: ./include/linux/dma-buf.h”h´MâhjÙYubj´ )�”}”(hhh]”(j¹ )�”}”(hŒ'``dmabuf`` buffer for this attachment. ”h]”(j¿ )�”}”(hŒ ``dmabuf``”h]”jâ)�”}”(hj*Zh]”hŒdmabuf”…”�”}”(hj,Zh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj(Zubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:145: ./include/linux/dma-buf.h”h´MÔhj$ZubjÙ )�”}”(hhh]”hÌ)�”}”(hŒbuffer for this attachment.”h]”hŒbuffer for this attachment.”…”�”}”(hjCZh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j?Zh´MÔhj@Zubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hj$Zubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³j?Zh´MÔhj!Zubj¹ )�”}”(hŒ'``dev`` device attached to the buffer. ”h]”(j¿ )�”}”(hŒ``dev``”h]”jâ)�”}”(hjcZh]”hŒdev”…”�”}”(hjeZh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjaZubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:145: ./include/linux/dma-buf.h”h´MÕhj]ZubjÙ )�”}”(hhh]”hÌ)�”}”(hŒdevice attached to the buffer.”h]”hŒdevice attached to the buffer.”…”�”}”(hj|Zh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jxZh´MÕhjyZubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hj]Zubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³jxZh´MÕhj!Zubj¹ )�”}”(hŒO``node`` list of dma_buf_attachment, protected by dma_resv lock of the dmabuf. ”h]”(j¿ )�”}”(hŒ``node``”h]”jâ)�”}”(hjœZh]”hŒnode”…”�”}”(hjžZh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjšZubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:145: ./include/linux/dma-buf.h”h´MÖhj–ZubjÙ )�”}”(hhh]”hÌ)�”}”(hŒElist of dma_buf_attachment, protected by dma_resv lock of the dmabuf.”h]”hŒElist of dma_buf_attachment, protected by dma_resv lock of the dmabuf.”…”�”}”(hjµZh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j±Zh´MÖhj²Zubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hj–Zubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³j±Zh´MÖhj!Zubj¹ )�”}”(hŒL``peer2peer`` true if the importer can handle peer resources without pages. ”h]”(j¿ )�”}”(hŒ ``peer2peer``”h]”jâ)�”}”(hjÕZh]”hŒ peer2peer”…”�”}”(hj×Zh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjÓZubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:145: ./include/linux/dma-buf.h”h´M×hjÏZubjÙ )�”}”(hhh]”hÌ)�”}”(hŒ=true if the importer can handle peer resources without pages.”h]”hŒ=true if the importer can handle peer resources without pages.”…”�”}”(hjîZh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jêZh´M×hjëZubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hjÏZubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³jêZh´M×hj!Zubj¹ )�”}”(hŒ‘``importer_ops`` importer operations for this attachment, if provided dma_buf_map/unmap_attachment() must be called with the dma_resv lock held. ”h]”(j¿ )�”}”(hŒ``importer_ops``”h]”jâ)�”}”(hj[h]”hŒ importer_ops”…”�”}”(hj[h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj [ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:145: ./include/linux/dma-buf.h”h´MÚhj[ubjÙ )�”}”(hhh]”hÌ)�”}”(hŒimporter operations for this attachment, if provided dma_buf_map/unmap_attachment() must be called with the dma_resv lock held.”h]”hŒimporter operations for this attachment, if provided dma_buf_map/unmap_attachment() must be called with the dma_resv lock held.”…”�”}”(hj'[h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:145: ./include/linux/dma-buf.h”h´MÙhj$[ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hj[ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³j#[h´MÚhj!Zubj¹ )�”}”(hŒ5``importer_priv`` importer specific attachment data. ”h]”(j¿ )�”}”(hŒ``importer_priv``”h]”jâ)�”}”(hjH[h]”hŒ importer_priv”…”�”}”(hjJ[h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjF[ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:145: ./include/linux/dma-buf.h”h´MÛhjB[ubjÙ )�”}”(hhh]”hÌ)�”}”(hŒ"importer specific attachment data.”h]”hŒ"importer specific attachment data.”…”�”}”(hja[h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j][h´MÛhj^[ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hjB[ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³j][h´MÛhj!Zubj¹ )�”}”(hŒ+``priv`` exporter specific attachment data.”h]”(j¿ )�”}”(hŒ``priv``”h]”jâ)�”}”(hj�[h]”hŒpriv”…”�”}”(hjƒ[h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj[ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:145: ./include/linux/dma-buf.h”h´M×hj{[ubjÙ )�”}”(hhh]”hÌ)�”}”(hŒ"exporter specific attachment data.”h]”hŒ"exporter specific attachment data.”…”�”}”(hjš[h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:145: ./include/linux/dma-buf.h”h´MØhj—[ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hj{[ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³j–[h´M×hj!Zubeh}”(h]”h ]”h"]”h$]”h&]”uh1j³ hjÙYubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jg hjèh²hh³Nh´NubhÌ)�”}”(hŒ**Description**”h]”jr )�”}”(hjÄ[h]”hŒ Description”…”�”}”(hjÆ[h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hjÂ[ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:145: ./include/linux/dma-buf.h”h´MÛhjèh²hubhÌ)�”}”(hŒ­This structure holds the attachment information between the dma_buf buffer and its user device(s). The list contains one attachment struct per device attached to the buffer.”h]”hŒ­This structure holds the attachment information between the dma_buf buffer and its user device(s). The list contains one attachment struct per device attached to the buffer.”…”�”}”(hjÚ[h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:145: ./include/linux/dma-buf.h”h´MÛhjèh²hubhÌ)�”}”(hŒøAn attachment is created by calling dma_buf_attach(), and released again by calling dma_buf_detach(). The DMA mapping itself needed to initiate a transfer is created by dma_buf_map_attachment() and freed again by calling dma_buf_unmap_attachment().”h]”hŒøAn attachment is created by calling dma_buf_attach(), and released again by calling dma_buf_detach(). The DMA mapping itself needed to initiate a transfer is created by dma_buf_map_attachment() and freed again by calling dma_buf_unmap_attachment().”…”�”}”(hjé[h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:145: ./include/linux/dma-buf.h”h´Mßhjèh²hubjÉ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÕŒdma_buf_export_info (C struct)”Œc.dma_buf_export_info”hNt”auh1jÈhjèh²hh³Nh´NubjÛ)�”}”(hhh]”(jà)�”}”(hŒdma_buf_export_info”h]”jæ)�”}”(hŒstruct dma_buf_export_info”h]”(jì)�”}”(hjïh]”hŒstruct”…”�”}”(hj\h²hh³Nh´Nubah}”(h]”h ]”jøah"]”h$]”h&]”uh1jëhj \h²hh³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:145: ./include/linux/dma-buf.h”h´Mçubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj\h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj \h²hh³j\h´Mçubj )�”}”(hŒdma_buf_export_info”h]”j )�”}”(hj \h]”hŒdma_buf_export_info”…”�”}”(hj1\h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj-\ubah}”(h]”h ]”(j' j( eh"]”h$]”h&]”j÷jøuh1j hj \h²hh³j\h´Mçubeh}”(h]”h ]”h"]”h$]”h&]”j÷jøj2 ˆuh1jåj3 j4 hj \h²hh³j\h´Mçubah}”(h]”j\ah ]”(j8 j9 eh"]”h$]”h&]”j= ˆj> )j? huh1jßh³j\h´Mçhj\h²hubjA )�”}”(hhh]”hÌ)�”}”(hŒ,holds information needed to export a dma_buf”h]”hŒ,holds information needed to export a dma_buf”…”�”}”(hjS\h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:145: ./include/linux/dma-buf.h”h´MðhjP\h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j@ hj\h²hh³j\h´Mçubeh}”(h]”h ]”(jîŒstruct”eh"]”h$]”h&]”ja jîjb jk\jc jk\jd ‰je ‰jf ‰uh1jÚh²hhjèh³Nh´Nubjh )�”}”(hX§**Definition**:: struct dma_buf_export_info { const char *exp_name; struct module *owner; const struct dma_buf_ops *ops; size_t size; int flags; struct dma_resv *resv; void *priv; }; **Members** ``exp_name`` name of the exporter - useful for debugging. ``owner`` pointer to exporter module - used for refcounting kernel module ``ops`` Attach allocator-defined dma buf ops to the new buffer ``size`` Size of the buffer - invariant over the lifetime of the buffer ``flags`` mode flags for the file ``resv`` reservation-object, NULL to allocate default one ``priv`` Attach private data of allocator to this buffer”h]”(hÌ)�”}”(hŒ**Definition**::”h]”(jr )�”}”(hŒ**Definition**”h]”hŒ Definition”…”�”}”(hjw\h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hjs\ubhŒ:”…”�”}”(hjs\h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:145: ./include/linux/dma-buf.h”h´Môhjo\ubjè)�”}”(hŒÁstruct dma_buf_export_info { const char *exp_name; struct module *owner; const struct dma_buf_ops *ops; size_t size; int flags; struct dma_resv *resv; void *priv; };”h]”hŒÁstruct dma_buf_export_info { const char *exp_name; struct module *owner; const struct dma_buf_ops *ops; size_t size; int flags; struct dma_resv *resv; void *priv; };”…”�”}”hj�\sbah}”(h]”h ]”h"]”h$]”h&]”j÷jøuh1jçh³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:145: ./include/linux/dma-buf.h”h´Möhjo\ubhÌ)�”}”(hŒ **Members**”h]”jr )�”}”(hj¡\h]”hŒMembers”…”�”}”(hj£\h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hjŸ\ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:145: ./include/linux/dma-buf.h”h´Mhjo\ubj´ )�”}”(hhh]”(j¹ )�”}”(hŒ:``exp_name`` name of the exporter - useful for debugging. ”h]”(j¿ )�”}”(hŒ ``exp_name``”h]”jâ)�”}”(hjÀ\h]”hŒexp_name”…”�”}”(hjÂ\h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj¾\ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:145: ./include/linux/dma-buf.h”h´Mòhjº\ubjÙ )�”}”(hhh]”hÌ)�”}”(hŒ,name of the exporter - useful for debugging.”h]”hŒ,name of the exporter - useful for debugging.”…”�”}”(hjÙ\h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jÕ\h´MòhjÖ\ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hjº\ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³jÕ\h´Mòhj·\ubj¹ )�”}”(hŒJ``owner`` pointer to exporter module - used for refcounting kernel module ”h]”(j¿ )�”}”(hŒ ``owner``”h]”jâ)�”}”(hjù\h]”hŒowner”…”�”}”(hjû\h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj÷\ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:145: ./include/linux/dma-buf.h”h´Móhjó\ubjÙ )�”}”(hhh]”hÌ)�”}”(hŒ?pointer to exporter module - used for refcounting kernel module”h]”hŒ?pointer to exporter module - used for refcounting kernel module”…”�”}”(hj]h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j]h´Móhj]ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hjó\ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³j]h´Móhj·\ubj¹ )�”}”(hŒ?``ops`` Attach allocator-defined dma buf ops to the new buffer ”h]”(j¿ )�”}”(hŒ``ops``”h]”jâ)�”}”(hj2]h]”hŒops”…”�”}”(hj4]h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj0]ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:145: ./include/linux/dma-buf.h”h´Môhj,]ubjÙ )�”}”(hhh]”hÌ)�”}”(hŒ6Attach allocator-defined dma buf ops to the new buffer”h]”hŒ6Attach allocator-defined dma buf ops to the new buffer”…”�”}”(hjK]h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jG]h´MôhjH]ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hj,]ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³jG]h´Môhj·\ubj¹ )�”}”(hŒH``size`` Size of the buffer - invariant over the lifetime of the buffer ”h]”(j¿ )�”}”(hŒ``size``”h]”jâ)�”}”(hjk]h]”hŒsize”…”�”}”(hjm]h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhji]ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:145: ./include/linux/dma-buf.h”h´Mõhje]ubjÙ )�”}”(hhh]”hÌ)�”}”(hŒ>Size of the buffer - invariant over the lifetime of the buffer”h]”hŒ>Size of the buffer - invariant over the lifetime of the buffer”…”�”}”(hj„]h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j€]h´Mõhj�]ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hje]ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³j€]h´Mõhj·\ubj¹ )�”}”(hŒ"``flags`` mode flags for the file ”h]”(j¿ )�”}”(hŒ ``flags``”h]”jâ)�”}”(hj¤]h]”hŒflags”…”�”}”(hj¦]h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj¢]ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:145: ./include/linux/dma-buf.h”h´Möhjž]ubjÙ )�”}”(hhh]”hÌ)�”}”(hŒmode flags for the file”h]”hŒmode flags for the file”…”�”}”(hj½]h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j¹]h´Möhjº]ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hjž]ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³j¹]h´Möhj·\ubj¹ )�”}”(hŒ:``resv`` reservation-object, NULL to allocate default one ”h]”(j¿ )�”}”(hŒ``resv``”h]”jâ)�”}”(hjÝ]h]”hŒresv”…”�”}”(hjß]h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjÛ]ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:145: ./include/linux/dma-buf.h”h´M÷hj×]ubjÙ )�”}”(hhh]”hÌ)�”}”(hŒ0reservation-object, NULL to allocate default one”h]”hŒ0reservation-object, NULL to allocate default one”…”�”}”(hjö]h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jò]h´M÷hjó]ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hj×]ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³jò]h´M÷hj·\ubj¹ )�”}”(hŒ8``priv`` Attach private data of allocator to this buffer”h]”(j¿ )�”}”(hŒ``priv``”h]”jâ)�”}”(hj^h]”hŒpriv”…”�”}”(hj^h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj^ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:145: ./include/linux/dma-buf.h”h´M÷hj^ubjÙ )�”}”(hhh]”hÌ)�”}”(hŒ/Attach private data of allocator to this buffer”h]”hŒ/Attach private data of allocator to this buffer”…”�”}”(hj/^h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:145: ./include/linux/dma-buf.h”h´Møhj,^ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hj^ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³j+^h´M÷hj·\ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j³ hjo\ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jg hjèh²hh³Nh´NubhÌ)�”}”(hŒ**Description**”h]”jr )�”}”(hjY^h]”hŒ Description”…”�”}”(hj[^h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hjW^ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:145: ./include/linux/dma-buf.h”h´Mûhjèh²hubhÌ)�”}”(hŒdThis structure holds the information required to export the buffer. Used with dma_buf_export() only.”h]”hŒdThis structure holds the information required to export the buffer. Used with dma_buf_export() only.”…”�”}”(hjo^h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:145: ./include/linux/dma-buf.h”h´Møhjèh²hubjÉ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÕŒ$DEFINE_DMA_BUF_EXPORT_INFO (C macro)”Œc.DEFINE_DMA_BUF_EXPORT_INFO”hNt”auh1jÈhjèh²hh³Nh´NubjÛ)�”}”(hhh]”(jà)�”}”(hŒDEFINE_DMA_BUF_EXPORT_INFO”h]”jæ)�”}”(hŒDEFINE_DMA_BUF_EXPORT_INFO”h]”j )�”}”(hŒDEFINE_DMA_BUF_EXPORT_INFO”h]”j )�”}”(hj‘^h]”hŒDEFINE_DMA_BUF_EXPORT_INFO”…”�”}”(hj›^h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj—^ubah}”(h]”h ]”(j' j( eh"]”h$]”h&]”j÷jøuh1j hj“^h²hh³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:145: ./include/linux/dma-buf.h”h´Mubah}”(h]”h ]”h"]”h$]”h&]”j÷jøj2 ˆuh1jåj3 j4 hj�^h²hh³j®^h´Mubah}”(h]”jŠ^ah ]”(j8 j9 eh"]”h$]”h&]”j= ˆj> )j? huh1jßh³j®^h´MhjŒ^h²hubjA )�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1j@ hjŒ^h²hh³j®^h´Mubeh}”(h]”h ]”(jîŒmacro”eh"]”h$]”h&]”ja jîjb jÇ^jc jÇ^jd ‰je ‰jf ‰uh1jÚh²hhjèh³Nh´NubhÌ)�”}”(hŒ%``DEFINE_DMA_BUF_EXPORT_INFO (name)``”h]”jâ)�”}”(hjÍ^h]”hŒ!DEFINE_DMA_BUF_EXPORT_INFO (name)”…”�”}”(hjÏ^h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjË^ubah}”(h]”h ]”h"]”h$]”•Oh&]”uh1hËh³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:145: ./include/linux/dma-buf.h”h´M hjèh²hubhø)�”}”(hŒhelper macro for exporters ”h]”hÌ)�”}”(hŒhelper macro for exporters”h]”hŒhelper macro for exporters”…”�”}”(hjç^h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:145: ./include/linux/dma-buf.h”h´Mhjã^ubah}”(h]”h ]”h"]”h$]”h&]”uh1h÷h³jõ^h´Mhjèh²hubjh )�”}”(hŒÖ**Parameters** ``name`` export-info name **Description** DEFINE_DMA_BUF_EXPORT_INFO macro defines the :c:type:`struct dma_buf_export_info `, zeroes it out and pre-populates exp_name in it.”h]”(hÌ)�”}”(hŒ**Parameters**”h]”jr )�”}”(hj_h]”hŒ Parameters”…”�”}”(hj_h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hj_ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:145: ./include/linux/dma-buf.h”h´M hjü^ubj´ )�”}”(hhh]”j¹ )�”}”(hŒ``name`` export-info name ”h]”(j¿ )�”}”(hŒ``name``”h]”jâ)�”}”(hj!_h]”hŒname”…”�”}”(hj#_h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj_ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:145: ./include/linux/dma-buf.h”h´Mhj_ubjÙ )�”}”(hhh]”hÌ)�”}”(hŒexport-info name”h]”hŒexport-info name”…”�”}”(hj:_h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j6_h´Mhj7_ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hj_ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³j6_h´Mhj_ubah}”(h]”h ]”h"]”h$]”h&]”uh1j³ hjü^ubhÌ)�”}”(hŒ**Description**”h]”jr )�”}”(hj\_h]”hŒ Description”…”�”}”(hj^_h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hjZ_ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:145: ./include/linux/dma-buf.h”h´M hjü^ubhÌ)�”}”(hŒ˜DEFINE_DMA_BUF_EXPORT_INFO macro defines the :c:type:`struct dma_buf_export_info `, zeroes it out and pre-populates exp_name in it.”h]”(hŒ-DEFINE_DMA_BUF_EXPORT_INFO macro defines the ”…”�”}”(hjr_h²hh³Nh´Nubh)�”}”(hŒ::c:type:`struct dma_buf_export_info `”h]”jâ)�”}”(hj|_h]”hŒstruct dma_buf_export_info”…”�”}”(hj~_h²hh³Nh´Nubah}”(h]”h ]”(jíjîŒc-type”eh"]”h$]”h&]”uh1jáhjz_ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”júŒ refdomain”jîŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰j³j·jŒdma_buf_export_info”uh1hh³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:145: ./include/linux/dma-buf.h”h´M hjr_ubhŒ1, zeroes it out and pre-populates exp_name in it.”…”�”}”(hjr_h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j™_h´M hjü^ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jg hjèh²hh³Nh´NubjÉ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÕŒget_dma_buf (C function)”Œ c.get_dma_buf”hNt”auh1jÈhjèh²hh³Nh´NubjÛ)�”}”(hhh]”(jà)�”}”(hŒ)void get_dma_buf (struct dma_buf *dmabuf)”h]”jæ)�”}”(hŒ(void get_dma_buf(struct dma_buf *dmabuf)”h]”(jM)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjÄ_h²hh³Nh´Nubah}”(h]”h ]”jYah"]”h$]”h&]”uh1jLhjÀ_h²hh³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:145: ./include/linux/dma-buf.h”h´Mubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÓ_h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjÀ_h²hh³jÒ_h´Mubj )�”}”(hŒ get_dma_buf”h]”j )�”}”(hŒ get_dma_buf”h]”hŒ get_dma_buf”…”�”}”(hjå_h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjá_ubah}”(h]”h ]”(j' j( eh"]”h$]”h&]”j÷jøuh1j hjÀ_h²hh³jÒ_h´MubjŒ)�”}”(hŒ(struct dma_buf *dmabuf)”h]”j’)�”}”(hŒstruct dma_buf *dmabuf”h]”(jì)�”}”(hjïh]”hŒstruct”…”�”}”(hj`h²hh³Nh´Nubah}”(h]”h ]”jøah"]”h$]”h&]”uh1jëhjý_ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj`h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjý_ubh)�”}”(hhh]”j )�”}”(hŒdma_buf”h]”hŒdma_buf”…”�”}”(hj`h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj`ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jîŒreftype”jGŒ reftarget”j!`Œmodname”NŒ classname”Nj³j¶)�”}”j¹]”jO)�”}”jGjç_sbŒ c.get_dma_buf”†”asbuh1hhjý_ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj?`h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjý_ubjd)�”}”(hjgh]”hŒ*”…”�”}”(hjM`h²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchjý_ubj )�”}”(hŒdmabuf”h]”hŒdmabuf”…”�”}”(hjZ`h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjý_ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj÷jøuh1j‘hjù_ubah}”(h]”h ]”h"]”h$]”h&]”j÷jøuh1j‹hjÀ_h²hh³jÒ_h´Mubeh}”(h]”h ]”h"]”h$]”h&]”j÷jøj2 ˆuh1jåj3 j4 hj¼_h²hh³jÒ_h´Mubah}”(h]”j·_ah ]”(j8 j9 eh"]”h$]”h&]”j= ˆj> )j? huh1jßh³jÒ_h´Mhj¹_h²hubjA )�”}”(hhh]”hÌ)�”}”(hŒ!convenience wrapper for get_file.”h]”hŒ!convenience wrapper for get_file.”…”�”}”(hj„`h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:145: ./include/linux/dma-buf.h”h´Mhj�`h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j@ hj¹_h²hh³jÒ_h´Mubeh}”(h]”h ]”(jîŒfunction”eh"]”h$]”h&]”ja jîjb jœ`jc jœ`jd ‰je ‰jf ‰uh1jÚh²hhjèh³Nh´Nubjh )�”}”(hXe**Parameters** ``struct dma_buf *dmabuf`` [in] pointer to dma_buf **Description** Increments the reference count on the dma-buf, needed in case of drivers that either need to create additional references to the dmabuf on the kernel side. For example, an exporter that needs to keep a dmabuf ptr so that subsequent exports don't create a new dmabuf.”h]”(hÌ)�”}”(hŒ**Parameters**”h]”jr )�”}”(hj¦`h]”hŒ Parameters”…”�”}”(hj¨`h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hj¤`ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:145: ./include/linux/dma-buf.h”h´Mhj `ubj´ )�”}”(hhh]”j¹ )�”}”(hŒ6``struct dma_buf *dmabuf`` [in] pointer to dma_buf ”h]”(j¿ )�”}”(hŒ``struct dma_buf *dmabuf``”h]”jâ)�”}”(hjÅ`h]”hŒstruct dma_buf *dmabuf”…”�”}”(hjÇ`h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjÃ`ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:145: ./include/linux/dma-buf.h”h´Mhj¿`ubjÙ )�”}”(hhh]”hÌ)�”}”(hŒ[in] pointer to dma_buf”h]”hŒ[in] pointer to dma_buf”…”�”}”(hjÞ`h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jÚ`h´MhjÛ`ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hj¿`ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³jÚ`h´Mhj¼`ubah}”(h]”h ]”h"]”h$]”h&]”uh1j³ hj `ubhÌ)�”}”(hŒ**Description**”h]”jr )�”}”(hjah]”hŒ Description”…”�”}”(hjah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hjþ`ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:145: ./include/linux/dma-buf.h”h´Mhj `ubhÌ)�”}”(hX Increments the reference count on the dma-buf, needed in case of drivers that either need to create additional references to the dmabuf on the kernel side. For example, an exporter that needs to keep a dmabuf ptr so that subsequent exports don't create a new dmabuf.”h]”hX Increments the reference count on the dma-buf, needed in case of drivers that either need to create additional references to the dmabuf on the kernel side. For example, an exporter that needs to keep a dmabuf ptr so that subsequent exports don’t create a new dmabuf.”…”�”}”(hjah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:145: ./include/linux/dma-buf.h”h´Mhj `ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jg hjèh²hh³Nh´NubjÉ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÕŒdma_buf_is_dynamic (C function)”Œc.dma_buf_is_dynamic”hNt”auh1jÈhjèh²hh³Nh´NubjÛ)�”}”(hhh]”(jà)�”}”(hŒ0bool dma_buf_is_dynamic (struct dma_buf *dmabuf)”h]”jæ)�”}”(hŒ/bool dma_buf_is_dynamic(struct dma_buf *dmabuf)”h]”(jM)�”}”(hji5h]”hŒbool”…”�”}”(hjEah²hh³Nh´Nubah}”(h]”h ]”jYah"]”h$]”h&]”uh1jLhjAah²hh³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:145: ./include/linux/dma-buf.h”h´M ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjSah²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjAah²hh³jRah´M ubj )�”}”(hŒdma_buf_is_dynamic”h]”j )�”}”(hŒdma_buf_is_dynamic”h]”hŒdma_buf_is_dynamic”…”�”}”(hjeah²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjaaubah}”(h]”h ]”(j' j( eh"]”h$]”h&]”j÷jøuh1j hjAah²hh³jRah´M ubjŒ)�”}”(hŒ(struct dma_buf *dmabuf)”h]”j’)�”}”(hŒstruct dma_buf *dmabuf”h]”(jì)�”}”(hjïh]”hŒstruct”…”�”}”(hj�ah²hh³Nh´Nubah}”(h]”h ]”jøah"]”h$]”h&]”uh1jëhj}aubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŽah²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj}aubh)�”}”(hhh]”j )�”}”(hŒdma_buf”h]”hŒdma_buf”…”�”}”(hjŸah²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjœaubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jîŒreftype”jGŒ reftarget”j¡aŒmodname”NŒ classname”Nj³j¶)�”}”j¹]”jO)�”}”jGjgasbŒc.dma_buf_is_dynamic”†”asbuh1hhj}aubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¿ah²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj}aubjd)�”}”(hjgh]”hŒ*”…”�”}”(hjÍah²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchj}aubj )�”}”(hŒdmabuf”h]”hŒdmabuf”…”�”}”(hjÚah²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj}aubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj÷jøuh1j‘hjyaubah}”(h]”h ]”h"]”h$]”h&]”j÷jøuh1j‹hjAah²hh³jRah´M ubeh}”(h]”h ]”h"]”h$]”h&]”j÷jøj2 ˆuh1jåj3 j4 hj=ah²hh³jRah´M ubah}”(h]”j8aah ]”(j8 j9 eh"]”h$]”h&]”j= ˆj> )j? huh1jßh³jRah´M hj:ah²hubjA )�”}”(hhh]”hÌ)�”}”(hŒ)check if a DMA-buf uses dynamic mappings.”h]”hŒ)check if a DMA-buf uses dynamic mappings.”…”�”}”(hjbh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:145: ./include/linux/dma-buf.h”h´M hjbh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j@ hj:ah²hh³jRah´M ubeh}”(h]”h ]”(jîŒfunction”eh"]”h$]”h&]”ja jîjb jbjc jbjd ‰je ‰jf ‰uh1jÚh²hhjèh³Nh´Nubjh )�”}”(hŒú**Parameters** ``struct dma_buf *dmabuf`` the DMA-buf to check **Description** Returns true if a DMA-buf exporter wants to be called with the dma_resv locked for the map/unmap callbacks, false if it doesn't wants to be called with the lock held.”h]”(hÌ)�”}”(hŒ**Parameters**”h]”jr )�”}”(hj&bh]”hŒ Parameters”…”�”}”(hj(bh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hj$bubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:145: ./include/linux/dma-buf.h”h´M$hj bubj´ )�”}”(hhh]”j¹ )�”}”(hŒ0``struct dma_buf *dmabuf`` the DMA-buf to check ”h]”(j¿ )�”}”(hŒ``struct dma_buf *dmabuf``”h]”jâ)�”}”(hjEbh]”hŒstruct dma_buf *dmabuf”…”�”}”(hjGbh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjCbubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:145: ./include/linux/dma-buf.h”h´M!hj?bubjÙ )�”}”(hhh]”hÌ)�”}”(hŒthe DMA-buf to check”h]”hŒthe DMA-buf to check”…”�”}”(hj^bh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jZbh´M!hj[bubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hj?bubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³jZbh´M!hj )j? huh1jßh³jch´K‡hjùbh²hubjA )�”}”(hhh]”hÌ)�”}”(hŒinitialize a reservation object”h]”hŒinitialize a reservation object”…”�”}”(hjÄch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:154: ./drivers/dma-buf/dma-resv.c”h´K‡hjÁch²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j@ hjùbh²hh³jch´K‡ubeh}”(h]”h ]”(jîŒfunction”eh"]”h$]”h&]”ja jîjb jÜcjc jÜcjd ‰je ‰jf ‰uh1jÚh²hhj¼bh³Nh´Nubjh )�”}”(hŒA**Parameters** ``struct dma_resv *obj`` the reservation object”h]”(hÌ)�”}”(hŒ**Parameters**”h]”jr )�”}”(hjæch]”hŒ Parameters”…”�”}”(hjèch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hjäcubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:154: ./drivers/dma-buf/dma-resv.c”h´K‹hjàcubj´ )�”}”(hhh]”j¹ )�”}”(hŒ/``struct dma_resv *obj`` the reservation object”h]”(j¿ )�”}”(hŒ``struct dma_resv *obj``”h]”jâ)�”}”(hjdh]”hŒstruct dma_resv *obj”…”�”}”(hjdh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjdubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:154: ./drivers/dma-buf/dma-resv.c”h´K�hjÿcubjÙ )�”}”(hhh]”hÌ)�”}”(hŒthe reservation object”h]”hŒthe reservation object”…”�”}”(hjdh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:154: ./drivers/dma-buf/dma-resv.c”h´Kˆhjdubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hjÿcubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³jdh´K�hjücubah}”(h]”h ]”h"]”h$]”h&]”uh1j³ hjàcubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jg hj¼bh²hh³Nh´NubjÉ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÕŒdma_resv_fini (C function)”Œc.dma_resv_fini”hNt”auh1jÈhj¼bh²hh³Nh´NubjÛ)�”}”(hhh]”(jà)�”}”(hŒ)void dma_resv_fini (struct dma_resv *obj)”h]”jæ)�”}”(hŒ(void dma_resv_fini(struct dma_resv *obj)”h]”(jM)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj_dh²hh³Nh´Nubah}”(h]”h ]”jYah"]”h$]”h&]”uh1jLhj[dh²hh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:154: ./drivers/dma-buf/dma-resv.c”h´K“ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjndh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj[dh²hh³jmdh´K“ubj )�”}”(hŒ dma_resv_fini”h]”j )�”}”(hŒ dma_resv_fini”h]”hŒ dma_resv_fini”…”�”}”(hj€dh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj|dubah}”(h]”h ]”(j' j( eh"]”h$]”h&]”j÷jøuh1j hj[dh²hh³jmdh´K“ubjŒ)�”}”(hŒ(struct dma_resv *obj)”h]”j’)�”}”(hŒstruct dma_resv *obj”h]”(jì)�”}”(hjïh]”hŒstruct”…”�”}”(hjœdh²hh³Nh´Nubah}”(h]”h ]”jøah"]”h$]”h&]”uh1jëhj˜dubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj©dh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj˜dubh)�”}”(hhh]”j )�”}”(hŒdma_resv”h]”hŒdma_resv”…”�”}”(hjºdh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj·dubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jîŒreftype”jGŒ reftarget”j¼dŒmodname”NŒ classname”Nj³j¶)�”}”j¹]”jO)�”}”jGj‚dsbŒc.dma_resv_fini”†”asbuh1hhj˜dubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÚdh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj˜dubjd)�”}”(hjgh]”hŒ*”…”�”}”(hjèdh²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchj˜dubj )�”}”(hŒobj”h]”hŒobj”…”�”}”(hjõdh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj˜dubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj÷jøuh1j‘hj”dubah}”(h]”h ]”h"]”h$]”h&]”j÷jøuh1j‹hj[dh²hh³jmdh´K“ubeh}”(h]”h ]”h"]”h$]”h&]”j÷jøj2 ˆuh1jåj3 j4 hjWdh²hh³jmdh´K“ubah}”(h]”jRdah ]”(j8 j9 eh"]”h$]”h&]”j= ˆj> )j? huh1jßh³jmdh´K“hjTdh²hubjA )�”}”(hhh]”hÌ)�”}”(hŒdestroys a reservation object”h]”hŒdestroys a reservation object”…”�”}”(hjeh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:154: ./drivers/dma-buf/dma-resv.c”h´K“hjeh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j@ hjTdh²hh³jmdh´K“ubeh}”(h]”h ]”(jîŒfunction”eh"]”h$]”h&]”ja jîjb j7ejc j7ejd ‰je ‰jf ‰uh1jÚh²hhj¼bh³Nh´Nubjh )�”}”(hŒA**Parameters** ``struct dma_resv *obj`` the reservation object”h]”(hÌ)�”}”(hŒ**Parameters**”h]”jr )�”}”(hjAeh]”hŒ Parameters”…”�”}”(hjCeh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hj?eubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:154: ./drivers/dma-buf/dma-resv.c”h´K—hj;eubj´ )�”}”(hhh]”j¹ )�”}”(hŒ/``struct dma_resv *obj`` the reservation object”h]”(j¿ )�”}”(hŒ``struct dma_resv *obj``”h]”jâ)�”}”(hj`eh]”hŒstruct dma_resv *obj”…”�”}”(hjbeh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj^eubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:154: ./drivers/dma-buf/dma-resv.c”h´K™hjZeubjÙ )�”}”(hhh]”hÌ)�”}”(hŒthe reservation object”h]”hŒthe reservation object”…”�”}”(hjyeh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:154: ./drivers/dma-buf/dma-resv.c”h´K”hjveubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hjZeubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³jueh´K™hjWeubah}”(h]”h ]”h"]”h$]”h&]”uh1j³ hj;eubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jg hj¼bh²hh³Nh´NubjÉ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÕŒ$dma_resv_reserve_fences (C function)”Œc.dma_resv_reserve_fences”hNt”auh1jÈhj¼bh²hh³Nh´NubjÛ)�”}”(hhh]”(jà)�”}”(hŒKint dma_resv_reserve_fences (struct dma_resv *obj, unsigned int num_fences)”h]”jæ)�”}”(hŒJint dma_resv_reserve_fences(struct dma_resv *obj, unsigned int num_fences)”h]”(jM)�”}”(hŒint”h]”hŒint”…”�”}”(hjºeh²hh³Nh´Nubah}”(h]”h ]”jYah"]”h$]”h&]”uh1jLhj¶eh²hh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:154: ./drivers/dma-buf/dma-resv.c”h´K¨ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÉeh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj¶eh²hh³jÈeh´K¨ubj )�”}”(hŒdma_resv_reserve_fences”h]”j )�”}”(hŒdma_resv_reserve_fences”h]”hŒdma_resv_reserve_fences”…”�”}”(hjÛeh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj×eubah}”(h]”h ]”(j' j( eh"]”h$]”h&]”j÷jøuh1j hj¶eh²hh³jÈeh´K¨ubjŒ)�”}”(hŒ/(struct dma_resv *obj, unsigned int num_fences)”h]”(j’)�”}”(hŒstruct dma_resv *obj”h]”(jì)�”}”(hjïh]”hŒstruct”…”�”}”(hj÷eh²hh³Nh´Nubah}”(h]”h ]”jøah"]”h$]”h&]”uh1jëhjóeubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjfh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjóeubh)�”}”(hhh]”j )�”}”(hŒdma_resv”h]”hŒdma_resv”…”�”}”(hjfh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjfubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jîŒreftype”jGŒ reftarget”jfŒmodname”NŒ classname”Nj³j¶)�”}”j¹]”jO)�”}”jGjÝesbŒc.dma_resv_reserve_fences”†”asbuh1hhjóeubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj5fh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjóeubjd)�”}”(hjgh]”hŒ*”…”�”}”(hjCfh²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchjóeubj )�”}”(hŒobj”h]”hŒobj”…”�”}”(hjPfh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjóeubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj÷jøuh1j‘hjïeubj’)�”}”(hŒunsigned int num_fences”h]”(jM)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjifh²hh³Nh´Nubah}”(h]”h ]”jYah"]”h$]”h&]”uh1jLhjefubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjwfh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjefubjM)�”}”(hŒint”h]”hŒint”…”�”}”(hj…fh²hh³Nh´Nubah}”(h]”h ]”jYah"]”h$]”h&]”uh1jLhjefubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj“fh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjefubj )�”}”(hŒ num_fences”h]”hŒ num_fences”…”�”}”(hj¡fh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjefubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj÷jøuh1j‘hjïeubeh}”(h]”h ]”h"]”h$]”h&]”j÷jøuh1j‹hj¶eh²hh³jÈeh´K¨ubeh}”(h]”h ]”h"]”h$]”h&]”j÷jøj2 ˆuh1jåj3 j4 hj²eh²hh³jÈeh´K¨ubah}”(h]”j­eah ]”(j8 j9 eh"]”h$]”h&]”j= ˆj> )j? huh1jßh³jÈeh´K¨hj¯eh²hubjA )�”}”(hhh]”hÌ)�”}”(hŒ1Reserve space to add fences to a dma_resv object.”h]”hŒ1Reserve space to add fences to a dma_resv object.”…”�”}”(hjËfh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:154: ./drivers/dma-buf/dma-resv.c”h´K¨hjÈfh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j@ hj¯eh²hh³jÈeh´K¨ubeh}”(h]”h ]”(jîŒfunction”eh"]”h$]”h&]”ja jîjb jãfjc jãfjd ‰je ‰jf ‰uh1jÚh²hhj¼bh³Nh´Nubjh )�”}”(hX×**Parameters** ``struct dma_resv *obj`` reservation object ``unsigned int num_fences`` number of fences we want to add **Description** Should be called before dma_resv_add_fence(). Must be called with **obj** locked through dma_resv_lock(). Note that the preallocated slots need to be re-reserved if **obj** is unlocked at any time before calling dma_resv_add_fence(). This is validated when CONFIG_DEBUG_MUTEXES is enabled. RETURNS Zero for success, or -errno”h]”(hÌ)�”}”(hŒ**Parameters**”h]”jr )�”}”(hjífh]”hŒ Parameters”…”�”}”(hjïfh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hjëfubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:154: ./drivers/dma-buf/dma-resv.c”h´K¬hjçfubj´ )�”}”(hhh]”(j¹ )�”}”(hŒ,``struct dma_resv *obj`` reservation object ”h]”(j¿ )�”}”(hŒ``struct dma_resv *obj``”h]”jâ)�”}”(hj gh]”hŒstruct dma_resv *obj”…”�”}”(hjgh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj gubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:154: ./drivers/dma-buf/dma-resv.c”h´K©hjgubjÙ )�”}”(hhh]”hÌ)�”}”(hŒreservation object”h]”hŒreservation object”…”�”}”(hj%gh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j!gh´K©hj"gubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hjgubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³j!gh´K©hjgubj¹ )�”}”(hŒ<``unsigned int num_fences`` number of fences we want to add ”h]”(j¿ )�”}”(hŒ``unsigned int num_fences``”h]”jâ)�”}”(hjEgh]”hŒunsigned int num_fences”…”�”}”(hjGgh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjCgubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:154: ./drivers/dma-buf/dma-resv.c”h´Kªhj?gubjÙ )�”}”(hhh]”hÌ)�”}”(hŒnumber of fences we want to add”h]”hŒnumber of fences we want to add”…”�”}”(hj^gh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jZgh´Kªhj[gubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hj?gubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³jZgh´Kªhjgubeh}”(h]”h ]”h"]”h$]”h&]”uh1j³ hjçfubhÌ)�”}”(hŒ**Description**”h]”jr )�”}”(hj€gh]”hŒ Description”…”�”}”(hj‚gh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hj~gubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:154: ./drivers/dma-buf/dma-resv.c”h´K¬hjçfubhÌ)�”}”(hŒjShould be called before dma_resv_add_fence(). Must be called with **obj** locked through dma_resv_lock().”h]”(hŒCShould be called before dma_resv_add_fence(). Must be called with ”…”�”}”(hj–gh²hh³Nh´Nubjr )�”}”(hŒ**obj**”h]”hŒobj”…”�”}”(hjžgh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hj–gubhŒ locked through dma_resv_lock().”…”�”}”(hj–gh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:154: ./drivers/dma-buf/dma-resv.c”h´K«hjçfubhÌ)�”}”(hŒ·Note that the preallocated slots need to be re-reserved if **obj** is unlocked at any time before calling dma_resv_add_fence(). This is validated when CONFIG_DEBUG_MUTEXES is enabled.”h]”(hŒ;Note that the preallocated slots need to be re-reserved if ”…”�”}”(hj·gh²hh³Nh´Nubjr )�”}”(hŒ**obj**”h]”hŒobj”…”�”}”(hj¿gh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hj·gubhŒu is unlocked at any time before calling dma_resv_add_fence(). This is validated when CONFIG_DEBUG_MUTEXES is enabled.”…”�”}”(hj·gh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:154: ./drivers/dma-buf/dma-resv.c”h´K®hjçfubhÌ)�”}”(hŒ#RETURNS Zero for success, or -errno”h]”hŒ#RETURNS Zero for success, or -errno”…”�”}”(hjØgh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:154: ./drivers/dma-buf/dma-resv.c”h´K²hjçfubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jg hj¼bh²hh³Nh´NubjÉ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÕŒ&dma_resv_reset_max_fences (C function)”Œc.dma_resv_reset_max_fences”hNt”auh1jÈhj¼bh²hh³Nh´NubjÛ)�”}”(hhh]”(jà)�”}”(hŒ5void dma_resv_reset_max_fences (struct dma_resv *obj)”h]”jæ)�”}”(hŒ4void dma_resv_reset_max_fences(struct dma_resv *obj)”h]”(jM)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjhh²hh³Nh´Nubah}”(h]”h ]”jYah"]”h$]”h&]”uh1jLhjhh²hh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:154: ./drivers/dma-buf/dma-resv.c”h´Mubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjhh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjhh²hh³jhh´Mubj )�”}”(hŒdma_resv_reset_max_fences”h]”j )�”}”(hŒdma_resv_reset_max_fences”h]”hŒdma_resv_reset_max_fences”…”�”}”(hj(hh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj$hubah}”(h]”h ]”(j' j( eh"]”h$]”h&]”j÷jøuh1j hjhh²hh³jhh´MubjŒ)�”}”(hŒ(struct dma_resv *obj)”h]”j’)�”}”(hŒstruct dma_resv *obj”h]”(jì)�”}”(hjïh]”hŒstruct”…”�”}”(hjDhh²hh³Nh´Nubah}”(h]”h ]”jøah"]”h$]”h&]”uh1jëhj@hubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjQhh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj@hubh)�”}”(hhh]”j )�”}”(hŒdma_resv”h]”hŒdma_resv”…”�”}”(hjbhh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj_hubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jîŒreftype”jGŒ reftarget”jdhŒmodname”NŒ classname”Nj³j¶)�”}”j¹]”jO)�”}”jGj*hsbŒc.dma_resv_reset_max_fences”†”asbuh1hhj@hubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‚hh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj@hubjd)�”}”(hjgh]”hŒ*”…”�”}”(hj�hh²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchj@hubj )�”}”(hŒobj”h]”hŒobj”…”�”}”(hj�hh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj@hubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj÷jøuh1j‘hj )j? huh1jßh³jhh´Mhjügh²hubjA )�”}”(hhh]”hÌ)�”}”(hŒreset fences for debugging”h]”hŒreset fences for debugging”…”�”}”(hjÇhh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:154: ./drivers/dma-buf/dma-resv.c”h´MhjÄhh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j@ hjügh²hh³jhh´Mubeh}”(h]”h ]”(jîŒfunction”eh"]”h$]”h&]”ja jîjb jßhjc jßhjd ‰je ‰jf ‰uh1jÚh²hhj¼bh³Nh´Nubjh )�”}”(hX**Parameters** ``struct dma_resv *obj`` the dma_resv object to reset **Description** Reset the number of pre-reserved fence slots to test that drivers do correct slot allocation using dma_resv_reserve_fences(). See also :c:type:`dma_resv_list.max_fences `.”h]”(hÌ)�”}”(hŒ**Parameters**”h]”jr )�”}”(hjéhh]”hŒ Parameters”…”�”}”(hjëhh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hjçhubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:154: ./drivers/dma-buf/dma-resv.c”h´Mhjãhubj´ )�”}”(hhh]”j¹ )�”}”(hŒ6``struct dma_resv *obj`` the dma_resv object to reset ”h]”(j¿ )�”}”(hŒ``struct dma_resv *obj``”h]”jâ)�”}”(hjih]”hŒstruct dma_resv *obj”…”�”}”(hj ih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjiubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:154: ./drivers/dma-buf/dma-resv.c”h´MhjiubjÙ )�”}”(hhh]”hÌ)�”}”(hŒthe dma_resv object to reset”h]”hŒthe dma_resv object to reset”…”�”}”(hj!ih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jih´Mhjiubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hjiubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³jih´Mhjÿhubah}”(h]”h ]”h"]”h$]”h&]”uh1j³ hjãhubhÌ)�”}”(hŒ**Description**”h]”jr )�”}”(hjCih]”hŒ Description”…”�”}”(hjEih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hjAiubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:154: ./drivers/dma-buf/dma-resv.c”h´MhjãhubhÌ)�”}”(hŒºReset the number of pre-reserved fence slots to test that drivers do correct slot allocation using dma_resv_reserve_fences(). See also :c:type:`dma_resv_list.max_fences `.”h]”(hŒ‡Reset the number of pre-reserved fence slots to test that drivers do correct slot allocation using dma_resv_reserve_fences(). See also ”…”�”}”(hjYih²hh³Nh´Nubh)�”}”(hŒ2:c:type:`dma_resv_list.max_fences `”h]”jâ)�”}”(hjcih]”hŒdma_resv_list.max_fences”…”�”}”(hjeih²hh³Nh´Nubah}”(h]”h ]”(jíjîŒc-type”eh"]”h$]”h&]”uh1jáhjaiubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”júŒ refdomain”jîŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰j³j·jŒ dma_resv_list”uh1hh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:154: ./drivers/dma-buf/dma-resv.c”h´MhjYiubhŒ.”…”�”}”(hjYih²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j€ih´Mhjãhubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jg hj¼bh²hh³Nh´NubjÉ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÕŒdma_resv_add_fence (C function)”Œc.dma_resv_add_fence”hNt”auh1jÈhj¼bh²hh³Nh´NubjÛ)�”}”(hhh]”(jà)�”}”(hŒbvoid dma_resv_add_fence (struct dma_resv *obj, struct dma_fence *fence, enum dma_resv_usage usage)”h]”jæ)�”}”(hŒavoid dma_resv_add_fence(struct dma_resv *obj, struct dma_fence *fence, enum dma_resv_usage usage)”h]”(jM)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj«ih²hh³Nh´Nubah}”(h]”h ]”jYah"]”h$]”h&]”uh1jLhj§ih²hh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:154: ./drivers/dma-buf/dma-resv.c”h´Mubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjºih²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj§ih²hh³j¹ih´Mubj )�”}”(hŒdma_resv_add_fence”h]”j )�”}”(hŒdma_resv_add_fence”h]”hŒdma_resv_add_fence”…”�”}”(hjÌih²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjÈiubah}”(h]”h ]”(j' j( eh"]”h$]”h&]”j÷jøuh1j hj§ih²hh³j¹ih´MubjŒ)�”}”(hŒJ(struct dma_resv *obj, struct dma_fence *fence, enum dma_resv_usage usage)”h]”(j’)�”}”(hŒstruct dma_resv *obj”h]”(jì)�”}”(hjïh]”hŒstruct”…”�”}”(hjèih²hh³Nh´Nubah}”(h]”h ]”jøah"]”h$]”h&]”uh1jëhjäiubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjõih²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjäiubh)�”}”(hhh]”j )�”}”(hŒdma_resv”h]”hŒdma_resv”…”�”}”(hjjh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjjubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jîŒreftype”jGŒ reftarget”jjŒmodname”NŒ classname”Nj³j¶)�”}”j¹]”jO)�”}”jGjÎisbŒc.dma_resv_add_fence”†”asbuh1hhjäiubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj&jh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjäiubjd)�”}”(hjgh]”hŒ*”…”�”}”(hj4jh²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchjäiubj )�”}”(hŒobj”h]”hŒobj”…”�”}”(hjAjh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjäiubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj÷jøuh1j‘hjàiubj’)�”}”(hŒstruct dma_fence *fence”h]”(jì)�”}”(hjïh]”hŒstruct”…”�”}”(hjZjh²hh³Nh´Nubah}”(h]”h ]”jøah"]”h$]”h&]”uh1jëhjVjubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjgjh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjVjubh)�”}”(hhh]”j )�”}”(hŒ dma_fence”h]”hŒ dma_fence”…”�”}”(hjxjh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjujubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jîŒreftype”jGŒ reftarget”jzjŒmodname”NŒ classname”Nj³j¶)�”}”j¹]”j"jŒc.dma_resv_add_fence”†”asbuh1hhjVjubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj–jh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjVjubjd)�”}”(hjgh]”hŒ*”…”�”}”(hj¤jh²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchjVjubj )�”}”(hŒfence”h]”hŒfence”…”�”}”(hj±jh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjVjubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj÷jøuh1j‘hjàiubj’)�”}”(hŒenum dma_resv_usage usage”h]”(jì)�”}”(hj×+h]”hŒenum”…”�”}”(hjÊjh²hh³Nh´Nubah}”(h]”h ]”jøah"]”h$]”h&]”uh1jëhjÆjubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj×jh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjÆjubh)�”}”(hhh]”j )�”}”(hŒdma_resv_usage”h]”hŒdma_resv_usage”…”�”}”(hjèjh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjåjubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jîŒreftype”jGŒ reftarget”jêjŒmodname”NŒ classname”Nj³j¶)�”}”j¹]”j"jŒc.dma_resv_add_fence”†”asbuh1hhjÆjubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjkh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjÆjubj )�”}”(hŒusage”h]”hŒusage”…”�”}”(hjkh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjÆjubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj÷jøuh1j‘hjàiubeh}”(h]”h ]”h"]”h$]”h&]”j÷jøuh1j‹hj§ih²hh³j¹ih´Mubeh}”(h]”h ]”h"]”h$]”h&]”j÷jøj2 ˆuh1jåj3 j4 hj£ih²hh³j¹ih´Mubah}”(h]”jžiah ]”(j8 j9 eh"]”h$]”h&]”j= ˆj> )j? huh1jßh³j¹ih´Mhj ih²hubjA )�”}”(hhh]”hÌ)�”}”(hŒAdd a fence to the dma_resv obj”h]”hŒAdd a fence to the dma_resv obj”…”�”}”(hj>kh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:154: ./drivers/dma-buf/dma-resv.c”h´Mhj;kh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j@ hj ih²hh³j¹ih´Mubeh}”(h]”h ]”(jîŒfunction”eh"]”h$]”h&]”ja jîjb jVkjc jVkjd ‰je ‰jf ‰uh1jÚh²hhj¼bh³Nh´Nubjh )�”}”(hX—**Parameters** ``struct dma_resv *obj`` the reservation object ``struct dma_fence *fence`` the fence to add ``enum dma_resv_usage usage`` how the fence is used, see enum dma_resv_usage **Description** Add a fence to a slot, **obj** must be locked with dma_resv_lock(), and dma_resv_reserve_fences() has been called. See also :c:type:`dma_resv.fence ` for a discussion of the semantics.”h]”(hÌ)�”}”(hŒ**Parameters**”h]”jr )�”}”(hj`kh]”hŒ Parameters”…”�”}”(hjbkh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hj^kubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:154: ./drivers/dma-buf/dma-resv.c”h´MhjZkubj´ )�”}”(hhh]”(j¹ )�”}”(hŒ0``struct dma_resv *obj`` the reservation object ”h]”(j¿ )�”}”(hŒ``struct dma_resv *obj``”h]”jâ)�”}”(hjkh]”hŒstruct dma_resv *obj”…”�”}”(hj�kh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj}kubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:154: ./drivers/dma-buf/dma-resv.c”h´MhjykubjÙ )�”}”(hhh]”hÌ)�”}”(hŒthe reservation object”h]”hŒthe reservation object”…”�”}”(hj˜kh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j”kh´Mhj•kubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hjykubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³j”kh´Mhjvkubj¹ )�”}”(hŒ-``struct dma_fence *fence`` the fence to add ”h]”(j¿ )�”}”(hŒ``struct dma_fence *fence``”h]”jâ)�”}”(hj¸kh]”hŒstruct dma_fence *fence”…”�”}”(hjºkh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj¶kubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:154: ./drivers/dma-buf/dma-resv.c”h´Mhj²kubjÙ )�”}”(hhh]”hÌ)�”}”(hŒthe fence to add”h]”hŒthe fence to add”…”�”}”(hjÑkh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jÍkh´MhjÎkubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hj²kubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³jÍkh´Mhjvkubj¹ )�”}”(hŒM``enum dma_resv_usage usage`` how the fence is used, see enum dma_resv_usage ”h]”(j¿ )�”}”(hŒ``enum dma_resv_usage usage``”h]”jâ)�”}”(hjñkh]”hŒenum dma_resv_usage usage”…”�”}”(hjókh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjïkubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:154: ./drivers/dma-buf/dma-resv.c”h´MhjëkubjÙ )�”}”(hhh]”hÌ)�”}”(hŒ.how the fence is used, see enum dma_resv_usage”h]”hŒ.how the fence is used, see enum dma_resv_usage”…”�”}”(hj lh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jlh´Mhjlubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hjëkubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³jlh´Mhjvkubeh}”(h]”h ]”h"]”h$]”h&]”uh1j³ hjZkubhÌ)�”}”(hŒ**Description**”h]”jr )�”}”(hj,lh]”hŒ Description”…”�”}”(hj.lh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hj*lubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:154: ./drivers/dma-buf/dma-resv.c”h´MhjZkubhÌ)�”}”(hŒrAdd a fence to a slot, **obj** must be locked with dma_resv_lock(), and dma_resv_reserve_fences() has been called.”h]”(hŒAdd a fence to a slot, ”…”�”}”(hjBlh²hh³Nh´Nubjr )�”}”(hŒ**obj**”h]”hŒobj”…”�”}”(hjJlh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hjBlubhŒT must be locked with dma_resv_lock(), and dma_resv_reserve_fences() has been called.”…”�”}”(hjBlh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:154: ./drivers/dma-buf/dma-resv.c”h´MhjZkubhÌ)�”}”(hŒOSee also :c:type:`dma_resv.fence ` for a discussion of the semantics.”h]”(hŒ See also ”…”�”}”(hjclh²hh³Nh´Nubh)�”}”(hŒ#:c:type:`dma_resv.fence `”h]”jâ)�”}”(hjmlh]”hŒdma_resv.fence”…”�”}”(hjolh²hh³Nh´Nubah}”(h]”h ]”(jíjîŒc-type”eh"]”h$]”h&]”uh1jáhjklubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”júŒ refdomain”jîŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰j³j·jŒdma_resv”uh1hh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:154: ./drivers/dma-buf/dma-resv.c”h´MhjclubhŒ# for a discussion of the semantics.”…”�”}”(hjclh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jŠlh´MhjZkubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jg hj¼bh²hh³Nh´NubjÉ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÕŒ$dma_resv_replace_fences (C function)”Œc.dma_resv_replace_fences”hNt”auh1jÈhj¼bh²hh³Nh´NubjÛ)�”}”(hhh]”(jà)�”}”(hŒvoid dma_resv_replace_fences (struct dma_resv *obj, uint64_t context, struct dma_fence *replacement, enum dma_resv_usage usage)”h]”jæ)�”}”(hŒ~void dma_resv_replace_fences(struct dma_resv *obj, uint64_t context, struct dma_fence *replacement, enum dma_resv_usage usage)”h]”(jM)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjµlh²hh³Nh´Nubah}”(h]”h ]”jYah"]”h$]”h&]”uh1jLhj±lh²hh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:154: ./drivers/dma-buf/dma-resv.c”h´MJubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÄlh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj±lh²hh³jÃlh´MJubj )�”}”(hŒdma_resv_replace_fences”h]”j )�”}”(hŒdma_resv_replace_fences”h]”hŒdma_resv_replace_fences”…”�”}”(hjÖlh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjÒlubah}”(h]”h ]”(j' j( eh"]”h$]”h&]”j÷jøuh1j hj±lh²hh³jÃlh´MJubjŒ)�”}”(hŒb(struct dma_resv *obj, uint64_t context, struct dma_fence *replacement, enum dma_resv_usage usage)”h]”(j’)�”}”(hŒstruct dma_resv *obj”h]”(jì)�”}”(hjïh]”hŒstruct”…”�”}”(hjòlh²hh³Nh´Nubah}”(h]”h ]”jøah"]”h$]”h&]”uh1jëhjîlubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÿlh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjîlubh)�”}”(hhh]”j )�”}”(hŒdma_resv”h]”hŒdma_resv”…”�”}”(hjmh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj mubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jîŒreftype”jGŒ reftarget”jmŒmodname”NŒ classname”Nj³j¶)�”}”j¹]”jO)�”}”jGjØlsbŒc.dma_resv_replace_fences”†”asbuh1hhjîlubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj0mh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjîlubjd)�”}”(hjgh]”hŒ*”…”�”}”(hj>mh²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchjîlubj )�”}”(hŒobj”h]”hŒobj”…”�”}”(hjKmh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjîlubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj÷jøuh1j‘hjêlubj’)�”}”(hŒuint64_t context”h]”(h)�”}”(hhh]”j )�”}”(hŒuint64_t”h]”hŒuint64_t”…”�”}”(hjgmh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjdmubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jîŒreftype”jGŒ reftarget”jimŒmodname”NŒ classname”Nj³j¶)�”}”j¹]”j,mŒc.dma_resv_replace_fences”†”asbuh1hhj`mubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj…mh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj`mubj )�”}”(hŒcontext”h]”hŒcontext”…”�”}”(hj“mh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj`mubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj÷jøuh1j‘hjêlubj’)�”}”(hŒstruct dma_fence *replacement”h]”(jì)�”}”(hjïh]”hŒstruct”…”�”}”(hj¬mh²hh³Nh´Nubah}”(h]”h ]”jøah"]”h$]”h&]”uh1jëhj¨mubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¹mh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj¨mubh)�”}”(hhh]”j )�”}”(hŒ dma_fence”h]”hŒ dma_fence”…”�”}”(hjÊmh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjÇmubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jîŒreftype”jGŒ reftarget”jÌmŒmodname”NŒ classname”Nj³j¶)�”}”j¹]”j,mŒc.dma_resv_replace_fences”†”asbuh1hhj¨mubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjèmh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj¨mubjd)�”}”(hjgh]”hŒ*”…”�”}”(hjömh²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchj¨mubj )�”}”(hŒ replacement”h]”hŒ replacement”…”�”}”(hjnh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj¨mubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj÷jøuh1j‘hjêlubj’)�”}”(hŒenum dma_resv_usage usage”h]”(jì)�”}”(hj×+h]”hŒenum”…”�”}”(hjnh²hh³Nh´Nubah}”(h]”h ]”jøah"]”h$]”h&]”uh1jëhjnubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj)nh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjnubh)�”}”(hhh]”j )�”}”(hŒdma_resv_usage”h]”hŒdma_resv_usage”…”�”}”(hj:nh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj7nubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jîŒreftype”jGŒ reftarget”j )j? huh1jßh³jÃlh´MJhjªlh²hubjA )�”}”(hhh]”hÌ)�”}”(hŒ"replace fences in the dma_resv obj”h]”hŒ"replace fences in the dma_resv obj”…”�”}”(hj�nh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:154: ./drivers/dma-buf/dma-resv.c”h´MJhj�nh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j@ hjªlh²hh³jÃlh´MJubeh}”(h]”h ]”(jîŒfunction”eh"]”h$]”h&]”ja jîjb j¨njc j¨njd ‰je ‰jf ‰uh1jÚh²hhj¼bh³Nh´Nubjh )�”}”(hX‡**Parameters** ``struct dma_resv *obj`` the reservation object ``uint64_t context`` the context of the fences to replace ``struct dma_fence *replacement`` the new fence to use instead ``enum dma_resv_usage usage`` how the new fence is used, see enum dma_resv_usage **Description** Replace fences with a specified context with a new fence. Only valid if the operation represented by the original fence has no longer access to the resources represented by the dma_resv object when the new fence completes. And example for using this is replacing a preemption fence with a page table update fence which makes the resource inaccessible.”h]”(hÌ)�”}”(hŒ**Parameters**”h]”jr )�”}”(hj²nh]”hŒ Parameters”…”�”}”(hj´nh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hj°nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:154: ./drivers/dma-buf/dma-resv.c”h´MNhj¬nubj´ )�”}”(hhh]”(j¹ )�”}”(hŒ0``struct dma_resv *obj`` the reservation object ”h]”(j¿ )�”}”(hŒ``struct dma_resv *obj``”h]”jâ)�”}”(hjÑnh]”hŒstruct dma_resv *obj”…”�”}”(hjÓnh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjÏnubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:154: ./drivers/dma-buf/dma-resv.c”h´MKhjËnubjÙ )�”}”(hhh]”hÌ)�”}”(hŒthe reservation object”h]”hŒthe reservation object”…”�”}”(hjênh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jænh´MKhjçnubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hjËnubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³jænh´MKhjÈnubj¹ )�”}”(hŒ:``uint64_t context`` the context of the fences to replace ”h]”(j¿ )�”}”(hŒ``uint64_t context``”h]”jâ)�”}”(hj oh]”hŒuint64_t context”…”�”}”(hj oh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjoubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:154: ./drivers/dma-buf/dma-resv.c”h´MLhjoubjÙ )�”}”(hhh]”hÌ)�”}”(hŒ$the context of the fences to replace”h]”hŒ$the context of the fences to replace”…”�”}”(hj#oh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³joh´MLhj oubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hjoubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³joh´MLhjÈnubj¹ )�”}”(hŒ?``struct dma_fence *replacement`` the new fence to use instead ”h]”(j¿ )�”}”(hŒ!``struct dma_fence *replacement``”h]”jâ)�”}”(hjCoh]”hŒstruct dma_fence *replacement”…”�”}”(hjEoh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjAoubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:154: ./drivers/dma-buf/dma-resv.c”h´MMhj=oubjÙ )�”}”(hhh]”hÌ)�”}”(hŒthe new fence to use instead”h]”hŒthe new fence to use instead”…”�”}”(hj\oh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jXoh´MMhjYoubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hj=oubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³jXoh´MMhjÈnubj¹ )�”}”(hŒQ``enum dma_resv_usage usage`` how the new fence is used, see enum dma_resv_usage ”h]”(j¿ )�”}”(hŒ``enum dma_resv_usage usage``”h]”jâ)�”}”(hj|oh]”hŒenum dma_resv_usage usage”…”�”}”(hj~oh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjzoubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:154: ./drivers/dma-buf/dma-resv.c”h´MNhjvoubjÙ )�”}”(hhh]”hÌ)�”}”(hŒ2how the new fence is used, see enum dma_resv_usage”h]”hŒ2how the new fence is used, see enum dma_resv_usage”…”�”}”(hj•oh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j‘oh´MNhj’oubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hjvoubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³j‘oh´MNhjÈnubeh}”(h]”h ]”h"]”h$]”h&]”uh1j³ hj¬nubhÌ)�”}”(hŒ**Description**”h]”jr )�”}”(hj·oh]”hŒ Description”…”�”}”(hj¹oh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hjµoubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:154: ./drivers/dma-buf/dma-resv.c”h´MPhj¬nubhÌ)�”}”(hŒÞReplace fences with a specified context with a new fence. Only valid if the operation represented by the original fence has no longer access to the resources represented by the dma_resv object when the new fence completes.”h]”hŒÞReplace fences with a specified context with a new fence. Only valid if the operation represented by the original fence has no longer access to the resources represented by the dma_resv object when the new fence completes.”…”�”}”(hjÍoh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:154: ./drivers/dma-buf/dma-resv.c”h´MOhj¬nubhÌ)�”}”(hŒ€And example for using this is replacing a preemption fence with a page table update fence which makes the resource inaccessible.”h]”hŒ€And example for using this is replacing a preemption fence with a page table update fence which makes the resource inaccessible.”…”�”}”(hjÜoh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:154: ./drivers/dma-buf/dma-resv.c”h´MShj¬nubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jg hj¼bh²hh³Nh´NubjÉ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÕŒ)dma_resv_iter_first_unlocked (C function)”Œc.dma_resv_iter_first_unlocked”hNt”auh1jÈhj¼bh²hh³Nh´NubjÛ)�”}”(hhh]”(jà)�”}”(hŒNstruct dma_fence * dma_resv_iter_first_unlocked (struct dma_resv_iter *cursor)”h]”jæ)�”}”(hŒLstruct dma_fence *dma_resv_iter_first_unlocked(struct dma_resv_iter *cursor)”h]”(jì)�”}”(hjïh]”hŒstruct”…”�”}”(hj ph²hh³Nh´Nubah}”(h]”h ]”jøah"]”h$]”h&]”uh1jëhjph²hh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:154: ./drivers/dma-buf/dma-resv.c”h´M™ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjph²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjph²hh³jph´M™ubh)�”}”(hhh]”j )�”}”(hŒ dma_fence”h]”hŒ dma_fence”…”�”}”(hj*ph²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj'pubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jîŒreftype”jGŒ reftarget”j,pŒmodname”NŒ classname”Nj³j¶)�”}”j¹]”jO)�”}”jGŒdma_resv_iter_first_unlocked”sbŒc.dma_resv_iter_first_unlocked”†”asbuh1hhjph²hh³jph´M™ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjKph²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjph²hh³jph´M™ubjd)�”}”(hjgh]”hŒ*”…”�”}”(hjYph²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchjph²hh³jph´M™ubj )�”}”(hŒdma_resv_iter_first_unlocked”h]”j )�”}”(hjHph]”hŒdma_resv_iter_first_unlocked”…”�”}”(hjjph²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjfpubah}”(h]”h ]”(j' j( eh"]”h$]”h&]”j÷jøuh1j hjph²hh³jph´M™ubjŒ)�”}”(hŒ(struct dma_resv_iter *cursor)”h]”j’)�”}”(hŒstruct dma_resv_iter *cursor”h]”(jì)�”}”(hjïh]”hŒstruct”…”�”}”(hj…ph²hh³Nh´Nubah}”(h]”h ]”jøah"]”h$]”h&]”uh1jëhj�pubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj’ph²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj�pubh)�”}”(hhh]”j )�”}”(hŒ dma_resv_iter”h]”hŒ dma_resv_iter”…”�”}”(hj£ph²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj pubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jîŒreftype”jGŒ reftarget”j¥pŒmodname”NŒ classname”Nj³j¶)�”}”j¹]”jFpŒc.dma_resv_iter_first_unlocked”†”asbuh1hhj�pubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÁph²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj�pubjd)�”}”(hjgh]”hŒ*”…”�”}”(hjÏph²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchj�pubj )�”}”(hŒcursor”h]”hŒcursor”…”�”}”(hjÜph²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj�pubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj÷jøuh1j‘hj}pubah}”(h]”h ]”h"]”h$]”h&]”j÷jøuh1j‹hjph²hh³jph´M™ubeh}”(h]”h ]”h"]”h$]”h&]”j÷jøj2 ˆuh1jåj3 j4 hjph²hh³jph´M™ubah}”(h]”jþoah ]”(j8 j9 eh"]”h$]”h&]”j= ˆj> )j? huh1jßh³jph´M™hjph²hubjA )�”}”(hhh]”hÌ)�”}”(hŒ(first fence in an unlocked dma_resv obj.”h]”hŒ(first fence in an unlocked dma_resv obj.”…”�”}”(hjqh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:154: ./drivers/dma-buf/dma-resv.c”h´M™hjqh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j@ hjph²hh³jph´M™ubeh}”(h]”h ]”(jîŒfunction”eh"]”h$]”h&]”ja jîjb jqjc jqjd ‰je ‰jf ‰uh1jÚh²hhj¼bh³Nh´Nubjh )�”}”(hXÄ**Parameters** ``struct dma_resv_iter *cursor`` the cursor with the current position **Description** Subsequent fences are iterated with dma_resv_iter_next_unlocked(). Beware that the iterator can be restarted. Code which accumulates statistics or similar needs to check for this with dma_resv_iter_is_restarted(). For this reason prefer the locked dma_resv_iter_first() whenever possible. Returns the first fence from an unlocked dma_resv obj.”h]”(hÌ)�”}”(hŒ**Parameters**”h]”jr )�”}”(hj(qh]”hŒ Parameters”…”�”}”(hj*qh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hj&qubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:154: ./drivers/dma-buf/dma-resv.c”h´M�hj"qubj´ )�”}”(hhh]”j¹ )�”}”(hŒF``struct dma_resv_iter *cursor`` the cursor with the current position ”h]”(j¿ )�”}”(hŒ ``struct dma_resv_iter *cursor``”h]”jâ)�”}”(hjGqh]”hŒstruct dma_resv_iter *cursor”…”�”}”(hjIqh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjEqubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:154: ./drivers/dma-buf/dma-resv.c”h´MšhjAqubjÙ )�”}”(hhh]”hÌ)�”}”(hŒ$the cursor with the current position”h]”hŒ$the cursor with the current position”…”�”}”(hj`qh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j\qh´Mšhj]qubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hjAqubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³j\qh´Mšhj>qubah}”(h]”h ]”h"]”h$]”h&]”uh1j³ hj"qubhÌ)�”}”(hŒ**Description**”h]”jr )�”}”(hj‚qh]”hŒ Description”…”�”}”(hj„qh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hj€qubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:154: ./drivers/dma-buf/dma-resv.c”h´Mœhj"qubhÌ)�”}”(hŒBSubsequent fences are iterated with dma_resv_iter_next_unlocked().”h]”hŒBSubsequent fences are iterated with dma_resv_iter_next_unlocked().”…”�”}”(hj˜qh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:154: ./drivers/dma-buf/dma-resv.c”h´M›hj"qubhÌ)�”}”(hŒÞBeware that the iterator can be restarted. Code which accumulates statistics or similar needs to check for this with dma_resv_iter_is_restarted(). For this reason prefer the locked dma_resv_iter_first() whenever possible.”h]”hŒÞBeware that the iterator can be restarted. Code which accumulates statistics or similar needs to check for this with dma_resv_iter_is_restarted(). For this reason prefer the locked dma_resv_iter_first() whenever possible.”…”�”}”(hj§qh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:154: ./drivers/dma-buf/dma-resv.c”h´M�hj"qubhÌ)�”}”(hŒ6Returns the first fence from an unlocked dma_resv obj.”h]”hŒ6Returns the first fence from an unlocked dma_resv obj.”…”�”}”(hj¶qh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:154: ./drivers/dma-buf/dma-resv.c”h´M¡hj"qubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jg hj¼bh²hh³Nh´NubjÉ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÕŒ(dma_resv_iter_next_unlocked (C function)”Œc.dma_resv_iter_next_unlocked”hNt”auh1jÈhj¼bh²hh³Nh´NubjÛ)�”}”(hhh]”(jà)�”}”(hŒMstruct dma_fence * dma_resv_iter_next_unlocked (struct dma_resv_iter *cursor)”h]”jæ)�”}”(hŒKstruct dma_fence *dma_resv_iter_next_unlocked(struct dma_resv_iter *cursor)”h]”(jì)�”}”(hjïh]”hŒstruct”…”�”}”(hjåqh²hh³Nh´Nubah}”(h]”h ]”jøah"]”h$]”h&]”uh1jëhjáqh²hh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:154: ./drivers/dma-buf/dma-resv.c”h´M²ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjóqh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjáqh²hh³jòqh´M²ubh)�”}”(hhh]”j )�”}”(hŒ dma_fence”h]”hŒ dma_fence”…”�”}”(hjrh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjrubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jîŒreftype”jGŒ reftarget”jrŒmodname”NŒ classname”Nj³j¶)�”}”j¹]”jO)�”}”jGŒdma_resv_iter_next_unlocked”sbŒc.dma_resv_iter_next_unlocked”†”asbuh1hhjáqh²hh³jòqh´M²ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj%rh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjáqh²hh³jòqh´M²ubjd)�”}”(hjgh]”hŒ*”…”�”}”(hj3rh²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchjáqh²hh³jòqh´M²ubj )�”}”(hŒdma_resv_iter_next_unlocked”h]”j )�”}”(hj"rh]”hŒdma_resv_iter_next_unlocked”…”�”}”(hjDrh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj@rubah}”(h]”h ]”(j' j( eh"]”h$]”h&]”j÷jøuh1j hjáqh²hh³jòqh´M²ubjŒ)�”}”(hŒ(struct dma_resv_iter *cursor)”h]”j’)�”}”(hŒstruct dma_resv_iter *cursor”h]”(jì)�”}”(hjïh]”hŒstruct”…”�”}”(hj_rh²hh³Nh´Nubah}”(h]”h ]”jøah"]”h$]”h&]”uh1jëhj[rubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjlrh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj[rubh)�”}”(hhh]”j )�”}”(hŒ dma_resv_iter”h]”hŒ dma_resv_iter”…”�”}”(hj}rh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjzrubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jîŒreftype”jGŒ reftarget”jrŒmodname”NŒ classname”Nj³j¶)�”}”j¹]”j rŒc.dma_resv_iter_next_unlocked”†”asbuh1hhj[rubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj›rh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj[rubjd)�”}”(hjgh]”hŒ*”…”�”}”(hj©rh²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchj[rubj )�”}”(hŒcursor”h]”hŒcursor”…”�”}”(hj¶rh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj[rubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj÷jøuh1j‘hjWrubah}”(h]”h ]”h"]”h$]”h&]”j÷jøuh1j‹hjáqh²hh³jòqh´M²ubeh}”(h]”h ]”h"]”h$]”h&]”j÷jøj2 ˆuh1jåj3 j4 hjÝqh²hh³jòqh´M²ubah}”(h]”jØqah ]”(j8 j9 eh"]”h$]”h&]”j= ˆj> )j? huh1jßh³jòqh´M²hjÚqh²hubjA )�”}”(hhh]”hÌ)�”}”(hŒ'next fence in an unlocked dma_resv obj.”h]”hŒ'next fence in an unlocked dma_resv obj.”…”�”}”(hjàrh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:154: ./drivers/dma-buf/dma-resv.c”h´M²hjÝrh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j@ hjÚqh²hh³jòqh´M²ubeh}”(h]”h ]”(jîŒfunction”eh"]”h$]”h&]”ja jîjb jørjc jørjd ‰je ‰jf ‰uh1jÚh²hhj¼bh³Nh´Nubjh )�”}”(hX~**Parameters** ``struct dma_resv_iter *cursor`` the cursor with the current position **Description** Beware that the iterator can be restarted. Code which accumulates statistics or similar needs to check for this with dma_resv_iter_is_restarted(). For this reason prefer the locked dma_resv_iter_next() whenever possible. Returns the next fence from an unlocked dma_resv obj.”h]”(hÌ)�”}”(hŒ**Parameters**”h]”jr )�”}”(hjsh]”hŒ Parameters”…”�”}”(hjsh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hjsubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:154: ./drivers/dma-buf/dma-resv.c”h´M¶hjürubj´ )�”}”(hhh]”j¹ )�”}”(hŒF``struct dma_resv_iter *cursor`` the cursor with the current position ”h]”(j¿ )�”}”(hŒ ``struct dma_resv_iter *cursor``”h]”jâ)�”}”(hj!sh]”hŒstruct dma_resv_iter *cursor”…”�”}”(hj#sh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjsubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:154: ./drivers/dma-buf/dma-resv.c”h´M³hjsubjÙ )�”}”(hhh]”hÌ)�”}”(hŒ$the cursor with the current position”h]”hŒ$the cursor with the current position”…”�”}”(hj:sh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j6sh´M³hj7subah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hjsubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³j6sh´M³hjsubah}”(h]”h ]”h"]”h$]”h&]”uh1j³ hjürubhÌ)�”}”(hŒ**Description**”h]”jr )�”}”(hj\sh]”hŒ Description”…”�”}”(hj^sh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hjZsubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:154: ./drivers/dma-buf/dma-resv.c”h´MµhjürubhÌ)�”}”(hŒÝBeware that the iterator can be restarted. Code which accumulates statistics or similar needs to check for this with dma_resv_iter_is_restarted(). For this reason prefer the locked dma_resv_iter_next() whenever possible.”h]”hŒÝBeware that the iterator can be restarted. Code which accumulates statistics or similar needs to check for this with dma_resv_iter_is_restarted(). For this reason prefer the locked dma_resv_iter_next() whenever possible.”…”�”}”(hjrsh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:154: ./drivers/dma-buf/dma-resv.c”• h´M´hjürubhÌ)�”}”(hŒ5Returns the next fence from an unlocked dma_resv obj.”h]”hŒ5Returns the next fence from an unlocked dma_resv obj.”…”�”}”(hj�sh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:154: ./drivers/dma-buf/dma-resv.c”h´M¸hjürubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jg hj¼bh²hh³Nh´NubjÉ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÕŒ dma_resv_iter_first (C function)”Œc.dma_resv_iter_first”hNt”auh1jÈhj¼bh²hh³Nh´NubjÛ)�”}”(hhh]”(jà)�”}”(hŒEstruct dma_fence * dma_resv_iter_first (struct dma_resv_iter *cursor)”h]”jæ)�”}”(hŒCstruct dma_fence *dma_resv_iter_first(struct dma_resv_iter *cursor)”h]”(jì)�”}”(hjïh]”hŒstruct”…”�”}”(hj°sh²hh³Nh´Nubah}”(h]”h ]”jøah"]”h$]”h&]”uh1jëhj¬sh²hh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:154: ./drivers/dma-buf/dma-resv.c”h´MÏubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¾sh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj¬sh²hh³j½sh´MÏubh)�”}”(hhh]”j )�”}”(hŒ dma_fence”h]”hŒ dma_fence”…”�”}”(hjÏsh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjÌsubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jîŒreftype”jGŒ reftarget”jÑsŒmodname”NŒ classname”Nj³j¶)�”}”j¹]”jO)�”}”jGŒdma_resv_iter_first”sbŒc.dma_resv_iter_first”†”asbuh1hhj¬sh²hh³j½sh´MÏubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjðsh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj¬sh²hh³j½sh´MÏubjd)�”}”(hjgh]”hŒ*”…”�”}”(hjþsh²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchj¬sh²hh³j½sh´MÏubj )�”}”(hŒdma_resv_iter_first”h]”j )�”}”(hjísh]”hŒdma_resv_iter_first”…”�”}”(hjth²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj tubah}”(h]”h ]”(j' j( eh"]”h$]”h&]”j÷jøuh1j hj¬sh²hh³j½sh´MÏubjŒ)�”}”(hŒ(struct dma_resv_iter *cursor)”h]”j’)�”}”(hŒstruct dma_resv_iter *cursor”h]”(jì)�”}”(hjïh]”hŒstruct”…”�”}”(hj*th²hh³Nh´Nubah}”(h]”h ]”jøah"]”h$]”h&]”uh1jëhj&tubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj7th²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj&tubh)�”}”(hhh]”j )�”}”(hŒ dma_resv_iter”h]”hŒ dma_resv_iter”…”�”}”(hjHth²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjEtubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jîŒreftype”jGŒ reftarget”jJtŒmodname”NŒ classname”Nj³j¶)�”}”j¹]”jësŒc.dma_resv_iter_first”†”asbuh1hhj&tubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjfth²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj&tubjd)�”}”(hjgh]”hŒ*”…”�”}”(hjtth²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchj&tubj )�”}”(hŒcursor”h]”hŒcursor”…”�”}”(hj�th²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj&tubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj÷jøuh1j‘hj"tubah}”(h]”h ]”h"]”h$]”h&]”j÷jøuh1j‹hj¬sh²hh³j½sh´MÏubeh}”(h]”h ]”h"]”h$]”h&]”j÷jøj2 ˆuh1jåj3 j4 hj¨sh²hh³j½sh´MÏubah}”(h]”j£sah ]”(j8 j9 eh"]”h$]”h&]”j= ˆj> )j? huh1jßh³j½sh´MÏhj¥sh²hubjA )�”}”(hhh]”hÌ)�”}”(hŒ)first fence from a locked dma_resv object”h]”hŒ)first fence from a locked dma_resv object”…”�”}”(hj«th²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:154: ./drivers/dma-buf/dma-resv.c”h´MÏhj¨th²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j@ hj¥sh²hh³j½sh´MÏubeh}”(h]”h ]”(jîŒfunction”eh"]”h$]”h&]”ja jîjb jÃtjc jÃtjd ‰je ‰jf ‰uh1jÚh²hhj¼bh³Nh´Nubjh )�”}”(hX**Parameters** ``struct dma_resv_iter *cursor`` cursor to record the current position **Description** Subsequent fences are iterated with dma_resv_iter_next_unlocked(). Return the first fence in the dma_resv object while holding the :c:type:`dma_resv.lock `.”h]”(hÌ)�”}”(hŒ**Parameters**”h]”jr )�”}”(hjÍth]”hŒ Parameters”…”�”}”(hjÏth²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hjËtubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:154: ./drivers/dma-buf/dma-resv.c”h´MÓhjÇtubj´ )�”}”(hhh]”j¹ )�”}”(hŒG``struct dma_resv_iter *cursor`` cursor to record the current position ”h]”(j¿ )�”}”(hŒ ``struct dma_resv_iter *cursor``”h]”jâ)�”}”(hjìth]”hŒstruct dma_resv_iter *cursor”…”�”}”(hjîth²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjêtubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:154: ./drivers/dma-buf/dma-resv.c”h´MÐhjætubjÙ )�”}”(hhh]”hÌ)�”}”(hŒ%cursor to record the current position”h]”hŒ%cursor to record the current position”…”�”}”(hjuh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³juh´MÐhjuubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hjætubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³juh´MÐhjãtubah}”(h]”h ]”h"]”h$]”h&]”uh1j³ hjÇtubhÌ)�”}”(hŒ**Description**”h]”jr )�”}”(hj'uh]”hŒ Description”…”�”}”(hj)uh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hj%uubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:154: ./drivers/dma-buf/dma-resv.c”h´MÒhjÇtubhÌ)�”}”(hŒBSubsequent fences are iterated with dma_resv_iter_next_unlocked().”h]”hŒBSubsequent fences are iterated with dma_resv_iter_next_unlocked().”…”�”}”(hj=uh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:154: ./drivers/dma-buf/dma-resv.c”h´MÑhjÇtubhÌ)�”}”(hŒcReturn the first fence in the dma_resv object while holding the :c:type:`dma_resv.lock `.”h]”(hŒ@Return the first fence in the dma_resv object while holding the ”…”�”}”(hjLuh²hh³Nh´Nubh)�”}”(hŒ":c:type:`dma_resv.lock `”h]”jâ)�”}”(hjVuh]”hŒ dma_resv.lock”…”�”}”(hjXuh²hh³Nh´Nubah}”(h]”h ]”(jíjîŒc-type”eh"]”h$]”h&]”uh1jáhjTuubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”júŒ refdomain”jîŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰j³j·jŒdma_resv”uh1hh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:154: ./drivers/dma-buf/dma-resv.c”h´MÓhjLuubhŒ.”…”�”}”(hjLuh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jsuh´MÓhjÇtubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jg hj¼bh²hh³Nh´NubjÉ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÕŒdma_resv_iter_next (C function)”Œc.dma_resv_iter_next”hNt”auh1jÈhj¼bh²hh³Nh´NubjÛ)�”}”(hhh]”(jà)�”}”(hŒDstruct dma_fence * dma_resv_iter_next (struct dma_resv_iter *cursor)”h]”jæ)�”}”(hŒBstruct dma_fence *dma_resv_iter_next(struct dma_resv_iter *cursor)”h]”(jì)�”}”(hjïh]”hŒstruct”…”�”}”(hjžuh²hh³Nh´Nubah}”(h]”h ]”jøah"]”h$]”h&]”uh1jëhjšuh²hh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:154: ./drivers/dma-buf/dma-resv.c”h´Mçubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¬uh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjšuh²hh³j«uh´Mçubh)�”}”(hhh]”j )�”}”(hŒ dma_fence”h]”hŒ dma_fence”…”�”}”(hj½uh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjºuubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jîŒreftype”jGŒ reftarget”j¿uŒmodname”NŒ classname”Nj³j¶)�”}”j¹]”jO)�”}”jGŒdma_resv_iter_next”sbŒc.dma_resv_iter_next”†”asbuh1hhjšuh²hh³j«uh´Mçubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÞuh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjšuh²hh³j«uh´Mçubjd)�”}”(hjgh]”hŒ*”…”�”}”(hjìuh²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchjšuh²hh³j«uh´Mçubj )�”}”(hŒdma_resv_iter_next”h]”j )�”}”(hjÛuh]”hŒdma_resv_iter_next”…”�”}”(hjýuh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjùuubah}”(h]”h ]”(j' j( eh"]”h$]”h&]”j÷jøuh1j hjšuh²hh³j«uh´MçubjŒ)�”}”(hŒ(struct dma_resv_iter *cursor)”h]”j’)�”}”(hŒstruct dma_resv_iter *cursor”h]”(jì)�”}”(hjïh]”hŒstruct”…”�”}”(hjvh²hh³Nh´Nubah}”(h]”h ]”jøah"]”h$]”h&]”uh1jëhjvubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj%vh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjvubh)�”}”(hhh]”j )�”}”(hŒ dma_resv_iter”h]”hŒ dma_resv_iter”…”�”}”(hj6vh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj3vubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jîŒreftype”jGŒ reftarget”j8vŒmodname”NŒ classname”Nj³j¶)�”}”j¹]”jÙuŒc.dma_resv_iter_next”†”asbuh1hhjvubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjTvh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjvubjd)�”}”(hjgh]”hŒ*”…”�”}”(hjbvh²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchjvubj )�”}”(hŒcursor”h]”hŒcursor”…”�”}”(hjovh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjvubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj÷jøuh1j‘hjvubah}”(h]”h ]”h"]”h$]”h&]”j÷jøuh1j‹hjšuh²hh³j«uh´Mçubeh}”(h]”h ]”h"]”h$]”h&]”j÷jøj2 ˆuh1jåj3 j4 hj–uh²hh³j«uh´Mçubah}”(h]”j‘uah ]”(j8 j9 eh"]”h$]”h&]”j= ˆj> )j? huh1jßh³j«uh´Mçhj“uh²hubjA )�”}”(hhh]”hÌ)�”}”(hŒ(next fence from a locked dma_resv object”h]”hŒ(next fence from a locked dma_resv object”…”�”}”(hj™vh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:154: ./drivers/dma-buf/dma-resv.c”h´Mçhj–vh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j@ hj“uh²hh³j«uh´Mçubeh}”(h]”h ]”(jîŒfunction”eh"]”h$]”h&]”ja jîjb j±vjc j±vjd ‰je ‰jf ‰uh1jÚh²hhj¼bh³Nh´Nubjh )�”}”(hŒÐ**Parameters** ``struct dma_resv_iter *cursor`` cursor to record the current position **Description** Return the next fences from the dma_resv object while holding the :c:type:`dma_resv.lock `.”h]”(hÌ)�”}”(hŒ**Parameters**”h]”jr )�”}”(hj»vh]”hŒ Parameters”…”�”}”(hj½vh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hj¹vubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:154: ./drivers/dma-buf/dma-resv.c”h´Mëhjµvubj´ )�”}”(hhh]”j¹ )�”}”(hŒG``struct dma_resv_iter *cursor`` cursor to record the current position ”h]”(j¿ )�”}”(hŒ ``struct dma_resv_iter *cursor``”h]”jâ)�”}”(hjÚvh]”hŒstruct dma_resv_iter *cursor”…”�”}”(hjÜvh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjØvubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:154: ./drivers/dma-buf/dma-resv.c”h´MèhjÔvubjÙ )�”}”(hhh]”hÌ)�”}”(hŒ%cursor to record the current position”h]”hŒ%cursor to record the current position”…”�”}”(hjóvh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jïvh´Mèhjðvubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hjÔvubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³jïvh´MèhjÑvubah}”(h]”h ]”h"]”h$]”h&]”uh1j³ hjµvubhÌ)�”}”(hŒ**Description**”h]”jr )�”}”(hjwh]”hŒ Description”…”�”}”(hjwh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hjwubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:154: ./drivers/dma-buf/dma-resv.c”h´MêhjµvubhÌ)�”}”(hŒeReturn the next fences from the dma_resv object while holding the :c:type:`dma_resv.lock `.”h]”(hŒBReturn the next fences from the dma_resv object while holding the ”…”�”}”(hj+wh²hh³Nh´Nubh)�”}”(hŒ":c:type:`dma_resv.lock `”h]”jâ)�”}”(hj5wh]”hŒ dma_resv.lock”…”�”}”(hj7wh²hh³Nh´Nubah}”(h]”h ]”(jíjîŒc-type”eh"]”h$]”h&]”uh1jáhj3wubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”júŒ refdomain”jîŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰j³j·jŒdma_resv”uh1hh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:154: ./drivers/dma-buf/dma-resv.c”h´Méhj+wubhŒ.”…”�”}”(hj+wh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jRwh´Méhjµvubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jg hj¼bh²hh³Nh´NubjÉ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÕŒ!dma_resv_copy_fences (C function)”Œc.dma_resv_copy_fences”hNt”auh1jÈhj¼bh²hh³Nh´NubjÛ)�”}”(hhh]”(jà)�”}”(hŒEint dma_resv_copy_fences (struct dma_resv *dst, struct dma_resv *src)”h]”jæ)�”}”(hŒDint dma_resv_copy_fences(struct dma_resv *dst, struct dma_resv *src)”h]”(jM)�”}”(hŒint”h]”hŒint”…”�”}”(hj}wh²hh³Nh´Nubah}”(h]”h ]”jYah"]”h$]”h&]”uh1jLhjywh²hh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:154: ./drivers/dma-buf/dma-resv.c”h´Mubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŒwh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjywh²hh³j‹wh´Mubj )�”}”(hŒdma_resv_copy_fences”h]”j )�”}”(hŒdma_resv_copy_fences”h]”hŒdma_resv_copy_fences”…”�”}”(hjžwh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjšwubah}”(h]”h ]”(j' j( eh"]”h$]”h&]”j÷jøuh1j hjywh²hh³j‹wh´MubjŒ)�”}”(hŒ,(struct dma_resv *dst, struct dma_resv *src)”h]”(j’)�”}”(hŒstruct dma_resv *dst”h]”(jì)�”}”(hjïh]”hŒstruct”…”�”}”(hjºwh²hh³Nh´Nubah}”(h]”h ]”jøah"]”h$]”h&]”uh1jëhj¶wubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÇwh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj¶wubh)�”}”(hhh]”j )�”}”(hŒdma_resv”h]”hŒdma_resv”…”�”}”(hjØwh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjÕwubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jîŒreftype”jGŒ reftarget”jÚwŒmodname”NŒ classname”Nj³j¶)�”}”j¹]”jO)�”}”jGj wsbŒc.dma_resv_copy_fences”†”asbuh1hhj¶wubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjøwh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj¶wubjd)�”}”(hjgh]”hŒ*”…”�”}”(hjxh²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchj¶wubj )�”}”(hŒdst”h]”hŒdst”…”�”}”(hjxh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj¶wubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj÷jøuh1j‘hj²wubj’)�”}”(hŒstruct dma_resv *src”h]”(jì)�”}”(hjïh]”hŒstruct”…”�”}”(hj,xh²hh³Nh´Nubah}”(h]”h ]”jøah"]”h$]”h&]”uh1jëhj(xubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj9xh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj(xubh)�”}”(hhh]”j )�”}”(hŒdma_resv”h]”hŒdma_resv”…”�”}”(hjJxh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjGxubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jîŒreftype”jGŒ reftarget”jLxŒmodname”NŒ classname”Nj³j¶)�”}”j¹]”jôwŒc.dma_resv_copy_fences”†”asbuh1hhj(xubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjhxh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj(xubjd)�”}”(hjgh]”hŒ*”…”�”}”(hjvxh²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchj(xubj )�”}”(hŒsrc”h]”hŒsrc”…”�”}”(hjƒxh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj(xubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj÷jøuh1j‘hj²wubeh}”(h]”h ]”h"]”h$]”h&]”j÷jøuh1j‹hjywh²hh³j‹wh´Mubeh}”(h]”h ]”h"]”h$]”h&]”j÷jøj2 ˆuh1jåj3 j4 hjuwh²hh³j‹wh´Mubah}”(h]”jpwah ]”(j8 j9 eh"]”h$]”h&]”j= ˆj> )j? huh1jßh³j‹wh´Mhjrwh²hubjA )�”}”(hhh]”hÌ)�”}”(hŒ Copy all fences from src to dst.”h]”hŒ Copy all fences from src to dst.”…”�”}”(hj­xh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:154: ./drivers/dma-buf/dma-resv.c”h´Mhjªxh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j@ hjrwh²hh³j‹wh´Mubeh}”(h]”h ]”(jîŒfunction”eh"]”h$]”h&]”ja jîjb jÅxjc jÅxjd ‰je ‰jf ‰uh1jÚh²hhj¼bh³Nh´Nubjh )�”}”(hŒÑ**Parameters** ``struct dma_resv *dst`` the destination reservation object ``struct dma_resv *src`` the source reservation object **Description** Copy all fences from src to dst. dst-lock must be held.”h]”(hÌ)�”}”(hŒ**Parameters**”h]”jr )�”}”(hjÏxh]”hŒ Parameters”…”�”}”(hjÑxh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hjÍxubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:154: ./drivers/dma-buf/dma-resv.c”h´MhjÉxubj´ )�”}”(hhh]”(j¹ )�”}”(hŒ<``struct dma_resv *dst`` the destination reservation object ”h]”(j¿ )�”}”(hŒ``struct dma_resv *dst``”h]”jâ)�”}”(hjîxh]”hŒstruct dma_resv *dst”…”�”}”(hjðxh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjìxubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:154: ./drivers/dma-buf/dma-resv.c”h´MhjèxubjÙ )�”}”(hhh]”hÌ)�”}”(hŒ"the destination reservation object”h]”hŒ"the destination reservation object”…”�”}”(hjyh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jyh´Mhjyubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hjèxubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³jyh´Mhjåxubj¹ )�”}”(hŒ7``struct dma_resv *src`` the source reservation object ”h]”(j¿ )�”}”(hŒ``struct dma_resv *src``”h]”jâ)�”}”(hj'yh]”hŒstruct dma_resv *src”…”�”}”(hj)yh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj%yubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:154: ./drivers/dma-buf/dma-resv.c”h´Mhj!yubjÙ )�”}”(hhh]”hÌ)�”}”(hŒthe source reservation object”h]”hŒthe source reservation object”…”�”}”(hj@yh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j )j? huh1jßh³jµyh´M.hjœyh²hubjA )�”}”(hhh]”hÌ)�”}”(hŒ;Get an object's fences fences without update side lock held”h]”hŒ=Get an object’s fences fences without update side lock held”…”�”}”(hj²{h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:154: ./drivers/dma-buf/dma-resv.c”h´M.hj¯{h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j@ hjœyh²hh³jµyh´M.ubeh}”(h]”h ]”(jîŒfunction”eh"]”h$]”h&]”ja jîjb jÊ{jc jÊ{jd ‰je ‰jf ‰uh1jÚh²hhj¼bh³Nh´Nubjh )�”}”(hXË**Parameters** ``struct dma_resv *obj`` the reservation object ``enum dma_resv_usage usage`` controls which fences to include, see enum dma_resv_usage. ``unsigned int *num_fences`` the number of fences returned ``struct dma_fence ***fences`` the array of fence ptrs returned (array is krealloc'd to the required size, and must be freed by caller) **Description** Retrieve all fences from the reservation object. Returns either zero or -ENOMEM.”h]”(hÌ)�”}”(hŒ**Parameters**”h]”jr )�”}”(hjÔ{h]”hŒ Parameters”…”�”}”(hjÖ{h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hjÒ{ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:154: ./drivers/dma-buf/dma-resv.c”h´M2hjÎ{ubj´ )�”}”(hhh]”(j¹ )�”}”(hŒ0``struct dma_resv *obj`` the reservation object ”h]”(j¿ )�”}”(hŒ``struct dma_resv *obj``”h]”jâ)�”}”(hjó{h]”hŒstruct dma_resv *obj”…”�”}”(hjõ{h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjñ{ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:154: ./drivers/dma-buf/dma-resv.c”h´M0hjí{ubjÙ )�”}”(hhh]”hÌ)�”}”(hŒthe reservation object”h]”hŒthe reservation object”…”�”}”(hj |h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j|h´M0hj |ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hjí{ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³j|h´M0hjê{ubj¹ )�”}”(hŒY``enum dma_resv_usage usage`` controls which fences to include, see enum dma_resv_usage. ”h]”(j¿ )�”}”(hŒ``enum dma_resv_usage usage``”h]”jâ)�”}”(hj,|h]”hŒenum dma_resv_usage usage”…”�”}”(hj.|h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj*|ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:154: ./drivers/dma-buf/dma-resv.c”h´M1hj&|ubjÙ )�”}”(hhh]”hÌ)�”}”(hŒ:controls which fences to include, see enum dma_resv_usage.”h]”hŒ:controls which fences to include, see enum dma_resv_usage.”…”�”}”(hjE|h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jA|h´M1hjB|ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hj&|ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³jA|h´M1hjê{ubj¹ )�”}”(hŒ;``unsigned int *num_fences`` the number of fences returned ”h]”(j¿ )�”}”(hŒ``unsigned int *num_fences``”h]”jâ)�”}”(hje|h]”hŒunsigned int *num_fences”…”�”}”(hjg|h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjc|ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:154: ./drivers/dma-buf/dma-resv.c”h´M2hj_|ubjÙ )�”}”(hhh]”hÌ)�”}”(hŒthe number of fences returned”h]”hŒthe number of fences returned”…”�”}”(hj~|h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jz|h´M2hj{|ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hj_|ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³jz|h´M2hjê{ubj¹ )�”}”(hŒˆ``struct dma_fence ***fences`` the array of fence ptrs returned (array is krealloc'd to the required size, and must be freed by caller) ”h]”(j¿ )�”}”(hŒ``struct dma_fence ***fences``”h]”jâ)�”}”(hjž|h]”hŒstruct dma_fence ***fences”…”�”}”(hj |h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjœ|ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:154: ./drivers/dma-buf/dma-resv.c”h´M4hj˜|ubjÙ )�”}”(hhh]”hÌ)�”}”(hŒhthe array of fence ptrs returned (array is krealloc'd to the required size, and must be freed by caller)”h]”hŒjthe array of fence ptrs returned (array is krealloc’d to the required size, and must be freed by caller)”…”�”}”(hj·|h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:154: ./drivers/dma-buf/dma-resv.c”h´M3hj´|ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hj˜|ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³j³|h´M4hjê{ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j³ hjÎ{ubhÌ)�”}”(hŒ**Description**”h]”jr )�”}”(hjÚ|h]”hŒ Description”…”�”}”(hjÜ|h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hjØ|ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:154: ./drivers/dma-buf/dma-resv.c”h´M6hjÎ{ubhÌ)�”}”(hŒPRetrieve all fences from the reservation object. Returns either zero or -ENOMEM.”h]”hŒPRetrieve all fences from the reservation object. Returns either zero or -ENOMEM.”…”�”}”(hjð|h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:154: ./drivers/dma-buf/dma-resv.c”h´M5hjÎ{ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jg hj¼bh²hh³Nh´NubjÉ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÕŒ#dma_resv_get_singleton (C function)”Œc.dma_resv_get_singleton”hNt”auh1jÈhj¼bh²hh³Nh´NubjÛ)�”}”(hhh]”(jà)�”}”(hŒfint dma_resv_get_singleton (struct dma_resv *obj, enum dma_resv_usage usage, struct dma_fence **fence)”h]”jæ)�”}”(hŒeint dma_resv_get_singleton(struct dma_resv *obj, enum dma_resv_usage usage, struct dma_fence **fence)”h]”(jM)�”}”(hŒint”h]”hŒint”…”�”}”(hj}h²hh³Nh´Nubah}”(h]”h ]”jYah"]”h$]”h&]”uh1jLhj}h²hh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:154: ./drivers/dma-buf/dma-resv.c”h´Meubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj.}h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj}h²hh³j-}h´Meubj )�”}”(hŒdma_resv_get_singleton”h]”j )�”}”(hŒdma_resv_get_singleton”h]”hŒdma_resv_get_singleton”…”�”}”(hj@}h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj<}ubah}”(h]”h ]”(j' j( eh"]”h$]”h&]”j÷jøuh1j hj}h²hh³j-}h´MeubjŒ)�”}”(hŒK(struct dma_resv *obj, enum dma_resv_usage usage, struct dma_fence **fence)”h]”(j’)�”}”(hŒstruct dma_resv *obj”h]”(jì)�”}”(hjïh]”hŒstruct”…”�”}”(hj\}h²hh³Nh´Nubah}”(h]”h ]”jøah"]”h$]”h&]”uh1jëhjX}ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hji}h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjX}ubh)�”}”(hhh]”j )�”}”(hŒdma_resv”h]”hŒdma_resv”…”�”}”(hjz}h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjw}ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jîŒreftype”jGŒ reftarget”j|}Œmodname”NŒ classname”Nj³j¶)�”}”j¹]”jO)�”}”jGjB}sbŒc.dma_resv_get_singleton”†”asbuh1hhjX}ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjš}h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjX}ubjd)�”}”(hjgh]”hŒ*”…”�”}”(hj¨}h²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchjX}ubj )�”}”(hŒobj”h]”hŒobj”…”�”}”(hjµ}h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjX}ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj÷jøuh1j‘hjT}ubj’)�”}”(hŒenum dma_resv_usage usage”h]”(jì)�”}”(hj×+h]”hŒenum”…”�”}”(hjÎ}h²hh³Nh´Nubah}”(h]”h ]”jøah"]”h$]”h&]”uh1jëhjÊ}ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÛ}h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjÊ}ubh)�”}”(hhh]”j )�”}”(hŒdma_resv_usage”h]”hŒdma_resv_usage”…”�”}”(hjì}h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjé}ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jîŒreftype”jGŒ reftarget”jî}Œmodname”NŒ classname”Nj³j¶)�”}”j¹]”j–}Œc.dma_resv_get_singleton”†”asbuh1hhjÊ}ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj ~h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjÊ}ubj )�”}”(hŒusage”h]”hŒusage”…”�”}”(hj~h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjÊ}ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj÷jøuh1j‘hjT}ubj’)�”}”(hŒstruct dma_fence **fence”h]”(jì)�”}”(hjïh]”hŒstruct”…”�”}”(hj1~h²hh³Nh´Nubah}”(h]”h ]”jøah"]”h$]”h&]”uh1jëhj-~ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj>~h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj-~ubh)�”}”(hhh]”j )�”}”(hŒ dma_fence”h]”hŒ dma_fence”…”�”}”(hjO~h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjL~ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jîŒreftype”jGŒ reftarget”jQ~Œmodname”NŒ classname”Nj³j¶)�”}”j¹]”j–}Œc.dma_resv_get_singleton”†”asbuh1hhj-~ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjm~h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj-~ubjd)�”}”(hjgh]”hŒ*”…”�”}”(hj{~h²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchj-~ubjd)�”}”(hjgh]”hŒ*”…”�”}”(hjˆ~h²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchj-~ubj )�”}”(hŒfence”h]”hŒfence”…”�”}”(hj•~h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj-~ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj÷jøuh1j‘hjT}ubeh}”(h]”h ]”h"]”h$]”h&]”j÷jøuh1j‹hj}h²hh³j-}h´Meubeh}”(h]”h ]”h"]”h$]”h&]”j÷jøj2 ˆuh1jåj3 j4 hj}h²hh³j-}h´Meubah}”(h]”j}ah ]”(j8 j9 eh"]”h$]”h&]”j= ˆj> )j? huh1jßh³j-}h´Mehj}h²hubjA )�”}”(hhh]”hÌ)�”}”(hŒ%Get a single fence for all the fences”h]”hŒ%Get a single fence for all the fences”…”�”}”(hj¿~h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:154: ./drivers/dma-buf/dma-resv.c”h´Mehj¼~h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j@ hj}h²hh³j-}h´Meubeh}”(h]”h ]”(jîŒfunction”eh"]”h$]”h&]”ja jîjb j×~jc j×~jd ‰je ‰jf ‰uh1jÚh²hhj¼bh³Nh´Nubjh )�”}”(hX1**Parameters** ``struct dma_resv *obj`` the reservation object ``enum dma_resv_usage usage`` controls which fences to include, see enum dma_resv_usage. ``struct dma_fence **fence`` the resulting fence **Description** Get a single fence representing all the fences inside the resv object. Returns either 0 for success or -ENOMEM. Warning: This can't be used like this when adding the fence back to the resv object since that can lead to stack corruption when finalizing the dma_fence_array. Returns 0 on success and negative error values on failure.”h]”(hÌ)�”}”(hŒ**Parameters**”h]”jr )�”}”(hjá~h]”hŒ Parameters”…”�”}”(hjã~h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hjß~ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:154: ./drivers/dma-buf/dma-resv.c”h´MihjÛ~ubj´ )�”}”(hhh]”(j¹ )�”}”(hŒ0``struct dma_resv *obj`` the reservation object ”h]”(j¿ )�”}”(hŒ``struct dma_resv *obj``”h]”jâ)�”}”(hjh]”hŒstruct dma_resv *obj”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjþ~ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:154: ./drivers/dma-buf/dma-resv.c”h´Mfhjú~ubjÙ )�”}”(hhh]”hÌ)�”}”(hŒthe reservation object”h]”hŒthe reservation object”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jh´Mfhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hjú~ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³jh´Mfhj÷~ubj¹ )�”}”(hŒY``enum dma_resv_usage usage`` controls which fences to include, see enum dma_resv_usage. ”h]”(j¿ )�”}”(hŒ``enum dma_resv_usage usage``”h]”jâ)�”}”(hj9h]”hŒenum dma_resv_usage usage”…”�”}”(hj;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj7ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:154: ./drivers/dma-buf/dma-resv.c”h´Mghj3ubjÙ )�”}”(hhh]”hÌ)�”}”(hŒ:controls which fences to include, see enum dma_resv_usage.”h]”hŒ:controls which fences to include, see enum dma_resv_usage.”…”�”}”(hjRh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jNh´MghjOubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hj3ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³jNh´Mghj÷~ubj¹ )�”}”(hŒ1``struct dma_fence **fence`` the resulting fence ”h]”(j¿ )�”}”(hŒ``struct dma_fence **fence``”h]”jâ)�”}”(hjrh]”hŒstruct dma_fence **fence”…”�”}”(hjth²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjpubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:154: ./drivers/dma-buf/dma-resv.c”h´MhhjlubjÙ )�”}”(hhh]”hÌ)�”}”(hŒthe resulting fence”h]”hŒthe resulting fence”…”�”}”(hj‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j‡h´Mhhjˆubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hjlubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³j‡h´Mhhj÷~ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j³ hjÛ~ubhÌ)�”}”(hŒ**Description**”h]”jr )�”}”(hj­h]”hŒ Description”…”�”}”(hj¯h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hj«ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:154: ./drivers/dma-buf/dma-resv.c”h´MjhjÛ~ubhÌ)�”}”(hŒoGet a single fence representing all the fences inside the resv object. Returns either 0 for success or -ENOMEM.”h]”hŒoGet a single fence representing all the fences inside the resv object. Returns either 0 for success or -ENOMEM.”…”�”}”(hjÃh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:154: ./drivers/dma-buf/dma-resv.c”h´MihjÛ~ubhÌ)�”}”(hŒ Warning: This can't be used like this when adding the fence back to the resv object since that can lead to stack corruption when finalizing the dma_fence_array.”h]”hŒ¢Warning: This can’t be used like this when adding the fence back to the resv object since that can lead to stack corruption when finalizing the dma_fence_array.”…”�”}”(hjÒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:154: ./drivers/dma-buf/dma-resv.c”h´MlhjÛ~ubhÌ)�”}”(hŒ:Returns 0 on success and negative error values on failure.”h]”hŒ:Returns 0 on success and negative error values on failure.”…”�”}”(hjáh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:154: ./drivers/dma-buf/dma-resv.c”h´MphjÛ~ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jg hj¼bh²hh³Nh´NubjÉ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÕŒ"dma_resv_wait_timeout (C function)”Œc.dma_resv_wait_timeout”hNt”auh1jÈhj¼bh²hh³Nh´NubjÛ)�”}”(hhh]”(jà)�”}”(hŒnlong dma_resv_wait_timeout (struct dma_resv *obj, enum dma_resv_usage usage, bool intr, unsigned long timeout)”h]”jæ)�”}”(hŒmlong dma_resv_wait_timeout(struct dma_resv *obj, enum dma_resv_usage usage, bool intr, unsigned long timeout)”h]”(jM)�”}”(hŒlong”h]”hŒlong”…”�”}”(hj€h²hh³Nh´Nubah}”(h]”h ]”jYah"]”h$]”h&]”uh1jLhj €h²hh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:154: ./drivers/dma-buf/dma-resv.c”h´M™ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj€h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj €h²hh³j€h´M™ubj )�”}”(hŒdma_resv_wait_timeout”h]”j )�”}”(hŒdma_resv_wait_timeout”h]”hŒdma_resv_wait_timeout”…”�”}”(hj1€h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj-€ubah}”(h]”h ]”(j' j( eh"]”h$]”h&]”j÷jøuh1j hj €h²hh³j€h´M™ubjŒ)�”}”(hŒS(struct dma_resv *obj, enum dma_resv_usage usage, bool intr, unsigned long timeout)”h]”(j’)�”}”(hŒstruct dma_resv *obj”h]”(jì)�”}”(hjïh]”hŒstruct”…”�”}”(hjM€h²hh³Nh´Nubah}”(h]”h ]”jøah"]”h$]”h&]”uh1jëhjI€ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjZ€h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjI€ubh)�”}”(hhh]”j )�”}”(hŒdma_resv”h]”hŒdma_resv”…”�”}”(hjk€h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjh€ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jîŒreftype”jGŒ reftarget”jm€Œmodname”NŒ classname”Nj³j¶)�”}”j¹]”jO)�”}”jGj3€sbŒc.dma_resv_wait_timeout”†”asbuh1hhjI€ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‹€h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjI€ubjd)�”}”(hjgh]”hŒ*”…”�”}”(hj™€h²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchjI€ubj )�”}”(hŒobj”h]”hŒobj”…”�”}”(hj¦€h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjI€ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj÷jøuh1j‘hjE€ubj’)�”}”(hŒenum dma_resv_usage usage”h]”(jì)�”}”(hj×+h]”hŒenum”…”�”}”(hj¿€h²hh³Nh´Nubah}”(h]”h ]”jøah"]”h$]”h&]”uh1jëhj»€ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÌ€h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj»€ubh)�”}”(hhh]”j )�”}”(hŒdma_resv_usage”h]”hŒdma_resv_usage”…”�”}”(hjÝ€h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjÚ€ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jîŒreftype”jGŒ reftarget”j߀Œmodname”NŒ classname”Nj³j¶)�”}”j¹]”j‡€Œc.dma_resv_wait_timeout”†”asbuh1hhj»€ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjû€h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj»€ubj )�”}”(hŒusage”h]”hŒusage”…”�”}”(hj �h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj»€ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj÷jøuh1j‘hjE€ubj’)�”}”(hŒ bool intr”h]”(jM)�”}”(hji5h]”hŒbool”…”�”}”(hj"�h²hh³Nh´Nubah}”(h]”h ]”jYah"]”h$]”h&]”uh1jLhj�ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj/�h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj�ubj )�”}”(hŒintr”h]”hŒintr”…”�”}”(hj=�h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj�ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj÷jøuh1j‘hjE€ubj’)�”}”(hŒunsigned long timeout”h]”(jM)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjV�h²hh³Nh´Nubah}”(h]”h ]”jYah"]”h$]”h&]”uh1jLhjR�ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjd�h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjR�ubjM)�”}”(hŒlong”h]”hŒlong”…”�”}”(hjr�h²hh³Nh´Nubah}”(h]”h ]”jYah"]”h$]”h&]”uh1jLhjR�ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj€�h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjR�ubj )�”}”(hŒtimeout”h]”hŒtimeout”…”�”}”(hjŽ�h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjR�ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj÷jøuh1j‘hjE€ubeh}”(h]”h ]”h"]”h$]”h&]”j÷jøuh1j‹hj €h²hh³j€h´M™ubeh}”(h]”h ]”h"]”h$]”h&]”j÷jøj2 ˆuh1jåj3 j4 hj€h²hh³j€h´M™ubah}”(h]”j€ah ]”(j8 j9 eh"]”h$]”h&]”j= ˆj> )j? huh1jßh³j€h´M™hj€h²hubjA )�”}”(hhh]”hÌ)�”}”(hŒ$Wait on reservation's objects fences”h]”hŒ&Wait on reservation’s objects fences”…”�”}”(hj¸�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:154: ./drivers/dma-buf/dma-resv.c”h´M™hjµ�h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j@ hj€h²hh³j€h´M™ubeh}”(h]”h ]”(jîŒfunction”eh"]”h$]”h&]”ja jîjb jÐ�jc jÐ�jd ‰je ‰jf ‰uh1jÚh²hhj¼bh³Nh´Nubjh )�”}”(hXò**Parameters** ``struct dma_resv *obj`` the reservation object ``enum dma_resv_usage usage`` controls which fences to include, see enum dma_resv_usage. ``bool intr`` if true, do interruptible wait ``unsigned long timeout`` timeout value in jiffies or zero to return immediately **Description** Callers are not required to hold specific locks, but maybe hold dma_resv_lock() already RETURNS Returns -ERESTARTSYS if interrupted, 0 if the wait timed out, or greater than zero on success.”h]”(hÌ)�”}”(hŒ**Parameters**”h]”jr )�”}”(hjÚ�h]”hŒ Parameters”…”�”}”(hjÜ�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hjØ�ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:154: ./drivers/dma-buf/dma-resv.c”h´M�hjÔ�ubj´ )�”}”(hhh]”(j¹ )�”}”(hŒ0``struct dma_resv *obj`` the reservation object ”h]”(j¿ )�”}”(hŒ``struct dma_resv *obj``”h]”jâ)�”}”(hjù�h]”hŒstruct dma_resv *obj”…”�”}”(hjû�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj÷�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:154: ./drivers/dma-buf/dma-resv.c”h´Mšhjó�ubjÙ )�”}”(hhh]”hÌ)�”}”(hŒthe reservation object”h]”hŒthe reservation object”…”�”}”(hj‚h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j‚h´Mšhj‚ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hjó�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³j‚h´Mšhjð�ubj¹ )�”}”(hŒY``enum dma_resv_usage usage`` controls which fences to include, see enum dma_resv_usage. ”h]”(j¿ )�”}”(hŒ``enum dma_resv_usage usage``”h]”jâ)�”}”(hj2‚h]”hŒenum dma_resv_usage usage”…”�”}”(hj4‚h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj0‚ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:154: ./drivers/dma-buf/dma-resv.c”h´M›hj,‚ubjÙ )�”}”(hhh]”hÌ)�”}”(hŒ:controls which fences to include, see enum dma_resv_usage.”h]”hŒ:controls which fences to include, see enum dma_resv_usage.”…”�”}”(hjK‚h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jG‚h´M›hjH‚ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hj,‚ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³jG‚h´M›hjð�ubj¹ )�”}”(hŒ-``bool intr`` if true, do interruptible wait ”h]”(j¿ )�”}”(hŒ ``bool intr``”h]”jâ)�”}”(hjk‚h]”hŒ bool intr”…”�”}”(hjm‚h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhji‚ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:154: ./drivers/dma-buf/dma-resv.c”h´Mœhje‚ubjÙ )�”}”(hhh]”hÌ)�”}”(hŒif true, do interruptible wait”h]”hŒif true, do interruptible wait”…”�”}”(hj„‚h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j€‚h´Mœhj�‚ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hje‚ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³j€‚h´Mœhjð�ubj¹ )�”}”(hŒQ``unsigned long timeout`` timeout value in jiffies or zero to return immediately ”h]”(j¿ )�”}”(hŒ``unsigned long timeout``”h]”jâ)�”}”(hj¤‚h]”hŒunsigned long timeout”…”�”}”(hj¦‚h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj¢‚ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:154: ./drivers/dma-buf/dma-resv.c”h´M�hjž‚ubjÙ )�”}”(hhh]”hÌ)�”}”(hŒ6timeout value in jiffies or zero to return immediately”h]”hŒ6timeout value in jiffies or zero to return immediately”…”�”}”(hj½‚h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j¹‚h´M�hjº‚ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hjž‚ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³j¹‚h´M�hjð�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j³ hjÔ�ubhÌ)�”}”(hŒ**Description**”h]”jr )�”}”(hjß‚h]”hŒ Description”…”�”}”(hjá‚h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hjÝ‚ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:154: ./drivers/dma-buf/dma-resv.c”h´MŸhjÔ�ubhÌ)�”}”(hŒ¾Callers are not required to hold specific locks, but maybe hold dma_resv_lock() already RETURNS Returns -ERESTARTSYS if interrupted, 0 if the wait timed out, or greater than zero on success.”h]”hŒ¾Callers are not required to hold specific locks, but maybe hold dma_resv_lock() already RETURNS Returns -ERESTARTSYS if interrupted, 0 if the wait timed out, or greater than zero on success.”…”�”}”(hjõ‚h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:154: ./drivers/dma-buf/dma-resv.c”h´MžhjÔ�ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jg hj¼bh²hh³Nh´NubjÉ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÕŒ"dma_resv_set_deadline (C function)”Œc.dma_resv_set_deadline”hNt”auh1jÈhj¼bh²hh³Nh´NubjÛ)�”}”(hhh]”(jà)�”}”(hŒ^void dma_resv_set_deadline (struct dma_resv *obj, enum dma_resv_usage usage, ktime_t deadline)”h]”jæ)�”}”(hŒ]void dma_resv_set_deadline(struct dma_resv *obj, enum dma_resv_usage usage, ktime_t deadline)”h]”(jM)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj$ƒh²hh³Nh´Nubah}”(h]”h ]”jYah"]”h$]”h&]”uh1jLhj ƒh²hh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:154: ./drivers/dma-buf/dma-resv.c”h´M¾ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj3ƒh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj ƒh²hh³j2ƒh´M¾ubj )�”}”(hŒdma_resv_set_deadline”h]”j )�”}”(hŒdma_resv_set_deadline”h]”hŒdma_resv_set_deadline”…”�”}”(hjEƒh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjAƒubah}”(h]”h ]”(j' j( eh"]”h$]”h&]”j÷jøuh1j hj ƒh²hh³j2ƒh´M¾ubjŒ)�”}”(hŒC(struct dma_resv *obj, enum dma_resv_usage usage, ktime_t deadline)”h]”(j’)�”}”(hŒstruct dma_resv *obj”h]”(jì)�”}”(hjïh]”hŒstruct”…”�”}”(hjaƒh²hh³Nh´Nubah}”(h]”h ]”jøah"]”h$]”h&]”uh1jëhj]ƒubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjnƒh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj]ƒubh)�”}”(hhh]”j )�”}”(hŒdma_resv”h]”hŒdma_resv”…”�”}”(hjƒh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj|ƒubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jîŒreftype”jGŒ reftarget”j�ƒŒmodname”NŒ classname”Nj³j¶)�”}”j¹]”jO)�”}”jGjGƒsbŒc.dma_resv_set_deadline”†”asbuh1hhj]ƒubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŸƒh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj]ƒubjd)�”}”(hjgh]”hŒ*”…”�”}”(hj­ƒh²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchj]ƒubj )�”}”(hŒobj”h]”hŒobj”…”�”}”(hjºƒh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj]ƒubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj÷jøuh1j‘hjYƒubj’)�”}”(hŒenum dma_resv_usage usage”h]”(jì)�”}”(hj×+h]”hŒenum”…”�”}”(hjÓƒh²hh³Nh´Nubah}”(h]”h ]”jøah"]”h$]”h&]”uh1jëhjσubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjàƒh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjσubh)�”}”(hhh]”j )�”}”(hŒdma_resv_usage”h]”hŒdma_resv_usage”…”�”}”(hjñƒh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjîƒubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jîŒreftype”jGŒ reftarget”jóƒŒmodname”NŒ classname”Nj³j¶)�”}”j¹]”j›ƒŒc.dma_resv_set_deadline”†”asbuh1hhjσubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj„h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjσubj )�”}”(hŒusage”h]”hŒusage”…”�”}”(hj„h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjσubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj÷jøuh1j‘hjYƒubj’)�”}”(hŒktime_t deadline”h]”(h)�”}”(hhh]”j )�”}”(hŒktime_t”h]”hŒktime_t”…”�”}”(hj9„h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj6„ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jîŒreftype”jGŒ reftarget”j;„Œmodname”NŒ classname”Nj³j¶)�”}”j¹]”j›ƒŒc.dma_resv_set_deadline”†”asbuh1hhj2„ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjW„h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj2„ubj )�”}”(hŒdeadline”h]”hŒdeadline”…”�”}”(hje„h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj2„ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj÷jøuh1j‘hjYƒubeh}”(h]”h ]”h"]”h$]”h&]”j÷jøuh1j‹hj ƒh²hh³j2ƒh´M¾ubeh}”(h]”h ]”h"]”h$]”h&]”j÷jøj2 ˆuh1jåj3 j4 hjƒh²hh³j2ƒh´M¾ubah}”(h]”jƒah ]”(j8 j9 eh"]”h$]”h&]”j= ˆj> )j? huh1jßh³j2ƒh´M¾hjƒh²hubjA )�”}”(hhh]”hÌ)�”}”(hŒ.Set a deadline on reservation's objects fences”h]”hŒ0Set a deadline on reservation’s objects fences”…”�”}”(hj�„h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:154: ./drivers/dma-buf/dma-resv.c”h´M¾hjŒ„h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j@ hjƒh²hh³j2ƒh´M¾ubeh}”(h]”h ]”(jîŒfunction”eh"]”h$]”h&]”ja jîjb j§„jc j§„jd ‰je ‰jf ‰uh1jÚh²hhj¼bh³Nh´Nubjh )�”}”(hXS**Parameters** ``struct dma_resv *obj`` the reservation object ``enum dma_resv_usage usage`` controls which fences to include, see enum dma_resv_usage. ``ktime_t deadline`` the requested deadline (MONOTONIC) **Description** May be called without holding the dma_resv lock. Sets **deadline** on all fences filtered by **usage**.”h]”(hÌ)�”}”(hŒ**Parameters**”h]”jr )�”}”(hj±„h]”hŒ Parameters”…”�”}”(hj³„h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hj¯„ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:154: ./drivers/dma-buf/dma-resv.c”h´MÂhj«„ubj´ )�”}”(hhh]”(j¹ )�”}”(hŒ0``struct dma_resv *obj`` the reservation object ”h]”(j¿ )�”}”(hŒ``struct dma_resv *obj``”h]”jâ)�”}”(hjЄh]”hŒstruct dma_resv *obj”…”�”}”(hjÒ„h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj΄ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:154: ./drivers/dma-buf/dma-resv.c”h´M¿hjÊ„ubjÙ )�”}”(hhh]”hÌ)�”}”(hŒthe reservation object”h]”hŒthe reservation object”…”�”}”(hjé„h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jå„h´M¿hjæ„ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hjÊ„ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³jå„h´M¿hjÇ„ubj¹ )�”}”(hŒY``enum dma_resv_usage usage`` controls which fences to include, see enum dma_resv_usage. ”h]”(j¿ )�”}”(hŒ``enum dma_resv_usage usage``”h]”jâ)�”}”(hj …h]”hŒenum dma_resv_usage usage”…”�”}”(hj …h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj…ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:154: ./drivers/dma-buf/dma-resv.c”h´MÀhj…ubjÙ )�”}”(hhh]”hÌ)�”}”(hŒ:controls which fences to include, see enum dma_resv_usage.”h]”hŒ:controls which fences to include, see enum dma_resv_usage.”…”�”}”(hj"…h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j…h´MÀhj…ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hj…ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³j…h´MÀhjÇ„ubj¹ )�”}”(hŒ8``ktime_t deadline`` the requested deadline (MONOTONIC) ”h]”(j¿ )�”}”(hŒ``ktime_t deadline``”h]”jâ)�”}”(hjB…h]”hŒktime_t deadline”…”�”}”(hjD…h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj@…ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:154: ./drivers/dma-buf/dma-resv.c”h´MÁhj<…ubjÙ )�”}”(hhh]”hÌ)�”}”(hŒ"the requested deadline (MONOTONIC)”h]”hŒ"the requested deadline (MONOTONIC)”…”�”}”(hj[…h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jW…h´MÁhjX…ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hj<…ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³jW…h´MÁhjÇ„ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j³ hj«„ubhÌ)�”}”(hŒ**Description**”h]”jr )�”}”(hj}…h]”hŒ Description”…”�”}”(hj…h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hj{…ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:154: ./drivers/dma-buf/dma-resv.c”h´MÃhj«„ubhÌ)�”}”(hŒhMay be called without holding the dma_resv lock. Sets **deadline** on all fences filtered by **usage**.”h]”(hŒ7May be called without holding the dma_resv lock. Sets ”…”�”}”(hj“…h²hh³Nh´Nubjr )�”}”(hŒ **deadline**”h]”hŒdeadline”…”�”}”(hj›…h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hj“…ubhŒ on all fences filtered by ”…”�”}”(hj“…h²hh³Nh´Nubjr )�”}”(hŒ **usage**”h]”hŒusage”…”�”}”(hj­…h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hj“…ubhŒ.”…”�”}”(hj“…h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:154: ./drivers/dma-buf/dma-resv.c”h´MÂhj«„ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jg hj¼bh²hh³Nh´NubjÉ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÕŒ#dma_resv_test_signaled (C function)”Œc.dma_resv_test_signaled”hNt”auh1jÈhj¼bh²hh³Nh´NubjÛ)�”}”(hhh]”(jà)�”}”(hŒMbool dma_resv_test_signaled (struct dma_resv *obj, enum dma_resv_usage usage)”h]”jæ)�”}”(hŒLbool dma_resv_test_signaled(struct dma_resv *obj, enum dma_resv_usage usage)”h]”(jM)�”}”(hji5h]”hŒbool”…”�”}”(hjæ…h²hh³Nh´Nubah}”(h]”h ]”jYah"]”h$]”h&]”uh1jLhjâ…h²hh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:154: ./drivers/dma-buf/dma-resv.c”h´MÕubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjô…h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjâ…h²hh³jó…h´MÕubj )�”}”(hŒdma_resv_test_signaled”h]”j )�”}”(hŒdma_resv_test_signaled”h]”hŒdma_resv_test_signaled”…”�”}”(hj†h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj†ubah}”(h]”h ]”(j' j( eh"]”h$]”h&]”j÷jøuh1j hjâ…h²hh³jó…h´MÕubjŒ)�”}”(hŒ1(struct dma_resv *obj, enum dma_resv_usage usage)”h]”(j’)�”}”(hŒstruct dma_resv *obj”h]”(jì)�”}”(hjïh]”hŒstruct”…”�”}”(hj"†h²hh³Nh´Nubah}”(h]”h ]”jøah"]”h$]”h&]”uh1jëhj†ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj/†h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj†ubh)�”}”(hhh]”j )�”}”(hŒdma_resv”h]”hŒdma_resv”…”�”}”(hj@†h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj=†ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jîŒreftype”jGŒ reftarget”jB†Œmodname”NŒ classname”Nj³j¶)�”}”j¹]”jO)�”}”jGj†sbŒc.dma_resv_test_signaled”†”asbuh1hhj†ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj`†h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj†ubjd)�”}”(hjgh]”hŒ*”…”�”}”(hjn†h²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchj†ubj )�”}”(hŒobj”h]”hŒobj”…”�”}”(hj{†h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj†ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj÷jøuh1j‘hj†ubj’)�”}”(hŒenum dma_resv_usage usage”h]”(jì)�”}”(hj×+h]”hŒenum”…”�”}”(hj”†h²hh³Nh´Nubah}”(h]”h ]”jøah"]”h$]”h&]”uh1jëhj�†ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¡†h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj�†ubh)�”}”(hhh]”j )�”}”(hŒdma_resv_usage”h]”hŒdma_resv_usage”…”�”}”(hj²†h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj¯†ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jîŒreftype”jGŒ reftarget”j´†Œmodname”NŒ classname”Nj³j¶)�”}”j¹]”j\†Œc.dma_resv_test_signaled”†”asbuh1hhj�†ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjІh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj�†ubj )�”}”(hŒusage”h]”hŒusage”…”�”}”(hjÞ†h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj�†ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj÷jøuh1j‘hj†ubeh}”(h]”h ]”h"]”h$]”h&]”j÷jøuh1j‹hjâ…h²hh³jó…h´MÕubeh}”(h]”h ]”h"]”h$]”h&]”j÷jøj2 ˆuh1jåj3 j4 hjÞ…h²hh³jó…h´MÕubah}”(h]”jÙ…ah ]”(j8 j9 eh"]”h$]”h&]”j= ˆj> )j? huh1jßh³jó…h´MÕhjÛ…h²hubjA )�”}”(hhh]”hÌ)�”}”(hŒ9Test if a reservation object's fences have been signaled.”h]”hŒ;Test if a reservation object’s fences have been signaled.”…”�”}”(hj‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:154: ./drivers/dma-buf/dma-resv.c”h´MÕhj‡h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j@ hjÛ…h²hh³jó…h´MÕubeh}”(h]”h ]”(jîŒfunction”eh"]”h$]”h&]”ja jîjb j ‡jc j ‡jd ‰je ‰jf ‰uh1jÚh²hhj¼bh³Nh´Nubjh )�”}”(hX;**Parameters** ``struct dma_resv *obj`` the reservation object ``enum dma_resv_usage usage`` controls which fences to include, see enum dma_resv_usage. **Description** Callers are not required to hold specific locks, but maybe hold dma_resv_lock() already. RETURNS True if all fences signaled, else false.”h]”(hÌ)�”}”(hŒ**Parameters**”h]”jr )�”}”(hj*‡h]”hŒ Parameters”…”�”}”(hj,‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hj(‡ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:154: ./drivers/dma-buf/dma-resv.c”h´MÙhj$‡ubj´ )�”}”(hhh]”(j¹ )�”}”(hŒ0``struct dma_resv *obj`` the reservation object ”h]”(j¿ )�”}”(hŒ``struct dma_resv *obj``”h]”jâ)�”}”(hjI‡h]”hŒstruct dma_resv *obj”…”�”}”(hjK‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjG‡ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:154: ./drivers/dma-buf/dma-resv.c”h´M×hjC‡ubjÙ )�”}”(hhh]”hÌ)�”}”(hŒthe reservation object”h]”hŒthe reservation object”…”�”}”(hjb‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j^‡h´M×hj_‡ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hjC‡ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³j^‡h´M×hj@‡ubj¹ )�”}”(hŒY``enum dma_resv_usage usage`` controls which fences to include, see enum dma_resv_usage. ”h]”(j¿ )�”}”(hŒ``enum dma_resv_usage usage``”h]”jâ)�”}”(hj‚‡h]”hŒenum dma_resv_usage usage”…”�”}”(hj„‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj€‡ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:154: ./drivers/dma-buf/dma-resv.c”h´MØhj|‡ubjÙ )�”}”(hhh]”hÌ)�”}”(hŒ:controls which fences to include, see enum dma_resv_usage.”h]”hŒ:controls which fences to include, see enum dma_resv_usage.”…”�”}”(hj›‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j—‡h´MØhj˜‡ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hj|‡ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³j—‡h´MØhj@‡ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j³ hj$‡ubhÌ)�”}”(hŒ**Description**”h]”jr )�”}”(hj½‡h]”hŒ Description”…”�”}”(hj¿‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hj»‡ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:154: ./drivers/dma-buf/dma-resv.c”h´MÚhj$‡ubhÌ)�”}”(hŒXCallers are not required to hold specific locks, but maybe hold dma_resv_lock() already.”h]”hŒXCallers are not required to hold specific locks, but maybe hold dma_resv_lock() already.”…”�”}”(hjÓ‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:154: ./drivers/dma-buf/dma-resv.c”h´MÙhj$‡ubhÌ)�”}”(hŒRETURNS”h]”hŒRETURNS”…”�”}”(hjâ‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:154: ./drivers/dma-buf/dma-resv.c”h´MÜhj$‡ubhÌ)�”}”(hŒ(True if all fences signaled, else false.”h]”hŒ(True if all fences signaled, else false.”…”�”}”(hjñ‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:154: ./drivers/dma-buf/dma-resv.c”h´MÞhj$‡ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jg hj¼bh²hh³Nh´NubjÉ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÕŒdma_resv_describe (C function)”Œc.dma_resv_describe”hNt”auh1jÈhj¼bh²hh³Nh´NubjÛ)�”}”(hhh]”(jà)�”}”(hŒCvoid dma_resv_describe (struct dma_resv *obj, struct seq_file *seq)”h]”jæ)�”}”(hŒBvoid dma_resv_describe(struct dma_resv *obj, struct seq_file *seq)”h]”(jM)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj ˆh²hh³Nh´Nubah}”(h]”h ]”jYah"]”h$]”h&]”uh1jLhjˆh²hh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:154: ./drivers/dma-buf/dma-resv.c”h´Mñubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj/ˆh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjˆh²hh³j.ˆh´Mñubj )�”}”(hŒdma_resv_describe”h]”j )�”}”(hŒdma_resv_describe”h]”hŒdma_resv_describe”…”�”}”(hjAˆh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj=ˆubah}”(h]”h ]”(j' j( eh"]”h$]”h&]”j÷jøuh1j hjˆh²hh³j.ˆh´MñubjŒ)�”}”(hŒ,(struct dma_resv *obj, struct seq_file *seq)”h]”(j’)�”}”(hŒstruct dma_resv *obj”h]”(jì)�”}”(hjïh]”hŒstruct”…”�”}”(hj]ˆh²hh³Nh´Nubah}”(h]”h ]”jøah"]”h$]”h&]”uh1jëhjYˆubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjjˆh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjYˆubh)�”}”(hhh]”j )�”}”(hŒdma_resv”h]”hŒdma_resv”…”�”}”(hj{ˆh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjxˆubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jîŒreftype”jGŒ reftarget”j}ˆŒmodname”NŒ classname”Nj³j¶)�”}”j¹]”jO)�”}”jGjCˆsbŒc.dma_resv_describe”†”asbuh1hhjYˆubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj›ˆh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjYˆubjd)�”}”(hjgh]”hŒ*”…”�”}”(hj©ˆh²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchjYˆubj )�”}”(hŒobj”h]”hŒobj”…”�”}”(hj¶ˆh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjYˆubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj÷jøuh1j‘hjUˆubj’)�”}”(hŒstruct seq_file *seq”h]”(jì)�”}”(hjïh]”hŒstruct”…”�”}”(hjψh²hh³Nh´Nubah}”(h]”h ]”jøah"]”h$]”h&]”uh1jëhjˈubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj܈h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjˈubh)�”}”(hhh]”j )�”}”(hŒseq_file”h]”hŒseq_file”…”�”}”(hjíˆh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjêˆubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jîŒreftype”jGŒ reftarget”jmodname”NŒ classname”Nj³j¶)�”}”j¹]”j—ˆŒc.dma_resv_describe”†”asbuh1hhjˈubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj ‰h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjˈubjd)�”}”(hjgh]”hŒ*”…”�”}”(hj‰h²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchjˈubj )�”}”(hŒseq”h]”hŒseq”…”�”}”(hj&‰h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjˈubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj÷jøuh1j‘hjUˆubeh}”(h]”h ]”h"]”h$]”h&]”j÷jøuh1j‹hjˆh²hh³j.ˆh´Mñubeh}”(h]”h ]”h"]”h$]”h&]”j÷jøj2 ˆuh1jåj3 j4 hjˆh²hh³j.ˆh´Mñubah}”(h]”jˆah ]”(j8 j9 eh"]”h$]”h&]”j= ˆj> )j? huh1jßh³j.ˆh´Mñhjˆh²hubjA )�”}”(hhh]”hÌ)�”}”(hŒ1Dump description of the resv object into seq_file”h]”hŒ1Dump description of the resv object into seq_file”…”�”}”(hjP‰h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:154: ./drivers/dma-buf/dma-resv.c”h´MñhjM‰h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j@ hjˆh²hh³j.ˆh´Mñubeh}”(h]”h ]”(jîŒfunction”eh"]”h$]”h&]”ja jîjb jh‰jc jh‰jd ‰je ‰jf ‰uh1jÚh²hhj¼bh³Nh´Nubjh )�”}”(hŒï**Parameters** ``struct dma_resv *obj`` the reservation object ``struct seq_file *seq`` the seq_file to dump the description into **Description** Dump a textual description of the fences inside an dma_resv object into the seq_file.”•h]”(hÌ)�”}”(hŒ**Parameters**”h]”jr )�”}”(hjr‰h]”hŒ Parameters”…”�”}”(hjt‰h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hjp‰ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:154: ./drivers/dma-buf/dma-resv.c”h´Mõhjl‰ubj´ )�”}”(hhh]”(j¹ )�”}”(hŒ0``struct dma_resv *obj`` the reservation object ”h]”(j¿ )�”}”(hŒ``struct dma_resv *obj``”h]”jâ)�”}”(hj‘‰h]”hŒstruct dma_resv *obj”…”�”}”(hj“‰h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj�‰ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:154: ./drivers/dma-buf/dma-resv.c”h´Mòhj‹‰ubjÙ )�”}”(hhh]”hÌ)�”}”(hŒthe reservation object”h]”hŒthe reservation object”…”�”}”(hjª‰h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j¦‰h´Mòhj§‰ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hj‹‰ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³j¦‰h´Mòhjˆ‰ubj¹ )�”}”(hŒC``struct seq_file *seq`` the seq_file to dump the description into ”h]”(j¿ )�”}”(hŒ``struct seq_file *seq``”h]”jâ)�”}”(hjʉh]”hŒstruct seq_file *seq”…”�”}”(hj̉h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjȉubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:154: ./drivers/dma-buf/dma-resv.c”h´MóhjĉubjÙ )�”}”(hhh]”hÌ)�”}”(hŒ)the seq_file to dump the description into”h]”hŒ)the seq_file to dump the description into”…”�”}”(hjã‰h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j߉h´Móhjà‰ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hjĉubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³j߉h´Móhjˆ‰ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j³ hjl‰ubhÌ)�”}”(hŒ**Description**”h]”jr )�”}”(hjŠh]”hŒ Description”…”�”}”(hjŠh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hjŠubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:154: ./drivers/dma-buf/dma-resv.c”h´Mõhjl‰ubhÌ)�”}”(hŒUDump a textual description of the fences inside an dma_resv object into the seq_file.”h]”hŒUDump a textual description of the fences inside an dma_resv object into the seq_file.”…”�”}”(hjŠh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:154: ./drivers/dma-buf/dma-resv.c”h´Môhjl‰ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jg hj¼bh²hh³Nh´NubjÉ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÕŒdma_resv_usage (C enum)”Œc.dma_resv_usage”hNt”auh1jÈhj¼bh²hh³Nh´NubjÛ)�”}”(hhh]”(jà)�”}”(hŒdma_resv_usage”h]”jæ)�”}”(hŒenum dma_resv_usage”h]”(jì)�”}”(hj×+h]”hŒenum”…”�”}”(hjJŠh²hh³Nh´Nubah}”(h]”h ]”jøah"]”h$]”h&]”uh1jëhjFŠh²hh³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:157: ./include/linux/dma-resv.h”h´Kubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjXŠh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjFŠh²hh³jWŠh´Kubj )�”}”(hŒdma_resv_usage”h]”j )�”}”(hjDŠh]”hŒdma_resv_usage”…”�”}”(hjjŠh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjfŠubah}”(h]”h ]”(j' j( eh"]”h$]”h&]”j÷jøuh1j hjFŠh²hh³jWŠh´Kubeh}”(h]”h ]”h"]”h$]”h&]”j÷jøj2 ˆuh1jåj3 j4 hjBŠh²hh³jWŠh´Kubah}”(h]”j=Šah ]”(j8 j9 eh"]”h$]”h&]”j= ˆj> )j? huh1jßh³jWŠh´Khj?Šh²hubjA )�”}”(hhh]”hÌ)�”}”(hŒ+how the fences from a dma_resv obj are used”h]”hŒ+how the fences from a dma_resv obj are used”…”�”}”(hjŒŠh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:157: ./include/linux/dma-resv.h”h´K5hj‰Šh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j@ hj?Šh²hh³jWŠh´Kubeh}”(h]”h ]”(jîŒenum”eh"]”h$]”h&]”ja jîjb j¤Šjc j¤Šjd ‰je ‰jf ‰uh1jÚh²hhj¼bh³Nh´Nubjh )�”}”(hX**Constants** ``DMA_RESV_USAGE_KERNEL`` For in kernel memory management only. This should only be used for things like copying or clearing memory with a DMA hardware engine for the purpose of kernel memory management. Drivers *always* must wait for those fences before accessing the resource protected by the dma_resv object. The only exception for that is when the resource is known to be locked down in place by pinning it previously. ``DMA_RESV_USAGE_WRITE`` Implicit write synchronization. This should only be used for userspace command submissions which add an implicit write dependency. ``DMA_RESV_USAGE_READ`` Implicit read synchronization. This should only be used for userspace command submissions which add an implicit read dependency. ``DMA_RESV_USAGE_BOOKKEEP`` No implicit sync. This should be used by submissions which don't want to participate in any implicit synchronization. The most common cases are preemption fences, page table updates, TLB flushes as well as explicitly synced user submissions. Explicitly synced user submissions can be promoted to DMA_RESV_USAGE_READ or DMA_RESV_USAGE_WRITE as needed using dma_buf_import_sync_file() when implicit synchronization should become necessary after initial adding of the fence.”h]”(hÌ)�”}”(hŒ **Constants**”h]”jr )�”}”(hj®Šh]”hŒ Constants”…”�”}”(hj°Šh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hj¬Šubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:157: ./include/linux/dma-resv.h”h´K9hj¨Šubj´ )�”}”(hhh]”(j¹ )�”}”(hX©``DMA_RESV_USAGE_KERNEL`` For in kernel memory management only. This should only be used for things like copying or clearing memory with a DMA hardware engine for the purpose of kernel memory management. Drivers *always* must wait for those fences before accessing the resource protected by the dma_resv object. The only exception for that is when the resource is known to be locked down in place by pinning it previously. ”h]”(j¿ )�”}”(hŒ``DMA_RESV_USAGE_KERNEL``”h]”jâ)�”}”(hjÍŠh]”hŒDMA_RESV_USAGE_KERNEL”…”�”}”(hjÏŠh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjËŠubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:157: ./include/linux/dma-resv.h”h´KEhjÇŠubjÙ )�”}”(hhh]”(hÌ)�”}”(hŒ%For in kernel memory management only.”h]”hŒ%For in kernel memory management only.”…”�”}”(hjæŠh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:157: ./include/linux/dma-resv.h”h´KhjãŠubhÌ)�”}”(hŒÚDrivers *always* must wait for those fences before accessing the resource protected by the dma_resv object. The only exception for that is when the resource is known to be locked down in place by pinning it previously.”h]”(hŒDrivers ”…”�”}”(hj‹h²hh³Nh´NubhŒemphasis”“”)�”}”(hŒ*always*”h]”hŒalways”…”�”}”(hj‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j ‹hj‹ubhŒÊ must wait for those fences before accessing the resource protected by the dma_resv object. The only exception for that is when the resource is known to be locked down in place by pinning it previously.”…”�”}”(hj‹h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:157: ./include/linux/dma-resv.h”h´KBhjãŠubeh}”(h]”h ]”h"]”h$]”h&]”uh1jØ hjÇŠubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³jâŠh´KEhjÄŠubj¹ )�”}”(hŒ�``DMA_RESV_USAGE_WRITE`` Implicit write synchronization. This should only be used for userspace command submissions which add an implicit write dependency. ”h]”(j¿ )�”}”(hŒ``DMA_RESV_USAGE_WRITE``”h]”jâ)�”}”(hj9‹h]”hŒDMA_RESV_USAGE_WRITE”…”�”}”(hj;‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj7‹ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:157: ./include/linux/dma-resv.h”h´KKhj3‹ubjÙ )�”}”(hhh]”(hÌ)�”}”(hŒImplicit write synchronization.”h]”hŒImplicit write synchronization.”…”�”}”(hjR‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:157: ./include/linux/dma-resv.h”h´KHhjO‹ubhÌ)�”}”(hŒbThis should only be used for userspace command submissions which add an implicit write dependency.”h]”hŒbThis should only be used for userspace command submissions which add an implicit write dependency.”…”�”}”(hja‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:157: ./include/linux/dma-resv.h”h´KJhjO‹ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jØ hj3‹ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³jN‹h´KKhjÄŠubj¹ )�”}”(hŒš``DMA_RESV_USAGE_READ`` Implicit read synchronization. This should only be used for userspace command submissions which add an implicit read dependency. ”h]”(j¿ )�”}”(hŒ``DMA_RESV_USAGE_READ``”h]”jâ)�”}”(hj‚‹h]”hŒDMA_RESV_USAGE_READ”…”�”}”(hj„‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj€‹ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:157: ./include/linux/dma-resv.h”h´KQhj|‹ubjÙ )�”}”(hhh]”(hÌ)�”}”(hŒImplicit read synchronization.”h]”hŒImplicit read synchronization.”…”�”}”(hj›‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:157: ./include/linux/dma-resv.h”h´KNhj˜‹ubhÌ)�”}”(hŒaThis should only be used for userspace command submissions which add an implicit read dependency.”h]”hŒaThis should only be used for userspace command submissions which add an implicit read dependency.”…”�”}”(hjª‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:157: ./include/linux/dma-resv.h”h´KPhj˜‹ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jØ hj|‹ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³j—‹h´KQhjÄŠubj¹ )�”}”(hXö``DMA_RESV_USAGE_BOOKKEEP`` No implicit sync. This should be used by submissions which don't want to participate in any implicit synchronization. The most common cases are preemption fences, page table updates, TLB flushes as well as explicitly synced user submissions. Explicitly synced user submissions can be promoted to DMA_RESV_USAGE_READ or DMA_RESV_USAGE_WRITE as needed using dma_buf_import_sync_file() when implicit synchronization should become necessary after initial adding of the fence.”h]”(j¿ )�”}”(hŒ``DMA_RESV_USAGE_BOOKKEEP``”h]”jâ)�”}”(hjË‹h]”hŒDMA_RESV_USAGE_BOOKKEEP”…”�”}”(hjÍ‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjÉ‹ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:157: ./include/linux/dma-resv.h”h´K^hjÅ‹ubjÙ )�”}”(hhh]”(hÌ)�”}”(hŒNo implicit sync.”h]”hŒNo implicit sync.”…”�”}”(hjä‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:157: ./include/linux/dma-resv.h”h´KThjá‹ubhÌ)�”}”(hŒcThis should be used by submissions which don't want to participate in any implicit synchronization.”h]”hŒeThis should be used by submissions which don’t want to participate in any implicit synchronization.”…”�”}”(hjó‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:157: ./include/linux/dma-resv.h”h´KVhjá‹ubhÌ)�”}”(hŒ{The most common cases are preemption fences, page table updates, TLB flushes as well as explicitly synced user submissions.”h]”hŒ{The most common cases are preemption fences, page table updates, TLB flushes as well as explicitly synced user submissions.”…”�”}”(hjŒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:157: ./include/linux/dma-resv.h”h´KYhjá‹ubhÌ)�”}”(hŒåExplicitly synced user submissions can be promoted to DMA_RESV_USAGE_READ or DMA_RESV_USAGE_WRITE as needed using dma_buf_import_sync_file() when implicit synchronization should become necessary after initial adding of the fence.”h]”hŒåExplicitly synced user submissions can be promoted to DMA_RESV_USAGE_READ or DMA_RESV_USAGE_WRITE as needed using dma_buf_import_sync_file() when implicit synchronization should become necessary after initial adding of the fence.”…”�”}”(hjŒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:157: ./include/linux/dma-resv.h”h´K\hjá‹ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jØ hjÅ‹ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³jà‹h´K^hjÄŠubeh}”(h]”h ]”h"]”h$]”h&]”uh1j³ hj¨Šubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jg hj¼bh²hh³Nh´NubhÌ)�”}”(hŒ**Description**”h]”jr )�”}”(hj;Œh]”hŒ Description”…”�”}”(hj=Œh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hj9Œubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:157: ./include/linux/dma-resv.h”h´Kahj¼bh²hubhÌ)�”}”(hŒvThis enum describes the different use cases for a dma_resv object and controls which fences are returned when queried.”h]”hŒvThis enum describes the different use cases for a dma_resv object and controls which fences are returned when queried.”…”�”}”(hjQŒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:157: ./include/linux/dma-resv.h”h´K6hj¼bh²hubhÌ)�”}”(hŒÁAn important fact is that there is the order KERNEL )j? huh1jßh³j³Œh´Kxhj›Œh²hubjA )�”}”(hhh]”hÌ)�”}”(hŒhelper for implicit sync”h]”hŒhelper for implicit sync”…”�”}”(hjX�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:157: ./include/linux/dma-resv.h”h´KxhjU�h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j@ hj›Œh²hh³j³Œh´Kxubeh}”(h]”h ]”(jîŒfunction”eh"]”h$]”h&]”ja jîjb jp�jc jp�jd ‰je ‰jf ‰uh1jÚh²hhj¼bh³Nh´Nubjh )�”}”(hŒè**Parameters** ``bool write`` true if we create a new implicit sync write **Description** This returns the implicit synchronization usage for write or read accesses, see enum dma_resv_usage and :c:type:`dma_buf.resv `.”h]”(hÌ)�”}”(hŒ**Parameters**”h]”jr )�”}”(hjz�h]”hŒ Parameters”…”�”}”(hj|�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hjx�ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:157: ./include/linux/dma-resv.h”h´K|hjt�ubj´ )�”}”(hhh]”j¹ )�”}”(hŒ;``bool write`` true if we create a new implicit sync write ”h]”(j¿ )�”}”(hŒ``bool write``”h]”jâ)�”}”(hj™�h]”hŒ bool write”…”�”}”(hj›�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj—�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:157: ./include/linux/dma-resv.h”h´Kyhj“�ubjÙ )�”}”(hhh]”hÌ)�”}”(hŒ+true if we create a new implicit sync write”h]”hŒ+true if we create a new implicit sync write”…”�”}”(hj²�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j®�h´Kyhj¯�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hj“�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³j®�h´Kyhj��ubah}”(h]”h ]”h"]”h$]”h&]”uh1j³ hjt�ubhÌ)�”}”(hŒ**Description**”h]”jr )�”}”(hjÔ�h]”hŒ Description”…”�”}”(hjÖ�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hjÒ�ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:157: ./include/linux/dma-resv.h”h´K{hjt�ubhÌ)�”}”(hŒ‰This returns the implicit synchronization usage for write or read accesses, see enum dma_resv_usage and :c:type:`dma_buf.resv `.”h]”(hŒhThis returns the implicit synchronization usage for write or read accesses, see enum dma_resv_usage and ”…”�”}”(hjê�h²hh³Nh´Nubh)�”}”(hŒ :c:type:`dma_buf.resv `”h]”jâ)�”}”(hjô�h]”hŒ dma_buf.resv”…”�”}”(hjö�h²hh³Nh´Nubah}”(h]”h ]”(jíjîŒc-type”eh"]”h$]”h&]”uh1jáhjò�ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”júŒ refdomain”jîŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰j³j·jŒdma_buf”uh1hh³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:157: ./include/linux/dma-resv.h”h´Kzhjê�ubhŒ.”…”�”}”(hjê�h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jŽh´Kzhjt�ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jg hj¼bh²hh³Nh´NubjÉ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÕŒdma_resv (C struct)”Œ c.dma_resv”hNt”auh1jÈhj¼bh²hh³Nh´NubjÛ)�”}”(hhh]”(jà)�”}”(hŒdma_resv”h]”jæ)�”}”(hŒstruct dma_resv”h]”(jì)�”}”(hjïh]”hŒstruct”…”�”}”(hj<Žh²hh³Nh´Nubah}”(h]”h ]”jøah"]”h$]”h&]”uh1jëhj8Žh²hh³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:157: ./include/linux/dma-resv.h”h´K€ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjJŽh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj8Žh²hh³jIŽh´K€ubj )�”}”(hŒdma_resv”h]”j )�”}”(hj6Žh]”hŒdma_resv”…”�”}”(hj\Žh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjXŽubah}”(h]”h ]”(j' j( eh"]”h$]”h&]”j÷jøuh1j hj8Žh²hh³jIŽh´K€ubeh}”(h]”h ]”h"]”h$]”h&]”j÷jøj2 ˆuh1jåj3 j4 hj4Žh²hh³jIŽh´K€ubah}”(h]”j/Žah ]”(j8 j9 eh"]”h$]”h&]”j= ˆj> )j? huh1jßh³jIŽh´K€hj1Žh²hubjA )�”}”(hhh]”hÌ)�”}”(hŒ0a reservation object manages fences for a buffer”h]”hŒ0a reservation object manages fences for a buffer”…”�”}”(hj~Žh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:157: ./include/linux/dma-resv.h”h´K‹hj{Žh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j@ hj1Žh²hh³jIŽh´K€ubeh}”(h]”h ]”(jîŒstruct”eh"]”h$]”h&]”ja jîjb j–Žjc j–Žjd ‰je ‰jf ‰uh1jÚh²hhj¼bh³Nh´Nubjh )�”}”(hX**Definition**:: struct dma_resv { struct ww_mutex lock; struct dma_resv_list *fences; }; **Members** ``lock`` Update side lock. Don't use directly, instead use the wrapper functions like dma_resv_lock() and dma_resv_unlock(). Drivers which use the reservation object to manage memory dynamically also use this lock to protect buffer object state like placement, allocation policies or throughout command submission. ``fences`` Array of fences which where added to the dma_resv object A new fence is added by calling dma_resv_add_fence(). Since this often needs to be done past the point of no return in command submission it cannot fail, and therefore sufficient slots need to be reserved by calling dma_resv_reserve_fences().”h]”(hÌ)�”}”(hŒ**Definition**::”h]”(jr )�”}”(hŒ**Definition**”h]”hŒ Definition”…”�”}”(hj¢Žh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hjžŽubhŒ:”…”�”}”(hjžŽh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:157: ./include/linux/dma-resv.h”h´K�hjšŽubjè)�”}”(hŒPstruct dma_resv { struct ww_mutex lock; struct dma_resv_list *fences; };”h]”hŒPstruct dma_resv { struct ww_mutex lock; struct dma_resv_list *fences; };”…”�”}”hj»Žsbah}”(h]”h ]”h"]”h$]”h&]”j÷jøuh1jçh³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:157: ./include/linux/dma-resv.h”h´K‘hjšŽubhÌ)�”}”(hŒ **Members**”h]”jr )�”}”(hjÌŽh]”hŒMembers”…”�”}”(hjÎŽh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hjÊŽubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:157: ./include/linux/dma-resv.h”h´K–hjšŽubj´ )�”}”(hhh]”(j¹ )�”}”(hX<``lock`` Update side lock. Don't use directly, instead use the wrapper functions like dma_resv_lock() and dma_resv_unlock(). Drivers which use the reservation object to manage memory dynamically also use this lock to protect buffer object state like placement, allocation policies or throughout command submission. ”h]”(j¿ )�”}”(hŒ``lock``”h]”jâ)�”}”(hjëŽh]”hŒlock”…”�”}”(hjíŽh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjéŽubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:157: ./include/linux/dma-resv.h”h´K£hjåŽubjÙ )�”}”(hhh]”(hÌ)�”}”(hŒsUpdate side lock. Don't use directly, instead use the wrapper functions like dma_resv_lock() and dma_resv_unlock().”h]”hŒuUpdate side lock. Don’t use directly, instead use the wrapper functions like dma_resv_lock() and dma_resv_unlock().”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:157: ./include/linux/dma-resv.h”h´Kžhj�ubhÌ)�”}”(hŒ½Drivers which use the reservation object to manage memory dynamically also use this lock to protect buffer object state like placement, allocation policies or throughout command submission.”h]”hŒ½Drivers which use the reservation object to manage memory dynamically also use this lock to protect buffer object state like placement, allocation policies or throughout command submission.”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:157: ./include/linux/dma-resv.h”h´K¡hj�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jØ hjåŽubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³j�h´K£hjâŽubj¹ )�”}”(hX7``fences`` Array of fences which where added to the dma_resv object A new fence is added by calling dma_resv_add_fence(). Since this often needs to be done past the point of no return in command submission it cannot fail, and therefore sufficient slots need to be reserved by calling dma_resv_reserve_fences().”h]”(j¿ )�”}”(hŒ ``fences``”h]”jâ)�”}”(hj4�h]”hŒfences”…”�”}”(hj6�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj2�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:157: ./include/linux/dma-resv.h”h´K®hj.�ubjÙ )�”}”(hhh]”(hÌ)�”}”(hŒ8Array of fences which where added to the dma_resv object”h]”hŒ8Array of fences which where added to the dma_resv object”…”�”}”(hjM�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:157: ./include/linux/dma-resv.h”h´KªhjJ�ubhÌ)�”}”(hŒòA new fence is added by calling dma_resv_add_fence(). Since this often needs to be done past the point of no return in command submission it cannot fail, and therefore sufficient slots need to be reserved by calling dma_resv_reserve_fences().”h]”hŒòA new fence is added by calling dma_resv_add_fence(). Since this often needs to be done past the point of no return in command submission it cannot fail, and therefore sufficient slots need to be reserved by calling dma_resv_reserve_fences().”…”�”}”(hj\�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:157: ./include/linux/dma-resv.h”h´K¬hjJ�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jØ hj.�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³jI�h´K®hjâŽubeh}”(h]”h ]”h"]”h$]”h&]”uh1j³ hjšŽubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jg hj¼bh²hh³Nh´NubhÌ)�”}”(hŒ**Description**”h]”jr )�”}”(hj†�h]”hŒ Description”…”�”}”(hjˆ�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hj„�ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:157: ./include/linux/dma-resv.h”h´K²hj¼bh²hubhÌ)�”}”(hŒSThis is a container for dma_fence objects which needs to handle multiple use cases.”h]”hŒSThis is a container for dma_fence objects which needs to handle multiple use cases.”…”�”}”(hjœ�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:157: ./include/linux/dma-resv.h”h´KŒhj¼bh²hubhÌ)�”}”(hX One use is to synchronize cross-driver access to a struct dma_buf, either for dynamic buffer management or just to handle implicit synchronization between different users of the buffer in userspace. See :c:type:`dma_buf.resv ` for a more in-depth discussion.”h]”(hŒËOne use is to synchronize cross-driver access to a struct dma_buf, either for dynamic buffer management or just to handle implicit synchronization between different users of the buffer in userspace. See ”…”�”}”(hj«�h²hh³Nh´Nubh)�”}”(hŒ :c:type:`dma_buf.resv `”h]”jâ)�”}”(hjµ�h]”hŒ dma_buf.resv”…”�”}”(hj·�h²hh³Nh´Nubah}”(h]”h ]”(jíjîŒc-type”eh"]”h$]”h&]”uh1jáhj³�ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”júŒ refdomain”jîŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰j³j·jŒdma_buf”uh1hh³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:157: ./include/linux/dma-resv.h”h´K�hj«�ubhŒ for a more in-depth discussion.”…”�”}”(hj«�h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jÒ�h´K�hj¼bh²hubhÌ)�”}”(hX?The other major use is to manage access and locking within a driver in a buffer based memory manager. struct ttm_buffer_object is the canonical example here, since this is where reservation objects originated from. But use in drivers is spreading and some drivers also manage struct drm_gem_object with the same scheme.”h]”hX?The other major use is to manage access and locking within a driver in a buffer based memory manager. struct ttm_buffer_object is the canonical example here, since this is where reservation objects originated from. But use in drivers is spreading and some drivers also manage struct drm_gem_object with the same scheme.”…”�”}”(hjÝ�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:157: ./include/linux/dma-resv.h”h´K”hj¼bh²hubjÉ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÕŒdma_resv_iter (C struct)”Œc.dma_resv_iter”hNt”auh1jÈhj¼bh²hh³Nh´NubjÛ)�”}”(hhh]”(jà)�”}”(hŒ dma_resv_iter”h]”jæ)�”}”(hŒstruct dma_resv_iter”h]”(jì)�”}”(hjïh]”hŒstruct”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”jøah"]”h$]”h&]”uh1jëhj�h²hh³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:157: ./include/linux/dma-resv.h”h´K�ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj�h²hh³j�h´K�ubj )�”}”(hŒ dma_resv_iter”h]”j )�”}”(hjÿ�h]”hŒ dma_resv_iter”…”�”}”(hj%�h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj!�ubah}”(h]”h ]”(j' j( eh"]”h$]”h&]”j÷jøuh1j hj�h²hh³j�h´K�ubeh}”(h]”h ]”h"]”h$]”h&]”j÷jøj2 ˆuh1jåj3 j4 hjý�h²hh³j�h´K�ubah}”(h]”jø�ah ]”(j8 j9 eh"]”h$]”h&]”j= ˆj> )j? huh1jßh³j�h´K�hjú�h²hubjA )�”}”(hhh]”hÌ)�”}”(hŒ)current position into the dma_resv fences”h]”hŒ)current position into the dma_resv fences”…”�”}”(hjG�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:157: ./include/linux/dma-resv.h”h´K¶hjD�h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j@ hjú�h²hh³j�h´K�ubeh}”(h]”h ]”(jîŒstruct”eh"]”h$]”h&]”ja jîjb j_�jc j_�jd ‰je ‰jf ‰uh1jÚh²hhj¼bh³Nh´Nubjh )�”}”(hX¿**Definition**:: struct dma_resv_iter { struct dma_resv *obj; enum dma_resv_usage usage; struct dma_fence *fence; enum dma_resv_usage fence_usage; unsigned int index; struct dma_resv_list *fences; unsigned int num_fences; bool is_restarted; }; **Members** ``obj`` The dma_resv object we iterate over ``usage`` Return fences with this usage or lower. ``fence`` the currently handled fence ``fence_usage`` the usage of the current fence ``index`` index into the shared fences ``fences`` the shared fences; private, *MUST* not dereference ``num_fences`` number of fences ``is_restarted`` true if this is the first returned fence”h]”(hÌ)�”}”(hŒ**Definition**::”h]”(jr )�”}”(hŒ**Definition**”h]”hŒ Definition”…”�”}”(hjk�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hjg�ubhŒ:”…”�”}”(hjg�h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:157: ./include/linux/dma-resv.h”h´Kºhjc�ubjè)�”}”(hXstruct dma_resv_iter { struct dma_resv *obj; enum dma_resv_usage usage; struct dma_fence *fence; enum dma_resv_usage fence_usage; unsigned int index; struct dma_resv_list *fences; unsigned int num_fences; bool is_restarted; };”h]”hXstruct dma_resv_iter { struct dma_resv *obj; enum dma_resv_usage usage; struct dma_fence *fence; enum dma_resv_usage fence_usage; unsigned int index; struct dma_resv_list *fences; unsigned int num_fences; bool is_restarted; };”…”�”}”hj„�sbah}”(h]”h ]”h"]”h$]”h&]”j÷jøuh1jçh³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:157: ./include/linux/dma-resv.h”h´K¼hjc�ubhÌ)�”}”(hŒ **Members**”h]”jr )�”}”(hj•�h]”hŒMembers”…”�”}”(hj—�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hj“�ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:157: ./include/linux/dma-resv.h”h´KÇhjc�ubj´ )�”}”(hhh]”(j¹ )�”}”(hŒ,``obj`` The dma_resv object we iterate over ”h]”(j¿ )�”}”(hŒ``obj``”h]”jâ)�”}”(hj´�h]”hŒobj”…”�”}”(hj¶�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj²�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:157: ./include/linux/dma-resv.h”h´KÃhj®�ubjÙ )�”}”(hhh]”hÌ)�”}”(hŒ#The dma_resv object we iterate over”h]”hŒ#The dma_resv object we iterate over”…”�”}”(hjÍ�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jÉ�h´KÃhjÊ�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hj®�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³jÉ�h´KÃhj«�ubj¹ )�”}”(hŒ2``usage`` Return fences with this usage or lower. ”h]”(j¿ )�”}”(hŒ ``usage``”h]”jâ)�”}”(hjí�h]”hŒusage”…”�”}”(hjï�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjë�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:157: ./include/linux/dma-resv.h”h´KÆhjç�ubjÙ )�”}”(hhh]”hÌ)�”}”(hŒ'Return fences with this usage or lower.”h]”hŒ'Return fences with this usage or lower.”…”�”}”(hj‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j‘h´KÆhj‘ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hjç�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³j‘h´KÆhj«�ubj¹ )�”}”(hŒ&``fence`` the currently handled fence ”h]”(j¿ )�”}”(hŒ ``fence``”h]”jâ)�”}”(hj&‘h]”hŒfence”…”�”}”(hj(‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj$‘ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:157: ./include/linux/dma-resv.h”h´KÉhj ‘ubjÙ )�”}”(hhh]”hÌ)�”}”(hŒthe currently handled fence”h]”hŒthe currently handled fence”…”�”}”(hj?‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j;‘h´KÉhj<‘ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hj ‘ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³j;‘h´KÉhj«�ubj¹ )�”}”(hŒ/``fence_usage`` the usage of the current fence ”h]”(j¿ )�”}”(hŒ``fence_usage``”h]”jâ)�”}”(hj_‘h]”hŒ fence_usage”…”�”}”(hja‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj]‘ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:157: ./include/linux/dma-resv.h”h´KÌhjY‘ubjÙ )�”}”(hhh]”hÌ)�”}”(hŒthe usage of the current fence”h]”hŒthe usage of the current fence”…”�”}”(hjx‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jt‘h´KÌhju‘ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hjY‘ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³jt‘h´KÌhj«�ubj¹ )�”}”(hŒ'``index`` index into the shared fences ”h]”(j¿ )�”}”(hŒ ``index``”h]”jâ)�”}”(hj˜‘h]”hŒindex”…”�”}”(hjš‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj–‘ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:157: ./include/linux/dma-resv.h”h´KÏhj’‘ubjÙ )�”}”(hhh]”hÌ)�”}”(hŒindex into the shared fences”h]”hŒindex into the shared fences”…”�”}”(hj±‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j­‘h´KÏhj®‘ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hj’‘ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³j­‘h´KÏhj«�ubj¹ )�”}”(hŒ>``fences`` the shared fences; private, *MUST* not dereference ”h]”(j¿ )�”}”(hŒ ``fences``”h]”jâ)�”}”(hjÑ‘h]”hŒfences”…”�”}”(hjÓ‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjÏ‘ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:157: ./include/linux/dma-resv.h”h´KÒhjË‘ubjÙ )�”}”(hhh]”hÌ)�”}”(hŒ2the shared fences; private, *MUST* not dereference”h]”(hŒthe shared fences; private, ”…”�”}”(hjê‘h²hh³Nh´Nubj ‹)�”}”(hŒ*MUST*”h]”hŒMUST”…”�”}”(hjò‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j ‹hjê‘ubhŒ not dereference”…”�”}”(hjê‘h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jæ‘h´KÒhjç‘ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hjË‘ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³jæ‘h´KÒhj«�ubj¹ )�”}”(hŒ ``num_fences`` number of fences ”h]”(j¿ )�”}”(hŒ``num_fences``”h]”jâ)�”}”(hj’h]”hŒ num_fences”…”�”}”(hj’h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj’ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:157: ./include/linux/dma-resv.h”h´KÕhj’ubjÙ )�”}”(hhh]”hÌ)�”}”(hŒnumber of fences”h]”hŒnumber of fences”…”�”}”(hj5’h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j1’h´KÕhj2’ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hj’ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³j1’h´KÕhj«�ubj¹ )�”}”(hŒ9``is_restarted`` true if this is the first returned fence”h]”(j¿ )�”}”(hŒ``is_restarted``”h]”jâ)�”}”(hjU’h]”hŒ is_restarted”…”�”}”(hjW’h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjS’ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:157: ./include/linux/dma-resv.h”h´K×hjO’ubjÙ )�”}”(hhh]”hÌ)�”}”(hŒ(true if this is the first returned fence”h]”hŒ(true if this is the first returned fence”…”�”}”(hjn’h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:157: ./include/linux/dma-resv.h”h´KØhjk’ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hjO’ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³jj’h´K×hj«�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j³ hjc�ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jg hj¼bh²hh³Nh´NubhÌ)�”}”(hŒ**Description**”h]”jr )�”}”(hj˜’h]”hŒ Description”…”�”}”(hjš’h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hj–’ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:157: ./include/linux/dma-resv.h”h´KÛhj¼bh²hubhÌ)�”}”(hŒKDon't touch this directly in the driver, use the accessor function instead.”h]”hŒMDon’t touch this directly in the driver, use the accessor function instead.”…”�”}”(hj®’h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:157: ./include/linux/dma-resv.h”h´K·hj¼bh²hubhÌ)�”}”(hŒ IMPORTANT”h]”hŒ IMPORTANT”…”�”}”(hj½’h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:157: ./include/linux/dma-resv.h”h´K¹hj¼bh²hubhÌ)�”}”(hŒýWhen using the lockless iterators like dma_resv_iter_next_unlocked() or dma_resv_for_each_fence_unlocked() beware that the iterator can be restarted. Code which accumulates statistics or similar needs to check for this with dma_resv_iter_is_restarted().”h]”hŒýWhen using the lockless iterators like dma_resv_iter_next_unlocked() or dma_resv_for_each_fence_unlocked() beware that the iterator can be restarted. Code which accumulates statistics or similar needs to check for this with dma_resv_iter_is_restarted().”…”�”}”(hjÌ’h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:157: ./include/linux/dma-resv.h”h´K»hj¼bh²hubjÉ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÕŒ dma_resv_iter_begin (C function)”Œc.dma_resv_iter_begin”hNt”auh1jÈhj¼bh²hh³Nh´NubjÛ)�”}”(hhh]”(jà)�”}”(hŒhvoid dma_resv_iter_begin (struct dma_resv_iter *cursor, struct dma_resv *obj, enum dma_resv_usage usage)”h]”jæ)�”}”(hŒgvoid dma_resv_iter_begin(struct dma_resv_iter *cursor, struct dma_resv *obj, enum dma_resv_usage usage)”h]”(jM)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjô’h²hh³Nh´Nubah}”(h]”h ]”jYah"]”h$]”h&]”uh1jLhjð’h²hh³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:157: ./include/linux/dma-resv.h”h´Káubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj“h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjð’h²hh³j“h´Káubj )�”}”(hŒdma_resv_iter_begin”h]”j )�”}”(hŒdma_resv_iter_begin”h]”hŒdma_resv_iter_begin”…”�”}”(hj“h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj“ubah}”(h]”h ]”(j' j( eh"]”h$]”h&]”j÷jøuh1j hjð’h²hh³j“h´KáubjŒ)�”}”(hŒO(struct dma_resv_iter *cursor, struct dma_resv *obj, enum dma_resv_usage usage)”h]”(j’)�”}”(hŒstruct dma_resv_iter *cursor”h]”(jì)�”}”(hjïh]”hŒstruct”…”�”}”(hj1“h²hh³Nh´Nubah}”(h]”h ]”jøah"]”h$]”h&]”uh1jëhj-“ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj>“h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj-“ubh)�”}”(hhh]”j )�”}”(hŒ dma_resv_iter”h]”hŒ dma_resv_iter”…”�”}”(hjO“h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjL“ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jîŒreftype”jGŒ reftarget”jQ“Œmodname”NŒ classname”Nj³j¶)�”}”j¹]”jO)�”}”jGj“sbŒc.dma_resv_iter_begin”†”asbuh1hhj-“ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjo“h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj-“ubjd)�”}”(hjgh]”hŒ*”…”�”}”(hj}“h²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchj-“ubj )�”}”(hŒcursor”h]”hŒcursor”…”�”}”(hjŠ“h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj-“ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj÷jøuh1j‘hj)“ubj’)�”}”(hŒstruct dma_resv *obj”h]”(jì)�”}”(hjïh]”hŒstruct”…”�”}”(hj£“h²hh³Nh´Nubah}”(h]”h ]”jøah"]”h$]”h&]”uh1jëhjŸ“ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj°“h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjŸ“ubh)�”}”(hhh]”j )�”}”(hŒdma_resv”h]”hŒdma_resv”…”�”}”(hjÁ“h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj¾“ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jîŒreftype”jGŒ reftarget”jÓŒmodname”NŒ classname”Nj³j¶)�”}”j¹]”jk“Œc.dma_resv_iter_begin”†”asbuh1hhjŸ“ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjß“h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjŸ“ubjd)�”}”(hjgh]”hŒ*”…”�”}”(hjí“h²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchjŸ“ubj )�”}”(hŒobj”h]”hŒobj”…”�”}”(hjú“h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjŸ“ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj÷jøuh1j‘hj)“ubj’)�”}”(hŒenum dma_resv_usage usage”h]”(jì)�”}”(hj×+h]”hŒenum”…”�”}”(hj”h²hh³Nh´Nubah}”(h]”h ]”jøah"]”h$]”h&]”uh1jëhj”ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj ”h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj”ubh)�”}”(hhh]”j )�”}”(hŒdma_resv_usage”h]”hŒdma_resv_usage”…”�”}”(hj1”h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj.”ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jîŒreftype”jGŒ reftarget”j3”Œmodname”NŒ classname”Nj³j¶)�”}”j¹]”jk“Œc.dma_resv_iter_begin”†”asbuh1hhj”ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjO”h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj”ubj )�”}”(hŒusage”h]”hŒusage”…”�”}”(hj]”h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj”ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj÷jøuh1j‘hj)“ubeh}”(h]”h ]”h"]”h$]”h&]”j÷jøuh1j‹hjð’h²hh³j“h´Káubeh}”(h]”h ]”h"]”h$]”h&]”j÷jøj2 ˆuh1jåj3 j4 hjì’h²hh³j“h´Káubah}”(h]”jç’ah ]”(j8 j9 eh"]”h$]”h&]”j= ˆj> )j? huh1jßh³j“h´Káhjé’h²hubjA )�”}”(hhh]”hÌ)�”}”(hŒ!initialize a dma_resv_iter object”h]”hŒ!initialize a dma_resv_iter object”…”�”}”(hj‡”h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:157: ./include/linux/dma-resv.h”h´Káhj„”h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j@ hjé’h²hh³j“h´Káubeh}”(h]”h ]”(jîŒfunction”eh"]”h$]”h&]”ja jîjb jŸ”jc jŸ”jd ‰je ‰jf ‰uh1jÚh²hhj¼bh³Nh´Nubjh )�”}”(hX**Parameters** ``struct dma_resv_iter *cursor`` The dma_resv_iter object to initialize ``struct dma_resv *obj`` The dma_resv object which we want to iterate over ``enum dma_resv_usage usage`` controls which fences to include, see enum dma_resv_usage.”h]”(hÌ)�”}”(hŒ**Parameters**”h]”jr )�”}”(hj©”h]”hŒ Parameters”…”�”}”(hj«”h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hj§”ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:157: ./include/linux/dma-resv.h”h´Kåhj£”ubj´ )�”}”(hhh]”(j¹ )�”}”(hŒH``struct dma_resv_iter *cursor`` The dma_resv_iter object to initialize ”h]”(j¿ )�”}”(hŒ ``struct dma_resv_iter *cursor``”h]”jâ)�”}”(hjÈ”h]”hŒstruct dma_resv_iter *cursor”…”�”}”(hjÊ”h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjÆ”ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:157: ./include/linux/dma-resv.h”h´Kâhj”ubjÙ )�”}”(hhh]”hÌ)�”}”(hŒ&The dma_resv_iter object to initialize”h]”hŒ&The dma_resv_iter object to initialize”…”�”}”(hjá”h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jÝ”h´KâhjÞ”ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hj”ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³jÝ”h´Kâhj¿”ubj¹ )�”}”(hŒK``struct dma_resv *obj`` The dma_resv object which we want to iterate over ”h]”(j¿ )�”}”(hŒ``struct dma_resv *obj``”h]”jâ)�”}”(hj•h]”hŒstruct dma_resv *obj”…”�”}”(hj•h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjÿ”ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:157: ./include/linux/dma-resv.h”h´Kãhjû”ubjÙ )�”}”(hhh]”hÌ)�”}”(hŒ1The dma_resv object which we want to iterate over”h]”hŒ1The dma_resv object which we want to iterate over”…”�”}”(hj•h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j•h´Kãhj•ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hjû”ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³j•h´Kãhj¿”ubj¹ )�”}”(hŒX``enum dma_resv_usage usage`` controls which fences to include, see enum dma_resv_usage.”h]”(j¿ )�”}”(hŒ``enum dma_resv_usage usage``”h]”jâ)�”}”(hj:•h]”hŒenum dma_resv_usage usage”…”�”}”(hj<•h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj8•ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:157: ./include/linux/dma-resv.h”h´Kåhj4•ubjÙ )�”}”(hhh]”hÌ)�”}”(hŒ:controls which fences to include, see enum dma_resv_usage.”h]”hŒ:controls which fences to include, see enum dma_resv_usage.”…”�”}”(hjS•h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:157: ./include/linux/dma-resv.h”h´KähjP•ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hj4•ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³jO•h´Kåhj¿”ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j³ hj£”ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jg hj¼bh²hh³Nh´NubjÉ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÕŒdma_resv_iter_end (C function)”Œc.dma_resv_iter_end”hNt”auh1jÈhj¼bh²hh³Nh´NubjÛ)�”}”(hhh]”(jà)�”}”(hŒ5void dma_resv_iter_end (struct dma_resv_iter *cursor)”h]”jæ)�”}”(hŒ4void dma_resv_iter_end(struct dma_resv_iter *cursor)”h]”(jM)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj”•h²hh³Nh´Nubah}”(h]”h ]”jYah"]”h$]”h&]”uh1jLhj�•h²hh³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:157: ./include/linux/dma-resv.h”h´Kðubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj£•h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj�•h²hh³j¢•h´Kðubj )�”}”(hŒdma_resv_iter_end”h]”j )�”}”(hŒdma_resv_iter_end”h]”hŒdma_resv_iter_end”…”�”}”(hjµ•h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj±•ubah}”(h]”h ]”(j' j( eh"]”h$]”h&]”j÷jøuh1j hj�•h²hh³j¢•h´KðubjŒ)�”}”(hŒ(struct dma_resv_iter *cursor)”h]”j’)�”}”(hŒstruct dma_resv_iter *cursor”h]”(jì)�”}”(hjïh]”hŒstruct”…”�”}”(hjÑ•h²hh³Nh´Nubah}”(h]”h ]”jøah"]”h$]”h&]”uh1jëhjÍ•ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÞ•h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjÍ•ubh)�”}”(hhh]”j )�”}”(hŒ dma_resv_iter”h]”hŒ dma_resv_iter”…”�”}”(hjï•h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjì•ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jîŒreftype”jGŒ reftarget”jñ•Œmodname”NŒ classname”Nj³j¶)�”}”j¹]”jO)�”}”jGj·•sbŒc.dma_resv_iter_end”†”asbuh1hhjÍ•ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj–h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjÍ•ubjd)�”}”(hjgh]”hŒ*”…”�”}”(hj–h²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchjÍ•ubj )�”}”(hŒcursor”h]”hŒcursor”…”�”}”(hj*–h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjÍ•ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj÷jøuh1j‘hjÉ•ubah}”(h]”h ]”h"]”h$]”h&]”j÷jøuh1j‹hj�•h²hh³j¢•h´Kðubeh}”(h]”h ]”h"]”h$]”h&]”j÷jøj2 ˆuh1jåj3 j4 hjŒ•h²hh³j¢•h´Kðubah}”(h]”j‡•ah ]”(j8 j9 eh"]”h$]”h&]”j= ˆj> )j? huh1jßh³j¢•h´Kðhj‰•h²hubjA )�”}”(hhh]”hÌ)�”}”(hŒcleanup a dma_resv_iter object”h]”hŒcleanup a dma_resv_iter object”…”�”}”(hjT–h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:157: ./include/linux/dma-resv.h”h´KðhjQ–h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j@ hj‰•h²hh³j¢•h´Kðubeh}”(h]”h ]”(jîŒfunction”eh"]”h$]”h&]”ja jîjb jl–jc jl–jd ‰je ‰jf ‰uh1jÚh²hhj¼bh³Nh´Nubjh )�”}”(hŒÅ**Parameters** ``struct dma_resv_iter *cursor`` the dma_resv_iter object which should be cleaned up **Description** Make sure that the reference to the fence in the cursor is properly dropped.”h]”(hÌ)�”}”(hŒ**Parameters**”h]”jr )�”}”(hjv–h]”hŒ Parameters”…”�”}”(hjx–h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hjt–ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:157: ./include/linux/dma-resv.h”h´Kôhjp–ubj´ )�”}”(hhh]”j¹ )�”}”(hŒU``struct dma_resv_iter *cursor`` the dma_resv_iter object which should be cleaned up ”h]”(j¿ )�”}”(hŒ ``struct dma_resv_iter *cursor``”h]”jâ)�”}”(hj•–h]”hŒstruct dma_resv_iter *cursor”…”�”}”(hj—–h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj“–ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:157: ./include/linux/dma-resv.h”h´Kñhj�–ubjÙ )�”}”(hhh]”hÌ)�”}”(hŒ3the dma_resv_iter object which should be cleaned up”h]”hŒ3the dma_resv_iter object which should be cleaned up”…”�”}”(hj®–h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jª–h´Kñhj«–ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hj�–ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³jª–h´KñhjŒ–ubah}”(h]”h ]”h"]”h$]”h&]”uh1j³ hjp–ubhÌ)�”}”(hŒ**Description**”h]”jr )�”}”(hjЖh]”hŒ Description”…”�”}”(hjÒ–h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hjΖubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:157: ./include/linux/dma-resv.h”h´Kóhjp–ubhÌ)�”}”(hŒLMake sure that the reference to the fence in the cursor is properly dropped.”h]”hŒLMake sure that the reference to the fence in the cursor is properly dropped.”…”�”}”(hjæ–h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:157: ./include/linux/dma-resv.h”h´Kòhjp–ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jg hj¼bh²hh³Nh´NubjÉ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÕŒ dma_resv_iter_usage (C function)”Œc.dma_resv_iter_usage”hNt”auh1jÈhj¼bh²hh³Nh´NubjÛ)�”}”(hhh]”(jà)�”}”(hŒFenum dma_resv_usage dma_resv_iter_usage (struct dma_resv_iter *cursor)”h]”jæ)�”}”(hŒEenum dma_resv_usage dma_resv_iter_usage(struct dma_resv_iter *cursor)”h]”(jì)�”}”(hj×+h]”hŒenum”…”�”}”(hj—h²hh³Nh´Nubah}”(h]”h ]”jøah"]”h$]”h&]”uh1jëhj—h²hh³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:157: ./include/linux/dma-resv.h”h´Küubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj#—h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj—h²hh³j"—h´Küubh)�”}”(hhh]”j )�”}”(hŒdma_resv_usage”h]”hŒdma_resv_usage”…”�”}”(hj4—h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj1—ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jîŒreftype”jGŒ reftarget”j6—Œmodname”NŒ classname”Nj³j¶)�”}”j¹]”jO)�”}”jGŒdma_resv_iter_usage”sbŒc.dma_resv_iter_usage”†”asbuh1hhj—h²hh³j"—h´Küubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjU—h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj—h²hh³j"—h´Küubj )�”}”(hŒdma_resv_iter_usage”h]”j )�”}”(hjR—h]”hŒdma_resv_iter_usage”…”�”}”(hjg—h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjc—ubah}”(h]”h ]”(j' j( eh"]”h$]”h&]”j÷jøuh1j hj—h²hh³j"—h´KüubjŒ)�”}”(hŒ(struct dma_resv_iter *cursor)”h]”j’)�”}”(hŒstruct dma_resv_iter *cursor”h]”(jì)�”}”(hjïh]”hŒstruct”…”�”}”(hj‚—h²hh³Nh´Nubah}”(h]”h ]”jøah"]”h$]”h&]”uh1jëhj~—ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�—h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj~—ubh)�”}”(hhh]”j )�”}”(hŒ dma_resv_iter”h]”hŒ dma_resv_iter”…”�”}”(hj —h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj�—ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jîŒreftype”jGŒ reftarget”j¢—Œmodname”NŒ classname”Nj³j¶)�”}”j¹]”jP—Œc.dma_resv_iter_usage”†”asbuh1hhj~—ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¾—h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj~—ubjd)�”}”(hjgh]”hŒ*”…”�”}”(hjÌ—h²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchj~—ubj )�”}”(hŒcursor”h]”hŒcursor”…”�”}”(hjÙ—h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj~—ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj÷jøuh1j‘hjz—ubah}”(h]”h ]”h"]”h$]”h&]”j÷jøuh1j‹hj—h²hh³j"—h´Küubeh}”(h]”h ]”h"]”h$]”h&]”j÷jøj2 ˆuh1jåj3 j4 hj —h²hh³j"—h´Küubah}”(h]”j—ah ]”(j8 j9 eh"]”h$]”h&]”j= ˆj> )j? huh1jßh³j"—h´Kühj —h²hubjA )�”}”(hhh]”hÌ)�”}”(hŒ%Return the usage of the current fence”h]”hŒ%Return the usage of the current fence”…”�”}”(hj˜h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:157: ./include/linux/dma-resv.h”h´Kühj˜h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j@ hj —h²hh³j"—h´Küubeh}”(h]”h ]”(jîŒfunction”eh"]”h$]”h&]”ja jîjb j˜jc j˜jd ‰je ‰jf ‰uh1jÚh²hhj¼bh³Nh´Nubjh )�”}”(hŒ›**Parameters** ``struct dma_resv_iter *cursor`` the cursor of the current position **Description** Returns the usage of the currently processed fence.”h]”(hÌ)�”}”(hŒ**Parameters**”h]”jr )�”}”(hj%˜h]”hŒ Parameters”…”�”}”(hj'˜h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hj#˜ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:157: ./include/linux/dma-resv.h”h´Mhj˜ubj´ )�”}”(hhh]”j¹ )�”}”(hŒD``struct dma_resv_iter *cursor`` the cursor of the current position ”h]”(j¿ )�”}”(hŒ ``struct dma_resv_iter *cursor``”h]”jâ)�”}”(hjD˜h]”hŒstruct dma_resv_iter *cursor”…”�”}”(hjF˜h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjB˜ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:157: ./include/linux/dma-resv.h”h´Kýhj>˜ubjÙ )�”}”(hhh]”hÌ)�”}”(hŒ"the cursor of the current position”h]”hŒ"the cursor of the current position”…”�”}”(hj]˜h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jY˜h´KýhjZ˜ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hj>˜ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³jY˜h´Kýhj;˜ubah}”(h]”h ]”h"]”h$]”h&]”uh1j³ hj˜ubhÌ)�”}”(hŒ**Description**”h]”jr )�”}”(hj˜h]”hŒ Description”…”�”}”(hj�˜h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hj}˜ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:157: ./include/linux/dma-resv.h”h´Kÿhj˜ubhÌ)�”}”(hŒ3Returns the usage of the currently processed fence.”h]”hŒ3Returns the usage of the currently processed fence.”…”�”}”(hj•˜h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:157: ./include/linux/dma-resv.h”h´Kþhj˜ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jg hj¼bh²hh³Nh´NubjÉ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÕŒ'dma_resv_iter_is_restarted (C function)”Œc.dma_resv_iter_is_restarted”hNt”auh1jÈhj¼bh²hh³Nh´NubjÛ)�”}”(hhh]”(jà)�”}”(hŒ>bool dma_resv_iter_is_restarted (struct dma_resv_iter *cursor)”h]”jæ)�”}”(hŒ=bool dma_resv_iter_is_restarted(struct dma_resv_iter *cursor)”h]”(jM)�”}”(hji5h]”hŒbool”…”�”}”(hjĘh²hh³Nh´Nubah}”(h]”h ]”jYah"]”h$]”h&]”uh1jLhjÀ˜h²hh³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:157: ./include/linux/dma-resv.h”h´Mubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÒ˜h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjÀ˜h²hh³jјh´Mubj )�”}”(hŒdma_resv_iter_is_restarted”h]”j )�”}”(hŒdma_resv_iter_is_restarted”h]”hŒdma_resv_iter_is_restarted”…”�”}”(hjä˜h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjà˜ubah}”(h]”h ]”(j' j( eh"]”h$]”h&]”j÷jøuh1j hjÀ˜h²hh³jјh´MubjŒ)�”}”(hŒ(struct dma_resv_iter *cursor)”h]”j’)�”}”(hŒstruct dma_resv_iter *cursor”h]”(jì)�”}”(hjïh]”hŒstruct”…”�”}”(hj™h²hh³Nh´Nubah}”(h]”h ]”jøah"]”h$]”h&]”uh1jëhjü˜ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj ™h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjü˜ubh)�”}”(hhh]”j )�”}”(hŒ dma_resv_iter”h]”hŒ dma_resv_iter”…”�”}”(hj™h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj™ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jîŒreftype”jGŒ reftarget”j ™Œmodname”NŒ classname”Nj³j¶)�”}”j¹]”jO)�”}”jGjæ˜sbŒc.dma_resv_iter_is_restarted”†”asbuh1hhjü˜ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj>™h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjü˜ubjd)�”}”(hjgh]”hŒ*”…”�”}”(hjL™h²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchjü˜ubj )�”}”(hŒcursor”h]”hŒcursor”…”�”}”(hjY™h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjü˜ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj÷jøuh1j‘hjø˜ubah}”(h]”h ]”h"]”h$]”h&]”j÷jøuh1j‹hjÀ˜h²hh³jјh´Mubeh}”(h]”h ]”h"]”h$]”h&]”j÷jøj2 ˆuh1jåj3 j4 hj¼˜h²hh³jјh´Mubah}”(h]”j·˜ah ]”(j8 j9 eh"]”h$]”h&]”j= ˆj> )j? huh1jßh³jјh´Mhj¹˜h²hubjA )�”}”(hhh]”hÌ)�”}”(hŒ/test if this is the first fence after a restart”h]”hŒ/test if this is the first fence after a restart”…”�”}”(hjƒ™h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:157: ./include/linux/dma-resv.h”h´Mhj€™h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j@ hj¹˜h²hh³jјh´Mubeh}”(h]”h ]”(jîŒfunction”eh"]”h$]”h&]”ja jîjb j›™jc j›™jd ‰je ‰jf ‰uh1jÚh²hhj¼bh³Nh´Nubjh )�”}”(hŒ±**Parameters** ``struct dma_resv_iter *cursor`` the cursor with the current position **Description** Return true if this is the first fence in an iteration after a restart.”h]”(hÌ)�”}”(hŒ**Parameters**”h]”jr )�”}”(hj¥™h]”hŒ Parameters”…”�”}”(hj§™h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hj£™ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:157: ./include/linux/dma-resv.h”h´M hjŸ™ubj´ )�”}”(hhh]”j¹ )�”}”(hŒF``struct dma_resv_iter *cursor`` the cursor with the current position ”h]”(j¿ )�”}”(hŒ ``struct dma_resv_iter *cursor``”h]”jâ)�”}”(hjÄ™h]”hŒstruct dma_resv_iter *cursor”…”�”}”(hjÆ™h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj™ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:157: ./include/linux/dma-resv.h”h´M hj¾™ubjÙ )�”}”(hhh]”hÌ)�”}”(hŒ$the cursor with the current position”h]”hŒ$the cursor with the current position”…”�”}”(hjÝ™h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jÙ™h´M hjÚ™ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hj¾™ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³jÙ™h´M hj»™ubah}”(h]”h ]”h"]”h$]”h&]”uh1j³ hjŸ™ubhÌ)�”}”(hŒ**Description**”h]”jr )�”}”(hjÿ™h]”hŒ Description”…”�”}”(hjšh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hjý™ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:157: ./include/linux/dma-resv.h”h´M hjŸ™ubhÌ)�”}”(hŒGReturn true if this is the first fence in an iteration after a restart.”h]”hŒGReturn true if this is the first fence in an iteration after a restart.”…”�”}”(hjšh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:157: ./include/linux/dma-resv.h”h´M hjŸ™ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jg hj¼bh²hh³Nh´NubjÉ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÕŒ*dma_resv_for_each_fence_unlocked (C macro)”Œ"c.dma_resv_for_each_fence_unlocked”hNt”auh1jÈhj¼bh²hh³Nh´NubjÛ)�”}”(hhh]”(jà)�”}”(hŒ dma_resv_for_each_fence_unlocked”h]”jæ)�”}”(hŒ dma_resv_for_each_fence_unlocked”h]”j )�”}”(hŒ dma_resv_for_each_fence_unlocked”h]”j )�”}”(hj>šh]”hŒ dma_resv_for_each_fence_unlocked”…”�”}”(hjHšh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjDšubah}”(h]”h ]”(j' j( eh"]”h$]”h&]”j÷jøuh1j hj@šh²hh³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:157: ./include/linux/dma-resv.h”h´Mubah}”(h]”h ]”h"]”h$]”h&]”j÷jøj2 ˆuh1jåj3 j4 hj<šh²hh³j[šh´Mubah}”(h]”j7šah ]”(j8 j9 eh"]”h$]”h&]”j= ˆj> )j? huh1jßh³j[šh´Mhj9šh²hubjA )�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1j@ hj9šh²hh³j[šh´Mubeh}”(h]”h ]”(jîŒmacro”eh"]”h$]”h&]”ja jîjb jtšjc jtšjd ‰je ‰jf ‰uh1jÚh²hhj¼bh³Nh´NubhÌ)�”}”(hŒ4``dma_resv_for_each_fence_unlocked (cursor, fence)``”h]”jâ)�”}”(hjzšh]”hŒ0dma_resv_for_each_fence_unlocked (cursor, fence)”…”�”}”(hj|šh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjxšubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:157: ./include/linux/dma-resv.h”h´Mhj¼bh²hubhø)�”}”(hŒunlocked fence iterator ”h]”hÌ)�”}”(hŒunlocked fence iterator”h]”hŒunlocked fence iterator”…”�”}”(hj”šh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:157: ./include/linux/dma-resv.h”h´Mhj�šubah}”(h]”h ]”h"]”h$]”h&]”uh1h÷h³j¢šh´Mhj¼bh²hubjh )�”}”(hXÆ**Parameters** ``cursor`` a struct dma_resv_iter pointer ``fence`` the current fence **Description** Iterate over the fences in a struct dma_resv object without holding the :c:type:`dma_resv.lock ` and using RCU instead. The cursor needs to be initialized with dma_resv_iter_begin() and cleaned up with dma_resv_iter_end(). Inside the iterator a reference to the dma_fence is held and the RCU lock dropped. Beware that the iterator can be restarted when the struct dma_resv for **cursor** is modified. Code which accumulates statistics or similar needs to check for this with dma_resv_iter_is_restarted(). For this reason prefer the lock iterator dma_resv_for_each_fence() whenever possible.”h]”(hÌ)�”}”(hŒ**Parameters**”h]”jr )�”}”(hj¯šh]”hŒ Parameters”…”�”}”(hj±šh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hj­šubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:157: ./include/linux/dma-resv.h”h´Mhj©šubj´ )�”}”(hhh]”(j¹ )�”}”(hŒ*``cursor`` a struct dma_resv_iter pointer ”h]”(j¿ )�”}”(hŒ ``cursor``”h]”jâ)�”}”(hjΚh]”hŒcursor”…”�”}”(hjКh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjÌšubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:157: ./include/linux/dma-resv.h”h´MhjÈšubjÙ )�”}”(hhh]”hÌ)�”}”(hŒa struct dma_resv_iter pointer”h]”hŒa struct dma_resv_iter pointer”…”�”}”(hjçšh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jãšh´Mhjäšubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hjÈšubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³jãšh´MhjÅšubj¹ )�”}”(hŒ``fence`` the current fence ”h]”(j¿ )�”}”(hŒ ``fence``”h]”jâ)�”}”(hj›h]”hŒfence”…”�”}”(hj ›h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj›ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:157: ./include/linux/dma-resv.h”•¼h´Mhj›ubjÙ )�”}”(hhh]”hÌ)�”}”(hŒthe current fence”h]”hŒthe current fence”…”�”}”(hj ›h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j›h´Mhj›ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hj›ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³j›h´MhjÅšubeh}”(h]”h ]”h"]”h$]”h&]”uh1j³ hj©šubhÌ)�”}”(hŒ**Description**”h]”jr )�”}”(hjB›h]”hŒ Description”…”�”}”(hjD›h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hj@›ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:157: ./include/linux/dma-resv.h”h´Mhj©šubhÌ)�”}”(hX;Iterate over the fences in a struct dma_resv object without holding the :c:type:`dma_resv.lock ` and using RCU instead. The cursor needs to be initialized with dma_resv_iter_begin() and cleaned up with dma_resv_iter_end(). Inside the iterator a reference to the dma_fence is held and the RCU lock dropped.”h]”(hŒHIterate over the fences in a struct dma_resv object without holding the ”…”�”}”(hjX›h²hh³Nh´Nubh)�”}”(hŒ":c:type:`dma_resv.lock `”h]”jâ)�”}”(hjb›h]”hŒ dma_resv.lock”…”�”}”(hjd›h²hh³Nh´Nubah}”(h]”h ]”(jíjîŒc-type”eh"]”h$]”h&]”uh1jáhj`›ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”júŒ refdomain”jîŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰j³j·jŒdma_resv”uh1hh³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:157: ./include/linux/dma-resv.h”h´MhjX›ubhŒÑ and using RCU instead. The cursor needs to be initialized with dma_resv_iter_begin() and cleaned up with dma_resv_iter_end(). Inside the iterator a reference to the dma_fence is held and the RCU lock dropped.”…”�”}”(hjX›h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j›h´Mhj©šubhÌ)�”}”(hXBeware that the iterator can be restarted when the struct dma_resv for **cursor** is modified. Code which accumulates statistics or similar needs to check for this with dma_resv_iter_is_restarted(). For this reason prefer the lock iterator dma_resv_for_each_fence() whenever possible.”h]”(hŒGBeware that the iterator can be restarted when the struct dma_resv for ”…”�”}”(hjŠ›h²hh³Nh´Nubjr )�”}”(hŒ **cursor**”h]”hŒcursor”…”�”}”(hj’›h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hjŠ›ubhŒË is modified. Code which accumulates statistics or similar needs to check for this with dma_resv_iter_is_restarted(). For this reason prefer the lock iterator dma_resv_for_each_fence() whenever possible.”…”�”}”(hjŠ›h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:157: ./include/linux/dma-resv.h”h´Mhj©šubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jg hj¼bh²hh³Nh´NubjÉ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÕŒ!dma_resv_for_each_fence (C macro)”Œc.dma_resv_for_each_fence”hNt”auh1jÈhj¼bh²hh³Nh´NubjÛ)�”}”(hhh]”(jà)�”}”(hŒdma_resv_for_each_fence”h]”jæ)�”}”(hŒdma_resv_for_each_fence”h]”j )�”}”(hŒdma_resv_for_each_fence”h]”j )�”}”(hjÅ›h]”hŒdma_resv_for_each_fence”…”�”}”(hjÏ›h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjË›ubah}”(h]”h ]”(j' j( eh"]”h$]”h&]”j÷jøuh1j hjÇ›h²hh³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:157: ./include/linux/dma-resv.h”h´M&ubah}”(h]”h ]”h"]”h$]”h&]”j÷jøj2 ˆuh1jåj3 j4 hjÛh²hh³jâ›h´M&ubah}”(h]”j¾›ah ]”(j8 j9 eh"]”h$]”h&]”j= ˆj> )j? huh1jßh³jâ›h´M&hjÀ›h²hubjA )�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1j@ hjÀ›h²hh³jâ›h´M&ubeh}”(h]”h ]”(jîŒmacro”eh"]”h$]”h&]”ja jîjb jû›jc jû›jd ‰je ‰jf ‰uh1jÚh²hhj¼bh³Nh´NubhÌ)�”}”(hŒ7``dma_resv_for_each_fence (cursor, obj, usage, fence)``”h]”jâ)�”}”(hjœh]”hŒ3dma_resv_for_each_fence (cursor, obj, usage, fence)”…”�”}”(hjœh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjÿ›ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:157: ./include/linux/dma-resv.h”h´M(hj¼bh²hubhø)�”}”(hŒfence iterator ”h]”hÌ)�”}”(hŒfence iterator”h]”hŒfence iterator”…”�”}”(hjœh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:157: ./include/linux/dma-resv.h”h´M&hjœubah}”(h]”h ]”h"]”h$]”h&]”uh1h÷h³j)œh´M&hj¼bh²hubjh )�”}”(hX**Parameters** ``cursor`` a struct dma_resv_iter pointer ``obj`` a dma_resv object pointer ``usage`` controls which fences to return ``fence`` the current fence **Description** Iterate over the fences in a struct dma_resv object while holding the :c:type:`dma_resv.lock `. **all_fences** controls if the shared fences are returned as well. The cursor initialisation is part of the iterator and the fence stays valid as long as the lock is held and so no extra reference to the fence is taken.”h]”(hÌ)�”}”(hŒ**Parameters**”h]”jr )�”}”(hj6œh]”hŒ Parameters”…”�”}”(hj8œh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hj4œubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:157: ./include/linux/dma-resv.h”h´M*hj0œubj´ )�”}”(hhh]”(j¹ )�”}”(hŒ*``cursor`` a struct dma_resv_iter pointer ”h]”(j¿ )�”}”(hŒ ``cursor``”h]”jâ)�”}”(hjUœh]”hŒcursor”…”�”}”(hjWœh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjSœubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:157: ./include/linux/dma-resv.h”h´M'hjOœubjÙ )�”}”(hhh]”hÌ)�”}”(hŒa struct dma_resv_iter pointer”h]”hŒa struct dma_resv_iter pointer”…”�”}”(hjnœh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jjœh´M'hjkœubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hjOœubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³jjœh´M'hjLœubj¹ )�”}”(hŒ"``obj`` a dma_resv object pointer ”h]”(j¿ )�”}”(hŒ``obj``”h]”jâ)�”}”(hjŽœh]”hŒobj”…”�”}”(hj�œh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjŒœubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:157: ./include/linux/dma-resv.h”h´M(hjˆœubjÙ )�”}”(hhh]”hÌ)�”}”(hŒa dma_resv object pointer”h]”hŒa dma_resv object pointer”…”�”}”(hj§œh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j£œh´M(hj¤œubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hjˆœubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³j£œh´M(hjLœubj¹ )�”}”(hŒ*``usage`` controls which fences to return ”h]”(j¿ )�”}”(hŒ ``usage``”h]”jâ)�”}”(hjÇœh]”hŒusage”…”�”}”(hjÉœh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjÅœubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:157: ./include/linux/dma-resv.h”h´M)hjÁœubjÙ )�”}”(hhh]”hÌ)�”}”(hŒcontrols which fences to return”h]”hŒcontrols which fences to return”…”�”}”(hjàœh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jÜœh´M)hjÝœubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hjÁœubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³jÜœh´M)hjLœubj¹ )�”}”(hŒ``fence`` the current fence ”h]”(j¿ )�”}”(hŒ ``fence``”h]”jâ)�”}”(hj�h]”hŒfence”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjþœubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:157: ./include/linux/dma-resv.h”h´M*hjúœubjÙ )�”}”(hhh]”hÌ)�”}”(hŒthe current fence”h]”hŒthe current fence”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j�h´M*hj�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hjúœubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³j�h´M*hjLœubeh}”(h]”h ]”h"]”h$]”h&]”uh1j³ hj0œubhÌ)�”}”(hŒ**Description**”h]”jr )�”}”(hj;�h]”hŒ Description”…”�”}”(hj=�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hj9�ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:157: ./include/linux/dma-resv.h”h´M,hj0œubhÌ)�”}”(hXEIterate over the fences in a struct dma_resv object while holding the :c:type:`dma_resv.lock `. **all_fences** controls if the shared fences are returned as well. The cursor initialisation is part of the iterator and the fence stays valid as long as the lock is held and so no extra reference to the fence is taken.”h]”(hŒFIterate over the fences in a struct dma_resv object while holding the ”…”�”}”(hjQ�h²hh³Nh´Nubh)�”}”(hŒ":c:type:`dma_resv.lock `”h]”jâ)�”}”(hj[�h]”hŒ dma_resv.lock”…”�”}”(hj]�h²hh³Nh´Nubah}”(h]”h ]”(jíjîŒc-type”eh"]”h$]”h&]”uh1jáhjY�ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”júŒ refdomain”jîŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰j³j·jŒdma_resv”uh1hh³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:157: ./include/linux/dma-resv.h”h´M+hjQ�ubhŒ. ”…”�”}”(hjQ�h²hh³Nh´Nubjr )�”}”(hŒ**all_fences**”h]”hŒ all_fences”…”�”}”(hj}�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hjQ�ubhŒÍ controls if the shared fences are returned as well. The cursor initialisation is part of the iterator and the fence stays valid as long as the lock is held and so no extra reference to the fence is taken.”…”�”}”(hjQ�h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jx�h´M+hj0œubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jg hj¼bh²hh³Nh´NubjÉ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÕŒdma_resv_lock (C function)”Œc.dma_resv_lock”hNt”auh1jÈhj¼bh²hh³Nh´NubjÛ)�”}”(hhh]”(jà)�”}”(hŒDint dma_resv_lock (struct dma_resv *obj, struct ww_acquire_ctx *ctx)”h]”jæ)�”}”(hŒCint dma_resv_lock(struct dma_resv *obj, struct ww_acquire_ctx *ctx)”h]”(jM)�”}”(hŒint”h]”hŒint”…”�”}”(hjµ�h²hh³Nh´Nubah}”(h]”h ]”jYah"]”h$]”h&]”uh1jLhj±�h²hh³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:157: ./include/linux/dma-resv.h”h´MAubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÄ�h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj±�h²hh³jÃ�h´MAubj )�”}”(hŒ dma_resv_lock”h]”j )�”}”(hŒ dma_resv_lock”h]”hŒ dma_resv_lock”…”�”}”(hjÖ�h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjÒ�ubah}”(h]”h ]”(j' j( eh"]”h$]”h&]”j÷jøuh1j hj±�h²hh³jÃ�h´MAubjŒ)�”}”(hŒ2(struct dma_resv *obj, struct ww_acquire_ctx *ctx)”h]”(j’)�”}”(hŒstruct dma_resv *obj”h]”(jì)�”}”(hjïh]”hŒstruct”…”�”}”(hjò�h²hh³Nh´Nubah}”(h]”h ]”jøah"]”h$]”h&]”uh1jëhjî�ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÿ�h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjî�ubh)�”}”(hhh]”j )�”}”(hŒdma_resv”h]”hŒdma_resv”…”�”}”(hjžh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj žubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jîŒreftype”jGŒ reftarget”jžŒmodname”NŒ classname”Nj³j¶)�”}”j¹]”jO)�”}”jGjØ�sbŒc.dma_resv_lock”†”asbuh1hhjî�ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj0žh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjî�ubjd)�”}”(hjgh]”hŒ*”…”�”}”(hj>žh²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchjî�ubj )�”}”(hŒobj”h]”hŒobj”…”�”}”(hjKžh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjî�ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj÷jøuh1j‘hjê�ubj’)�”}”(hŒstruct ww_acquire_ctx *ctx”h]”(jì)�”}”(hjïh]”hŒstruct”…”�”}”(hjdžh²hh³Nh´Nubah}”(h]”h ]”jøah"]”h$]”h&]”uh1jëhj`žubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjqžh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj`žubh)�”}”(hhh]”j )�”}”(hŒww_acquire_ctx”h]”hŒww_acquire_ctx”…”�”}”(hj‚žh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjžubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jîŒreftype”jGŒ reftarget”j„žŒmodname”NŒ classname”Nj³j¶)�”}”j¹]”j,žŒc.dma_resv_lock”†”asbuh1hhj`žubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj žh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj`žubjd)�”}”(hjgh]”hŒ*”…”�”}”(hj®žh²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchj`žubj )�”}”(hŒctx”h]”hŒctx”…”�”}”(hj»žh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj`žubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj÷jøuh1j‘hjê�ubeh}”(h]”h ]”h"]”h$]”h&]”j÷jøuh1j‹hj±�h²hh³jÃ�h´MAubeh}”(h]”h ]”h"]”h$]”h&]”j÷jøj2 ˆuh1jåj3 j4 hj­�h²hh³jÃ�h´MAubah}”(h]”j¨�ah ]”(j8 j9 eh"]”h$]”h&]”j= ˆj> )j? huh1jßh³jÃ�h´MAhjª�h²hubjA )�”}”(hhh]”hÌ)�”}”(hŒlock the reservation object”h]”hŒlock the reservation object”…”�”}”(hjåžh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:157: ./include/linux/dma-resv.h”h´MAhjâžh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j@ hjª�h²hh³jÃ�h´MAubeh}”(h]”h ]”(jîŒfunction”eh"]”h$]”h&]”ja jîjb jýžjc jýžjd ‰je ‰jf ‰uh1jÚh²hhj¼bh³Nh´Nubjh )�”}”(hX†**Parameters** ``struct dma_resv *obj`` the reservation object ``struct ww_acquire_ctx *ctx`` the locking context **Description** Locks the reservation object for exclusive access and modification. Note, that the lock is only against other writers, readers will run concurrently with a writer under RCU. The seqlock is used to notify readers if they overlap with a writer. As the reservation object may be locked by multiple parties in an undefined order, a #ww_acquire_ctx is passed to unwind if a cycle is detected. See ww_mutex_lock() and ww_acquire_init(). A reservation object may be locked by itself by passing NULL as **ctx**. When a die situation is indicated by returning -EDEADLK all locks held by **ctx** must be unlocked and then dma_resv_lock_slow() called on **obj**. Unlocked by calling dma_resv_unlock(). See also dma_resv_lock_interruptible() for the interruptible variant.”h]”(hÌ)�”}”(hŒ**Parameters**”h]”jr )�”}”(hjŸh]”hŒ Parameters”…”�”}”(hj Ÿh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hjŸubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:157: ./include/linux/dma-resv.h”h´MEhjŸubj´ )�”}”(hhh]”(j¹ )�”}”(hŒ0``struct dma_resv *obj`` the reservation object ”h]”(j¿ )�”}”(hŒ``struct dma_resv *obj``”h]”jâ)�”}”(hj&Ÿh]”hŒstruct dma_resv *obj”…”�”}”(hj(Ÿh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj$Ÿubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:157: ./include/linux/dma-resv.h”h´MBhj ŸubjÙ )�”}”(hhh]”hÌ)�”}”(hŒthe reservation object”h]”hŒthe reservation object”…”�”}”(hj?Ÿh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j;Ÿh´MBhj<Ÿubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hj Ÿubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³j;Ÿh´MBhjŸubj¹ )�”}”(hŒ3``struct ww_acquire_ctx *ctx`` the locking context ”h]”(j¿ )�”}”(hŒ``struct ww_acquire_ctx *ctx``”h]”jâ)�”}”(hj_Ÿh]”hŒstruct ww_acquire_ctx *ctx”…”�”}”(hjaŸh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj]Ÿubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:157: ./include/linux/dma-resv.h”h´MChjYŸubjÙ )�”}”(hhh]”hÌ)�”}”(hŒthe locking context”h]”hŒthe locking context”…”�”}”(hjxŸh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jtŸh´MChjuŸubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hjYŸubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³jtŸh´MChjŸubeh}”(h]”h ]”h"]”h$]”h&]”uh1j³ hjŸubhÌ)�”}”(hŒ**Description**”h]”jr )�”}”(hjšŸh]”hŒ Description”…”�”}”(hjœŸh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hj˜Ÿubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:157: ./include/linux/dma-resv.h”h´MEhjŸubhÌ)�”}”(hŒòLocks the reservation object for exclusive access and modification. Note, that the lock is only against other writers, readers will run concurrently with a writer under RCU. The seqlock is used to notify readers if they overlap with a writer.”h]”hŒòLocks the reservation object for exclusive access and modification. Note, that the lock is only against other writers, readers will run concurrently with a writer under RCU. The seqlock is used to notify readers if they overlap with a writer.”…”�”}”(hj°Ÿh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:157: ./include/linux/dma-resv.h”h´MDhjŸubhÌ)�”}”(hXAs the reservation object may be locked by multiple parties in an undefined order, a #ww_acquire_ctx is passed to unwind if a cycle is detected. See ww_mutex_lock() and ww_acquire_init(). A reservation object may be locked by itself by passing NULL as **ctx**.”h]”(hŒüAs the reservation object may be locked by multiple parties in an undefined order, a #ww_acquire_ctx is passed to unwind if a cycle is detected. See ww_mutex_lock() and ww_acquire_init(). A reservation object may be locked by itself by passing NULL as ”…”�”}”(hj¿Ÿh²hh³Nh´Nubjr )�”}”(hŒ**ctx**”h]”hŒctx”…”�”}”(hjÇŸh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hj¿ŸubhŒ.”…”�”}”(hj¿Ÿh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:157: ./include/linux/dma-resv.h”h´MIhjŸubhÌ)�”}”(hŒ“When a die situation is indicated by returning -EDEADLK all locks held by **ctx** must be unlocked and then dma_resv_lock_slow() called on **obj**.”h]”(hŒJWhen a die situation is indicated by returning -EDEADLK all locks held by ”…”�”}”(hjàŸh²hh³Nh´Nubjr )�”}”(hŒ**ctx**”h]”hŒctx”…”�”}”(hjèŸh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hjàŸubhŒ: must be unlocked and then dma_resv_lock_slow() called on ”…”�”}”(hjàŸh²hh³Nh´Nubjr )�”}”(hŒ**obj**”h]”hŒobj”…”�”}”(hjúŸh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hjàŸubhŒ.”…”�”}”(hjàŸh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:157: ./include/linux/dma-resv.h”h´MNhjŸubhÌ)�”}”(hŒ&Unlocked by calling dma_resv_unlock().”h]”hŒ&Unlocked by calling dma_resv_unlock().”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:157: ./include/linux/dma-resv.h”h´MQhjŸubhÌ)�”}”(hŒESee also dma_resv_lock_interruptible() for the interruptible variant.”h]”hŒESee also dma_resv_lock_interruptible() for the interruptible variant.”…”�”}”(hj" h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:157: ./include/linux/dma-resv.h”h´MShjŸubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jg hj¼bh²hh³Nh´NubjÉ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÕŒ(dma_resv_lock_interruptible (C function)”Œc.dma_resv_lock_interruptible”hNt”auh1jÈhj¼bh²hh³Nh´NubjÛ)�”}”(hhh]”(jà)�”}”(hŒRint dma_resv_lock_interruptible (struct dma_resv *obj, struct ww_acquire_ctx *ctx)”h]”jæ)�”}”(hŒQint dma_resv_lock_interruptible(struct dma_resv *obj, struct ww_acquire_ctx *ctx)”h]”(jM)�”}”(hŒint”h]”hŒint”…”�”}”(hjQ h²hh³Nh´Nubah}”(h]”h ]”jYah"]”h$]”h&]”uh1jLhjM h²hh³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:157: ./include/linux/dma-resv.h”h´M]ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj` h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjM h²hh³j_ h´M]ubj )�”}”(hŒdma_resv_lock_interruptible”h]”j )�”}”(hŒdma_resv_lock_interruptible”h]”hŒdma_resv_lock_interruptible”…”�”}”(hjr h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjn ubah}”(h]”h ]”(j' j( eh"]”h$]”h&]”j÷jøuh1j hjM h²hh³j_ h´M]ubjŒ)�”}”(hŒ2(struct dma_resv *obj, struct ww_acquire_ctx *ctx)”h]”(j’)�”}”(hŒstruct dma_resv *obj”h]”(jì)�”}”(hjïh]”hŒstruct”…”�”}”(hjŽ h²hh³Nh´Nubah}”(h]”h ]”jøah"]”h$]”h&]”uh1jëhjŠ ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj› h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjŠ ubh)�”}”(hhh]”j )�”}”(hŒdma_resv”h]”hŒdma_resv”…”�”}”(hj¬ h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj© ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jîŒreftype”jGŒ reftarget”j® Œmodname”NŒ classname”Nj³j¶)�”}”j¹]”jO)�”}”jGjt sbŒc.dma_resv_lock_interruptible”†”asbuh1hhjŠ ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÌ h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjŠ ubjd)�”}”(hjgh]”hŒ*”…”�”}”(hjÚ h²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchjŠ ubj )�”}”(hŒobj”h]”hŒobj”…”�”}”(hjç h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjŠ ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj÷jøuh1j‘hj† ubj’)�”}”(hŒstruct ww_acquire_ctx *ctx”h]”(jì)�”}”(hjïh]”hŒstruct”…”�”}”(hj¡h²hh³Nh´Nubah}”(h]”h ]”jøah"]”h$]”h&]”uh1jëhjü ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj ¡h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjü ubh)�”}”(hhh]”j )�”}”(hŒww_acquire_ctx”h]”hŒww_acquire_ctx”…”�”}”(hj¡h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj¡ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jîŒreftype”jGŒ reftarget”j ¡Œmodname”NŒ classname”Nj³j¶)�”}”j¹]”jÈ Œc.dma_resv_lock_interruptible”†”asbuh1hhjü ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj<¡h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjü ubjd)�”}”(hjgh]”hŒ*”…”�”}”(hjJ¡h²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchjü ubj )�”}”(hŒctx”h]”hŒctx”…”�”}”(hjW¡h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjü ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj÷jøuh1j‘hj† ubeh}”(h]”h ]”h"]”h$]”h&]”j÷jøuh1j‹hjM h²hh³j_ h´M]ubeh}”(h]”h ]”h"]”h$]”h&]”j÷jøj2 ˆuh1jåj3 j4 hjI h²hh³j_ h´M]ubah}”(h]”jD ah ]”(j8 j9 eh"]”h$]”h&]”j= ˆj> )j? huh1jßh³j_ h´M]hjF h²hubjA )�”}”(hhh]”hÌ)�”}”(hŒlock the reservation object”h]”hŒlock the reservation object”…”�”}”(hj�¡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:157: ./include/linux/dma-resv.h”h´M]hj~¡h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j@ hjF h²hh³j_ h´M]ubeh}”(h]”h ]”(jîŒfunction”eh"]”h$]”h&]”ja jîjb j™¡jc j™¡jd ‰je ‰jf ‰uh1jÚh²hhj¼bh³Nh´Nubjh )�”}”(hX[**Parameters** ``struct dma_resv *obj`` the reservation object ``struct ww_acquire_ctx *ctx`` the locking context **Description** Locks the reservation object interruptible for exclusive access and modification. Note, that the lock is only against other writers, readers will run concurrently with a writer under RCU. The seqlock is used to notify readers if they overlap with a writer. As the reservation object may be locked by multiple parties in an undefined order, a #ww_acquire_ctx is passed to unwind if a cycle is detected. See ww_mutex_lock() and ww_acquire_init(). A reservation object may be locked by itself by passing NULL as **ctx**. When a die situation is indicated by returning -EDEADLK all locks held by **ctx** must be unlocked and then dma_resv_lock_slow_interruptible() called on **obj**. Unlocked by calling dma_resv_unlock().”h]”(hÌ)�”}”(hŒ**Parameters**”h]”jr )�”}”(hj£¡h]”hŒ Parameters”…”�”}”(hj¥¡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hj¡¡ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:157: ./include/linux/dma-resv.h”h´Mahj�¡ubj´ )�”}”(hhh]”(j¹ )�”}”(hŒ0``struct dma_resv *obj`` the reservation object ”h]”(j¿ )�”}”(hŒ``struct dma_resv *obj``”h]”jâ)�”}”(hj¡h]”hŒstruct dma_resv *obj”…”�”}”(hjÄ¡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjÀ¡ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:157: ./include/linux/dma-resv.h”h´M^hj¼¡ubjÙ )�”}”(hhh]”hÌ)�”}”(hŒthe reservation object”h]”hŒthe reservation object”…”�”}”(hjÛ¡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jסh´M^hjØ¡ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hj¼¡ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³jסh´M^hj¹¡ubj¹ )�”}”(hŒ3``struct ww_acquire_ctx *ctx`` the locking context ”h]”(j¿ )�”}”(hŒ``struct ww_acquire_ctx *ctx``”h]”jâ)�”}”(hjû¡h]”hŒstruct ww_acquire_ctx *ctx”…”�”}”(hjý¡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjù¡ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:157: ./include/linux/dma-resv.h”h´M_hjõ¡ubjÙ )�”}”(hhh]”hÌ)�”}”(hŒthe locking context”h]”hŒthe locking context”…”�”}”(hj¢h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j¢h´M_hj¢ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hjõ¡ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³j¢h´M_hj¹¡ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j³ hj�¡ubhÌ)�”}”(hŒ**Description**”h]”jr )�”}”(hj6¢h]”hŒ Description”…”�”}”(hj8¢h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hj4¢ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:157: ./include/linux/dma-resv.h”h´Mahj�¡ubhÌ)�”}”(hXLocks the reservation object interruptible for exclusive access and modification. Note, that the lock is only against other writers, readers will run concurrently with a writer under RCU. The seqlock is used to notify readers if they overlap with a writer.”h]”hXLocks the reservation object interruptible for exclusive access and modification. Note, that the lock is only against other writers, readers will run concurrently with a writer under RCU. The seqlock is used to notify readers if they overlap with a writer.”…”�”}”(hjL¢h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:157: ./include/linux/dma-resv.h”h´M`hj�¡ubhÌ)�”}”(hXAs the reservation object may be locked by multiple parties in an undefined order, a #ww_acquire_ctx is passed to unwind if a cycle is detected. See ww_mutex_lock() and ww_acquire_init(). A reservation object may be locked by itself by passing NULL as **ctx**.”h]”(hŒüAs the reservation object may be locked by multiple parties in an undefined order, a #ww_acquire_ctx is passed to unwind if a cycle is detected. See ww_mutex_lock() and ww_acquire_init(). A reservation object may be locked by itself by passing NULL as ”…”�”}”(hj[¢h²hh³Nh´Nubjr )�”}”(hŒ**ctx**”h]”hŒctx”…”�”}”(hjc¢h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hj[¢ubhŒ.”…”�”}”(hj[¢h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:157: ./include/linux/dma-resv.h”h´Mehj�¡ubhÌ)�”}”(hŒ¡When a die situation is indicated by returning -EDEADLK all locks held by **ctx** must be unlocked and then dma_resv_lock_slow_interruptible() called on **obj**.”h]”(hŒJWhen a die situation is indicated by returning -EDEADLK all locks held by ”…”�”}”(hj|¢h²hh³Nh´Nubjr )�”}”(hŒ**ctx**”h]”hŒctx”…”�”}”(hj„¢h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hj|¢ubhŒH must be unlocked and then dma_resv_lock_slow_interruptible() called on ”…”�”}”(hj|¢h²hh³Nh´Nubjr )�”}”(hŒ**obj**”h]”hŒobj”…”�”}”(hj–¢h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hj|¢ubhŒ.”…”�”}”(hj|¢h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:157: ./include/linux/dma-resv.h”h´Mjhj�¡ubhÌ)�”}”(hŒ&Unlocked by calling dma_resv_unlock().”h]”hŒ&Unlocked by calling dma_resv_unlock().”…”�”}”(hj¯¢h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:157: ./include/linux/dma-resv.h”h´Mnhj�¡ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jg hj¼bh²hh³Nh´NubjÉ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÕŒdma_resv_lock_slow (C function)”Œc.dma_resv_lock_slow”hNt”auh1jÈhj¼bh²hh³Nh´NubjÛ)�”}”(hhh]”(jà)�”}”(hŒJvoid dma_resv_lock_slow (struct dma_resv *obj, struct ww_acquire_ctx *ctx)”h]”jæ)�”}”(hŒIvoid dma_resv_lock_slow(struct dma_resv *obj, struct ww_acquire_ctx *ctx)”h]”(jM)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjÞ¢h²hh³Nh´Nubah}”(h]”h ]”jYah"]”h$]”h&]”uh1jLhjÚ¢h²hh³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:157: ./include/linux/dma-resv.h”h´Mxubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjí¢h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjÚ¢h²hh³jì¢h´Mxubj )�”}”(hŒdma_resv_lock_slow”h]”j )�”}”(hŒdma_resv_lock_slow”h]”hŒdma_resv_lock_slow”…”�”}”(hjÿ¢h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjû¢ubah}”(h]”h ]”(j' j( eh"]”h$]”h&]”j÷jøuh1j hjÚ¢h²hh³jì¢h´MxubjŒ)�”}”(hŒ2(struct dma_resv *obj, struct ww_acquire_ctx *ctx)”h]”(j’)�”}”(hŒstruct dma_resv *obj”h]”(jì)�”}”(hjïh]”hŒstruct”…”�”}”(hj£h²hh³Nh´Nubah}”(h]”h ]”jøah"]”h$]”h&]”uh1jëhj£ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj(£h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj£ubh)�”}”(hhh]”j )�”}”(hŒdma_resv”h]”hŒdma_resv”…”�”}”(hj9£h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj6£ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jîŒreftype”jGŒ reftarget”j;£Œmodname”NŒ classname”Nj³j¶)�”}”j¹]”jO)�”}”jGj£sbŒc.dma_resv_lock_slow”†”asbuh1hhj£ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjY£h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj£ubjd)�”}”(hjgh]”hŒ*”…”�”}”(hjg£h²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchj£ubj )�”}”(hŒobj”h]”hŒobj”…”�”}”(hjt£h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj£ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj÷jøuh1j‘hj£ubj’)�”}”(hŒstruct ww_acquire_ctx *ctx”h]”(jì)�”}”(hjïh]”hŒstruct”…”�”}”(hj�£h²hh³Nh´Nubah}”(h]”h ]”jøah"]”h$]”h&]”uh1jëhj‰£ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjš£h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj‰£ubh)�”}”(hhh]”j )�”}”(hŒww_acquire_ctx”h]”hŒww_acquire_ctx”…”�”}”(hj«£h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj¨£ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jîŒreftype”jGŒ reftarget”j­£Œmodname”NŒ classname”Nj³j¶)�”}”j¹]”jU£Œc.dma_resv_lock_slow”†”asbuh1hhj‰£ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÉ£h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj‰£ubjd)�”}”(hjgh]”hŒ*”…”�”}”(hj×£h²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchj‰£ubj )�”}”(hŒctx”h]”hŒctx”…”�”}”(hjä£h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj‰£ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj÷jøuh1j‘hj£ubeh}”(h]”h ]”h"]”h$]”h&]”j÷jøuh1j‹hjÚ¢h²hh³jì¢h´Mxubeh}”(h]”h ]”h"]”h$]”h&]”j÷jøj2 ˆuh1jåj3 j4 hjÖ¢h²hh³jì¢h´Mxubah}”(h]”jÑ¢ah ]”(j8 j9 eh"]”h$]”h&]”j= ˆj> )j? huh1jßh³jì¢h´MxhjÓ¢h²hubjA )�”}”(hhh]”hÌ)�”}”(hŒ$slowpath lock the reservation object”h]”hŒ$slowpath lock the reservation object”…”�”}”(hj¤h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:157: ./include/linux/dma-resv.h”h´Mxhj ¤h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j@ hjÓ¢h²hh³jì¢h´Mxubeh}”(h]”h ]”(jîŒfunction”eh"]”h$]”h&]”ja jîjb j&¤jc j&¤jd ‰je ‰jf ‰uh1jÚh²hhj¼bh³Nh´Nubjh )�”}”(hX_**Parameters** ``struct dma_resv *obj`` the reservation object ``struct ww_acquire_ctx *ctx`` the locking context **Description** Acquires the reservation object after a die case. This function will sleep until the lock becomes available. See dma_resv_lock() as well. See also dma_resv_lock_slow_interruptible() for the interruptible variant.”h]”(hÌ)�”}”(hŒ**Parameters**”h]”jr )�”}”(hj0¤h]”hŒ Parameters”…”�”}”(hj2¤h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hj.¤ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:157: ./include/linux/dma-resv.h”h´M|hj*¤ubj´ )�”}”(hhh]”(j¹ )�”}”(hŒ0``struct dma_resv *obj`` the reservation object ”h]”(j¿ )�”}”(hŒ``struct dma_resv *obj``”h]”jâ)�”}”(hjO¤h]”hŒstruct dma_resv *obj”…”�”}”(hjQ¤h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjM¤ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:157: ./include/linux/dma-resv.h”h´MyhjI¤ubjÙ )�”}”(hhh]”hÌ)�”}”(hŒthe reservation object”h]”hŒthe reservation object”…”�”}”(hjh¤h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jd¤h´Myhje¤ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hjI¤ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³jd¤h´MyhjF¤ubj¹ )�”}”(hŒ3``struct ww_acquire_ctx *ctx`` the locking context ”h]”(j¿ )�”}”(hŒ``struct ww_acquire_ctx *ctx``”h]”jâ)�”}”(hjˆ¤h]”hŒstruct ww_acquire_ctx *ctx”…”�”}”(hjФh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj†¤ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:157: ./include/linux/dma-resv.h”h´Mzhj‚¤ubjÙ )�”}”(hhh]”hÌ)�”}”(hŒthe locking context”h]”hŒthe locking context”…”�”}”(hj¡¤h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j�¤h´Mzhjž¤ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hj‚¤ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³j�¤h´MzhjF¤ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j³ hj*¤ubhÌ)�”}”(hŒ**Description**”h]”jr )�”}”(hjäh]”hŒ Description”…”�”}”(hjŤh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hjÁ¤ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:157: ./include/linux/dma-resv.h”h´M|hj*¤ubhÌ)�”}”(hŒ‰Acquires the reservation object after a die case. This function will sleep until the lock becomes available. See dma_resv_lock() as well.”h]”hŒ‰Acquires the reservation object after a die case. This function will sleep until the lock becomes available. See dma_resv_lock() as well.”…”�”}”(hjÙ¤h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:157: ./include/linux/dma-resv.h”h´M{hj*¤ubhÌ)�”}”(hŒJSee also dma_resv_lock_slow_interruptible() for the interruptible variant.”h]”hŒJSee also dma_resv_lock_slow_interruptible() for the interruptible variant.”…”�”}”(hjè¤h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:157: ./include/linux/dma-resv.h”h´Mhj*¤ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jg hj¼bh²hh³Nh´NubjÉ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÕŒ-dma_resv_lock_slow_interruptible (C function)”Œ"c.dma_resv_lock_slow_interruptible”hNt”auh1jÈhj¼bh²hh³Nh´NubjÛ)�”}”(hhh]”(jà)�”}”(hŒWint dma_resv_lock_slow_interruptible (struct dma_resv *obj, struct ww_acquire_ctx *ctx)”h]”jæ)�”}”(hŒVint dma_resv_lock_slow_interruptible(struct dma_resv *obj, struct ww_acquire_ctx *ctx)”h]”(jM)�”}”(hŒint”h]”hŒint”…”�”}”(hj¥h²hh³Nh´Nubah}”(h]”h ]”jYah"]”h$]”h&]”uh1jLhj¥h²hh³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:157: ./include/linux/dma-resv.h”h´M‰ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj&¥h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj¥h²hh³j%¥h´M‰ubj )�”}”(hŒ dma_resv_lock_slow_interruptible”h]”j )�”}”(hŒ dma_resv_lock_slow_interruptible”h]”hŒ dma_resv_lock_slow_interruptible”…”�”}”(hj8¥h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj4¥ubah}”(h]”h ]”(j' j( eh"]”h$]”h&]”j÷jøuh1j hj¥h²hh³j%¥h´M‰ubjŒ)�”}”(hŒ2(struct dma_resv *obj, struct ww_acquire_ctx *ctx)”h]”(j’)�”}”(hŒstruct dma_resv *obj”h]”(jì)�”}”(hjïh]”hŒstruct”…”�”}”(hjT¥h²hh³Nh´Nubah}”(h]”h ]”jøah"]”h$]”h&]”uh1jëhjP¥ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hja¥h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjP¥ubh)�”}”(hhh]”j )�”}”(hŒdma_resv”h]”hŒdma_resv”…”�”}”(hjr¥h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjo¥ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jîŒreftype”jGŒ reftarget”jt¥Œmodname”NŒ classname”Nj³j¶)�”}”j¹]”jO)�”}”jGj:¥sbŒ"c.dma_resv_lock_slow_interruptible”†”asbuh1hhjP¥ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj’¥h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjP¥ubjd)�”}”(hjgh]”hŒ*”…”�”}”(hj ¥h²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchjP¥ubj )�”}”(hŒobj”h]”hŒobj”…”�”}”(hj­¥h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjP¥ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj÷jøuh1j‘hjL¥ubj’)�”}”(hŒstruct ww_acquire_ctx *ctx”h]”(jì)�”}”(hjïh]”hŒstruct”…”�”}”(hjÆ¥h²hh³Nh´Nubah}”(h]”h ]”jøah"]”h$]”h&]”uh1jëhjÂ¥ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÓ¥h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjÂ¥ubh)�”}”(hhh]”j )�”}”(hŒww_acquire_ctx”h]”hŒww_acquire_ctx”…”�”}”(hjä¥h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjá¥ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jîŒreftype”jGŒ reftarget”j楌modname”NŒ classname”Nj³j¶)�”}”j¹]”jŽ¥Œ"c.dma_resv_lock_slow_interruptible”†”asbuh1hhjÂ¥ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¦h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjÂ¥ubjd)�”}”(hjgh]”hŒ*”…”�”}”(hj¦h²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchjÂ¥ubj )�”}”(hŒctx”h]”hŒctx”…”�”}”(hj¦h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjÂ¥ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj÷jøuh1j‘hjL¥ubeh}”(h]”h ]”h"]”h$]”h&]”j÷jøuh1j‹hj¥h²hh³j%¥h´M‰ubeh}”(h]”h ]”h"]”h$]”h&]”j÷jøj2 ˆuh1jåj3 j4 hj¥h²hh³j%¥h´M‰ubah}”(h]”j ¥ah ]”(j8 j9 eh"]”h$]”h&]”j= ˆj> )j? huh1jßh³j%¥h´M‰hj ¥h²hubjA )�”}”(hhh]”hÌ)�”}”(hŒ3slowpath lock the reservation object, interruptible”h]”hŒ3slowpath lock the reservation object, interruptible”…”�”}”(hjG¦h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:157: ./include/linux/dma-resv.h”h´M‰hjD¦h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j@ hj ¥h²hh³j%¥h´M‰ubeh}”(h]”h ]”(jîŒfunction”eh"]”h$]”h&]”ja jîjb j_¦jc j_¦jd ‰je ‰jf ‰uh1jÚh²hhj¼bh³Nh´Nubjh )�”}”(hX/**Parameters** ``struct dma_resv *obj`` the reservation object ``struct ww_acquire_ctx *ctx`` the locking context **Description** Acquires the reservation object interruptible after a die case. This function will sleep until the lock becomes available. See dma_resv_lock_interruptible() as well.”h]”(hÌ)�”}”(hŒ**Parameters**”h]”jr )�”}”(hji¦h]”hŒ Parameters”…”�”}”(hjk¦h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hjg¦ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:157: ./include/linux/dma-resv.h”h´M�hjc¦ubj´ )�”}”(hhh]”(j¹ )�”}”(hŒ0``struct dma_resv *obj`` the reservation object ”h]”(j¿ )�”}”(hŒ``struct dma_resv *obj``”h]”jâ)�”}”(hjˆ¦h]”hŒstruct dma_resv *obj”…”�”}”(hjЦh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj†¦ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:157: ./include/linux/dma-resv.h”h´M‹hj‚¦ubjÙ )�”}”(hhh]”hÌ)�”}”(hŒthe reservation object”h]”hŒthe reservation object”…”�”}”(hj¡¦h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j�¦h´M‹hjž¦ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hj‚¦ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³j�¦h´M‹hj¦ubj¹ )�”}”(hŒ3``struct ww_acquire_ctx *ctx`` the locking context ”h]”(j¿ )�”}”(hŒ``struct ww_acquire_ctx *ctx``”h]”jâ)�”}”(hjÁ¦h]”hŒstruct ww_acquire_ctx *ctx”…”�”}”(hjæh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj¿¦ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:157: ./include/linux/dma-resv.h”h´MŒhj»¦ubjÙ )�”}”(hhh]”hÌ)�”}”(hŒthe locking context”h]”hŒthe locking context”…”�”}”(hjÚ¦h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jÖ¦h´MŒhjצubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hj»¦ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³jÖ¦h´MŒhj¦ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j³ hjc¦ubhÌ)�”}”(hŒ**Description**”h]”jr )�”}”(hjü¦h]”hŒ Description”…”�”}”(hjþ¦h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hjú¦ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:157: ./include/linux/dma-resv.h”h´MŽhjc¦ubhÌ)�”}”(hŒ¥Acquires the reservation object interruptible after a die case. This function will sleep until the lock becomes available. See dma_resv_lock_interruptible() as well.”h]”hŒ¥Acquires the reservation object interruptible after a die case. This function will sleep until the lock becomes available. See dma_resv_lock_interruptible() as well.”…”�”}”(hj§h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:157: ./include/linux/dma-resv.h”h´M�hjc¦ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jg hj¼bh²hh³Nh´NubjÉ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÕŒdma_resv_trylock (C function)”Œc.dma_resv_trylock”hNt”auh1jÈhj¼bh²hh³Nh´NubjÛ)�”}”(hhh]”(jà)�”}”(hŒ,bool dma_resv_trylock (struct dma_resv *obj)”h]”jæ)�”}”(hŒ+bool dma_resv_trylock(struct dma_resv *obj)”h]”(jM)�”}”(hji5h]”hŒbool”…”�”}”(hjA§h²hh³Nh´Nubah}”(h]”h ]”jYah"]”h$]”h&]”uh1jLhj=§h²hh³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:157: ./include/linux/dma-resv.h”h´M™ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjO§h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj=§h²hh³jN§h´M™ubj )�”}”(hŒdma_resv_trylock”h]”j )�”}”(hŒdma_resv_trylock”h]”hŒdma_resv_trylock”…”�”}”(hja§h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj]§ubah}”(h]”h ]”(j' j( eh"]”h$]”h&]”j÷jøuh1j hj=§h²hh³jN§h´M™ubjŒ)�”}”(hŒ(struct dma_resv *obj)”h]”j’)�”}”(hŒstruct dma_resv *obj”h]”(jì)�”}”(hjïh]”hŒstruct”…”�”}”(hj}§h²hh³Nh´Nubah}”(h]”h ]”jøah"]”h$]”h&]”uh1jëhjy§ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjЧh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjy§ubh)�”}”(hhh]”j )�”}”(hŒdma_resv”h]”hŒdma_resv”…”�”}”(hj›§h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj˜§ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jîŒreftype”jGŒ reftarget”j�§Œmodname”NŒ classname”Nj³j¶)�”}”j¹]”jO)�”}”jGjc§sbŒc.dma_resv_trylock”†”asbuh1hhjy§ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj»§h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjy§ubjd)�”}”(hjgh]”hŒ*”…”�”}”(hjɧh²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchjy§ubj )�”}”(hŒobj”h]”hŒobj”…”�”}”(hjÖ§h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjy§ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj÷jøuh1j‘hju§ubah}”(h]”h ]”h"]”h$]”h&]”j÷jøuh1j‹hj=§h²hh³jN§h´M™ubeh}”(h]”h ]”h"]”h$]”h&]”j÷jøj2 ˆuh1jåj3 j4 hj9§h²hh³jN§h´M™ubah}”(h]”j4§ah ]”(j8 j9 eh"]”h$]”h&]”j= ˆj> )j? huh1jßh³jN§h´M™hj6§h²hubjA )�”}”(hhh]”hÌ)�”}”(hŒtrylock the reservation object”h]”hŒtrylock the reservation object”…”�”}”(hj¨h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:157: ./include/linux/dma-resv.h”h´M™hjý§h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j@ hj6§h²hh³jN§h´M™ubeh}”(h]”h ]”(jîŒfunction”eh"]”h$]”h&]”ja jîjb j¨jc j¨jd ‰je ‰jf ‰uh1jÚh²hhj¼bh³Nh´Nubjh )�”}”(hX**Parameters** ``struct dma_resv *obj`` the reservation object **Description** Tries to lock the reservation object for exclusive access and modification. Note, that the lock is only against other writers, readers will run concurrently with a writer under RCU. The seqlock is used to notify readers if they overlap with a writer. Also note that since no context is provided, no deadlock protection is possible, which is also not needed for a trylock. Returns true if the lock was acquired, false otherwise.”h]”(hÌ)�”}”(hŒ**Parameters**”h]”jr )�”}”(hj"¨h]”hŒ Parameters”…”�”}”(hj$¨h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hj ¨ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:157: ./include/linux/dma-resv.h”h´M�hj¨ubj´ )�”}”(hhh]”j¹ )�”}”(hŒ0``struct dma_resv *obj`` the reservation object ”h]”(j¿ )�”}”(hŒ``struct dma_resv *obj``”h]”jâ)�”}”(hjA¨h]”hŒstruct dma_resv *obj”…”�”}”(hjC¨h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj?¨ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:157: ./include/linux/dma-resv.h”h´Mšhj;¨ubjÙ )�”}”(hhh]”hÌ)�”}”(hŒthe reservation object”h]”hŒthe reservation object”…”�”}”(hjZ¨h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jV¨h´MšhjW¨ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hj;¨ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³jV¨h´Mšhj8¨ubah}”(h]”h ]”h"]”h$]”h&]”uh1j³ hj¨ubhÌ)�”}”(hŒ**Description**”h]”jr )�”}”(hj|¨h]”hŒ Description”…”�”}”(hj~¨h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hjz¨ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:157: ./include/linux/dma-resv.h”h´Mœhj¨ubhÌ)�”}”(hŒúTries to lock the reservation object for exclusive access and modification. Note, that the lock is only against other writers, readers will run concurrently with a writer under RCU. The seqlock is used to notify readers if they overlap with a writer.”h]”hŒúTries to lock the reservation object for exclusive access and modification. Note, that the lock is only against other writers, readers will run concurrently with a writer under RCU. The seqlock is used to notify readers if they overlap with a writer.”…”�”}”(hj’¨h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:157: ./include/linux/dma-resv.h”h´M›hj¨ubhÌ)�”}”(hŒxAlso note that since no context is provided, no deadlock protection is possible, which is also not needed for a trylock.”h]”hŒxAlso note that since no context is provided, no deadlock protection is possible, which is also not needed for a trylock.”…”�”}”(hj¡¨h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:157: ./include/linux/dma-resv.h”h´M hj¨ubhÌ)�”}”(hŒ7Returns true if the lock was acquired, false otherwise.”h]”hŒ7Returns true if the lock was acquired, false otherwise.”…”�”}”(hj°¨h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:157: ./include/linux/dma-resv.h”h´M£hj¨ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jg hj¼bh²hh³Nh´NubjÉ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÕŒdma_resv_is_locked (C function)”Œc.dma_resv_is_locked”hNt”auh1jÈhj¼bh²hh³Nh´NubjÛ)�”}”(hhh]”(jà)�”}”(hŒ.bool dma_resv_is_locked (struct dma_resv *obj)”h]”jæ)�”}”(hŒ-bool dma_resv_is_locked(struct dma_resv *obj)”h]”(jM)�”}”(hji5h]”hŒbool”…”�”}”(hjߨh²hh³Nh´Nubah}”(h]”h ]”jYah"]”h$]”h&]”uh1jLhjÛ¨h²hh³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:157: ./include/linux/dma-resv.h”h´M¬ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjí¨h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjÛ¨h²hh³jì¨h´M¬ubj )�”}”(hŒdma_resv_is_locked”h]”j )�”}”(hŒdma_resv_is_locked”h]”hŒdma_resv_is_locked”…”�”}”(hjÿ¨h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjû¨ubah}”(h]”h ]”(j' j( eh"]”h$]”h&]”j÷jøuh1j hjÛ¨h²hh³jì¨h´M¬ubjŒ)�”}”(hŒ(struct dma_resv *obj)”h]”j’)�”}”(hŒstruct dma_resv *obj”h]”(jì)�”}”(hjïh]”hŒstruct”…”�”}”(hj©h²hh³Nh´Nubah}”(h]”h ]”jøah"]”h$]”h&]”uh1jëhj©ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj(©h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj©ubh)�”}”(hhh]”j )�”}”(hŒdma_resv”h]”hŒdma_resv”…”�”}”(hj9©h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj6©ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jîŒreftype”jGŒ reftarget”j;©Œmodname”NŒ classname”Nj³j¶)�”}”j¹]”jO)�”}”jGj©sbŒc.dma_resv_is_locked”†”asbuh1hhj©ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjY©h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj©ubjd)�”}”(hjgh]”hŒ*”…”�”}”(hjg©h²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchj©ubj )�”}”(hŒobj”h]”hŒobj”…”�”}”(hjt©h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj©ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj÷jøuh1j‘hj©ubah}”(h]”h ]”h"]”h$]”h&]”j÷jøuh1j‹hjÛ¨h²hh³jì¨h´M¬ubeh}”(h]”h ]”h"]”h$]”h&]”j÷jøj2 ˆuh1jåj3 j4 hjרh²hh³jì¨h´M¬ubah}”(h]”jÒ¨ah ]”(j8 j9 eh"]”h$]”h&]”j= ˆj> )j? huh1jßh³jì¨h´M¬hjÔ¨h²hubjA )�”}”(hhh]”hÌ)�”}”(hŒ is the reservation object locked”h]”hŒ is the reservation object locked”…”�”}”(hjž©h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:157: ./include/linux/dma-resv.h”h´M¬hj›©h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j@ hjÔ¨h²hh³jì¨h´M¬ubeh}”(h]”h ]”(jîŒfunction”eh"]”h$]”h&]”ja jîjb j¶©jc j¶©jd ‰je ‰jf ‰uh1jÚh²hhj¼bh³Nh´Nubjh )�”}”(hŒ‹**Parameters** ``struct dma_resv *obj`` the reservation object **Description** Returns true if the mutex is locked, false if unlocked.”h]”(hÌ)�”}”(hŒ**Parameters**”h]”jr )�”}”(hjÀ©h]”hŒ Parameters”…”�”}”(hj©h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hj¾©ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:157: ./include/linux/dma-resv.h”h´M°hjº©ubj´ )�”}”(hhh]”j¹ )�”}”(hŒ0``struct dma_resv *obj`` the reservation object ”h]”(j¿ )�”}”(hŒ``struct dma_resv *obj``”h]”jâ)�”}”(hjß©h]”hŒstruct dma_resv *obj”…”�”}”(hjá©h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjÝ©ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:157: ./include/linux/dma-resv.h”h´M­hjÙ©ubjÙ )�”}”(hhh]”hÌ)�”}”(hŒthe reservation object”h]”hŒthe reservation object”…”�”}”(hjø©h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jô©h´M­hjõ©ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hjÙ©ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³jô©h´M­hjÖ©ubah}”(h]”h ]”h"]”h$]”h&]”uh1j³ hjº©ubhÌ)�”}”(hŒ**Description**”h]”jr )�”}”(hjªh]”hŒ Description”…”�”}”(hjªh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hjªubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:157: ./include/linux/dma-resv.h”h´M¯hjº©ubhÌ)�”}”(hŒ7Returns true if the mutex is locked, false if unlocked.”h]”hŒ7Returns true if the mutex is locked, false if unlocked.”…”�”}”(hj0ªh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:157: ./include/linux/dma-resv.h”h´M®hjº©ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jg hj¼bh²hh³Nh´NubjÉ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÕŒ!dma_resv_locking_ctx (C function)”Œc.dma_resv_locking_ctx”hNt”auh1jÈhj¼bh²hh³Nh´NubjÛ)�”}”(hhh]”(jà)�”}”(hŒCstruct ww_acquire_ctx * dma_resv_locking_ctx (struct dma_resv *obj)”h]”jæ)�”}”(hŒAstruct ww_acquire_ctx *dma_resv_locking_ctx(struct dma_resv *obj)”h]”(jì)�”}”(hjïh]”hŒstruct”…”�”}”(hj_ªh²hh³Nh´Nubah}”(h]”h ]”jøah"]”h$]”h&]”uh1jëhj[ªh²hh³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:157: ./include/linux/dma-resv.h”h´M·ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjmªh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj[ªh²hh³jlªh´M·ubh)�”}”(hhh]”j )�”}”(hŒww_acquire_ctx”h]”hŒww_acquire_ctx”…”�”}”(hj~ªh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj{ªubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jîŒreftype”jGŒ reftarget”j€ªŒmodname”NŒ classname”Nj³j¶)�”}”j¹]”jO)�”}”jGŒdma_resv_locking_ctx”sbŒc.dma_resv_locking_ctx”†”asbuh1hhj[ªh²hh³jlªh´M·ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŸªh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj[ªh²hh³jlªh´M·ubjd)�”}”(hjgh]”hŒ*”…”�”}”(hj­ªh²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchj[ªh²hh³jlªh´M·ubj )�”}”(hŒdma_resv_locking_ctx”h]”j )�”}”(hjœªh]”hŒdma_resv_locking_ctx”…”�”}”(hj¾ªh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjºªubah}”(h]”h ]”(j' j( eh"]”h$]”h&]”j÷jøuh1j hj[ªh²hh³jlªh´M·ubjŒ)�”}”(hŒ(struct dma_resv *obj)”h]”j’)�”}”(hŒstruct dma_resv *obj”h]”(jì)�”}”(hjïh]”hŒstruct”…”�”}”(hjÙªh²hh³Nh´Nubah}”(h]”h ]”jøah"]”h$]”h&]”uh1jëhjÕªubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjæªh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjÕªubh)�”}”(hhh]”j )�”}”(hŒdma_resv”h]”hŒdma_resv”…”�”}”(hj÷ªh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjôªubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jîŒreftype”jGŒ reftarget”jùªŒmodname”NŒ classname”Nj³j¶)�”}”j¹]”jšªŒc.dma_resv_locking_ctx”†”asbuh1hhjÕªubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj«h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjÕªubjd)�”}”(hjgh]”hŒ*”…”�”}”(hj#«h²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchjÕªubj )�”}”(hŒobj”h]”hŒobj”…”�”}”(hj0«h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjÕªubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj÷jøuh1j‘hjѪubah}”(h]”h ]”h"]”h$]”h&]”j÷jøuh1j‹hj[ªh²hh³jlªh´M·ubeh}”(h]”h ]”h"]”h$]”h&]”j÷jøj2 ˆuh1jåj3 j4 hjWªh²hh³jlªh´M·ubah}”(h]”jRªah ]”(j8 j9 eh"]”h$]”h&]”j= ˆj> )j? huh1jßh³jlªh´M·hjTªh²hubjA )�”}”(hhh]”hÌ)�”}”(hŒ+returns the context used to lock the object”h]”hŒ+returns the context used to lock the object”…”�”}”(hjZ«h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:157: ./include/linux/dma-resv.h”h´M·hjW«h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j@ hjTªh²hh³jlªh´M·ubeh}”(h]”h ]”(jîŒfunction”eh"]”h$]”h&]”ja jîjb jr«jc jr«jd ‰je ‰jf ‰uh1jÚh²hhj¼bh³Nh´Nubjh )�”}”(hX³**Parameters** ``struct dma_resv *obj`` the reservation object **Description** Returns the context used to lock a reservation object or NULL if no context was used or the object is not locked at all. WARNING: This interface is pretty horrible, but TTM needs it because it doesn't pass the struct ww_acquire_ctx around in some very long callchains. Everyone else just uses it to check whether they're holding a reservation or not.”h]”(hÌ)�”}”(hŒ**Parameters**”h]”jr )�”}”(hj|«h]”hŒ Parameters”…”�”}”(hj~«h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hjz«ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:157: ./include/linux/dma-resv.h”h´M»hjv«ubj´ )�”}”(hhh]”j¹ )�”}”(hŒ0``struct dma_resv *obj`` the reservation object ”h]”(j¿ )�”}”(hŒ``struct dma_resv *obj``”h]”jâ)�”}”(hj›«h]”hŒstruct dma_resv *obj”…”�”}”(hj�«h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj™«ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:157: ./include/linux/dma-resv.h”h´M¸hj•«ubjÙ )�”}”(hhh]”hÌ)�”}”(hŒthe reservation object”h]”hŒthe reservation object”…”�”}”(hj´«h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j°«h´M¸hj±«ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hj•«ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³j°«h´M¸hj’«ubah}”(h]”h ]”h"]”h$]”h&]”uh1j³ hjv«ubhÌ)�”}”(hŒ**Description**”h]”jr )�”}”(hjÖ«h]”hŒ Description”…”�”}”(hjØ«h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hjÔ«ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:157: ./include/linux/dma-resv.h”h´Mºhjv«ubhÌ)�”}”(hŒxReturns the context used to lock a reservation object or NULL if no context was used or the object is not locked at all.”h]”hŒxReturns the context used to lock a reservation object or NULL if no context was used or the object is not locked at all.”…”�”}”(hjì«h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:157: ./include/linux/dma-resv.h”h´M¹hjv«ubhÌ)�”}”(hŒåWARNING: This interface is pretty horrible, but TTM needs it because it doesn't pass the struct ww_acquire_ctx around in some very long callchains. Everyone else just uses it to check whether they're holding a reservation or not.”h]”hŒéWARNING: This interface is pretty horrible, but TTM needs it because it doesn’t pass the struct ww_acquire_ctx around in some very long callchains. Everyone else just uses it to check whether they’re holding a reservation or not.”…”�”}”(hjû«h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:157: ./include/linux/dma-resv.h”h´M¼hjv«ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jg hj¼bh²hh³Nh´NubjÉ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÕŒdma_resv_unlock (C function)”Œc.dma_resv_unlock”hNt”auh1jÈhj¼bh²hh³Nh´NubjÛ)�”}”(hhh]”(jà)�”}”(hŒ+void dma_resv_unlock (struct dma_resv *obj)”h]”jæ)�”}”(hŒ*void dma_resv_unlock(struct dma_resv *obj)”h]”(jM)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj*¬h²hh³Nh´Nubah}”(h]”h ]”jYah"]”h$]”h&]”uh1jLhj&¬h²hh³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:157: ./include/linux/dma-resv.h”h´MÈubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj9¬h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj&¬h²hh³j8¬h´MÈubj )�”}”(hŒdma_resv_unlock”h]”j )�”}”(hŒdma_resv_unlock”h]”hŒdma_resv_unlock”…”�”}”(hjK¬h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjG¬ubah}”(h]”h ]”(j' j( eh"]”h$]”h&]”j÷jøuh1j hj&¬h²hh³j8¬h´MÈubjŒ)�”}”(hŒ(struct dma_resv *obj)”h]”j’)�”}”(hŒstruct dma_resv *obj”h]”(jì)�”}”(hjïh]”hŒstruct”…”�”}”(hjg¬h²hh³Nh´Nubah}”(h]”h ]”jøah"]”h$]”h&]”uh1jëhjc¬ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjt¬h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjc¬ubh)�”}”(hhh]”j )�”}”(hŒdma_resv”h]”hŒdma_resv”…”�”}”(hj…¬h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj‚¬ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jîŒreftype”jGŒ reftarget”j‡¬Œmodname”NŒ classname”Nj³j¶)�”}”j¹]”jO)�”}”jGjM¬sbŒc.dma_resv_unlock”†”asbuh1hhjc¬ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¥¬h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjc¬ubjd)�”}”(hjgh]”hŒ*”…”�”}”(hj³¬h²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchjc¬ubj )�”}”(hŒobj”h]”hŒobj”…”�”}”(hjÀ¬h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjc¬ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj÷jøuh1j‘hj_¬ubah}”(h]”h ]”h"]”h$]”h&]”j÷jøuh1j‹hj&¬h²hh³j8¬h´MÈubeh}”(h]”h ]”h"]”h$]”h&]”j÷jøj2 ˆuh1jåj3 j4 hj"¬h²hh³j8¬h´MÈubah}”(h]”j¬ah ]”(j8 j9 eh"]”h$]”h&]”j= ˆj> )j? huh1jßh³j8¬h´MÈhj¬h²hubjA )�”}”(hhh]”hÌ)�”}”(hŒunlock the reservation object”h]”hŒunlock the reservation object”…”�”}”(hjê¬h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:157: ./include/linux/dma-resv.h”h´MÈhjç¬h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j@ hj¬h²hh³j8¬h´MÈubeh}”(h]”h ]”(jîŒfunction”eh"]”h$]”h&]”ja jîjb j­jc j­jd ‰je ‰jf ‰uh1jÚh²hhj¼bh³Nh´Nubjh )�”}”(hŒŽ**Parameters** ``struct dma_resv *obj`` the reservation object **Description** Unlocks the reservation object following exclusive access.”h]”(hÌ)�”}”(hŒ**Parameters**”h]”jr )�”}”(hj ­h]”hŒ Parameters”…”�”}”(hj­h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hj ­ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:157: ./include/linux/dma-resv.h”h´MÌhj­ubj´ )�”}”(hhh]”j¹ )�”}”(hŒ0``struct dma_resv *obj`` the reservation object ”h]”(j¿ )�”}”(hŒ``struct dma_resv *obj``”h]”jâ)�”}”(hj+­h]”hŒstruct dma_resv *obj”…”�”}”(hj-­h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj)­ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:157: ./include/linux/dma-resv.h”h´MÉhj%­ubjÙ )�”}”(hhh]”hÌ)�”}”(hŒthe reservation object”h]”hŒthe reservation object”…”�”}”(hjD­h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j@­h´MÉhjA­ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hj%­ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³j@­h´MÉhj"­ubah}”(h]”h ]”h"]”h$]”h&]”uh1j³ hj­ubhÌ)�”}”(hŒ**Description**”h]”jr )�”}”(hjf­h]”hŒ Description”…”�”}”(hjh­h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hjd­ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:157: ./include/linux/dma-resv.h”h´MËhj­ubhÌ)�”}”(hŒ:Unlocks the reservation object following exclusive access.”h]”hŒ:Unlocks the reservation object following exclusive access.”…”�”}”(hj|­h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ\/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:157: ./include/linux/dma-resv.h”h´MÊhj­ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jg hj¼bh²hh³Nh´Nubeh}”(h]”Œreservation-objects”ah ]”h"]”Œreservation objects”ah$]”h&]”uh1hµhh·h²hh³hÊh´K•ubh¶)�”}”(hhh]”(h»)�”}”(hŒ DMA Fences”h]”hŒ DMA Fences”…”�”}”(hj�­h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjš­h²hh³hÊh´K¡ubhÌ)�”}”(hŒ×DMA fences, represented by :c:type:`struct dma_fence `, are the kernel internal synchronization primitive for DMA operations like GPU rendering, video encoding/decoding, or displaying buffers on a screen.”h]”(hŒDMA fences, represented by ”…”�”}”(hj«­h²hh³Nh´Nubh)�”}”(hŒ&:c:type:`struct dma_fence `”h]”jâ)�”}”(hjµ­h]”hŒstruct dma_fence”…”�”}”(hj·­h²hh³Nh´Nubah}”(h]”h ]”(jíjîŒc-type”eh"]”h$]”h&]”uh1jáhj³­ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”júŒ refdomain”jîŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰j³j·jŒ dma_fence”uh1hh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:163: ./drivers/dma-buf/dma-fence.c”h´K&hj«­ubhŒ–, are the kernel internal synchronization primitive for DMA operations like GPU rendering, video encoding/decoding, or displaying buffers on a screen.”…”�”}”(hj«­h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jÒ­h´K&hjš­h²hubhÌ)�”}”(hŒÞA fence is initialized using dma_fence_init() and completed using dma_fence_signal(). Fences are associated with a context, allocated through dma_fence_context_alloc(), and all fences on the same context are fully ordered.”h]”hŒÞA fence is initialized using dma_fence_init() and completed using dma_fence_signal(). Fences are associated with a context, allocated through dma_fence_context_alloc(), and all fences on the same context are fully ordered.”…”�”}”(hjÝ­h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:163: ./drivers/dma-buf/dma-fence.c”h´K*hjš­h²hubhÌ)�”}”(hŒƒSince the purposes of fences is to facilitate cross-device and cross-application synchronization, there's multiple ways to use one:”h]”hŒ…Since the purposes of fences is to facilitate cross-device and cross-application synchronization, there’s multiple ways to use one:”…”�”}”(hjì­h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:163: ./drivers/dma-buf/dma-fence.c”h´K/hjš­h²hubhþ)�”}”(hhh]”(j)�”}”(hŒðIndividual fences can be exposed as a :c:type:`sync_file`, accessed as a file descriptor from userspace, created by calling sync_file_create(). This is called explicit fencing, since userspace passes around explicit synchronization points. ”h]”hÌ)�”}”(hŒïIndividual fences can be exposed as a :c:type:`sync_file`, accessed as a file descriptor from userspace, created by calling sync_file_create(). This is called explicit fencing, since userspace passes around explicit synchronization points.”h]”(hŒ&Individual fences can be exposed as a ”…”�”}”(hj®h²hh³Nh´Nubh)�”}”(hŒ:c:type:`sync_file`”h]”jâ)�”}”(hj ®h]”hŒ sync_file”…”�”}”(hj®h²hh³Nh´Nubah}”(h]”h ]”(jíjîŒc-type”eh"]”h$]”h&]”uh1jáhj ®ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”júŒ refdomain”jîŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰j³j·jŒ sync_file”uh1hh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:163: ./drivers/dma-buf/dma-fence.c”h´K2hj®ubhŒ¶, accessed as a file descriptor from userspace, created by calling sync_file_create(). This is called explicit fencing, since userspace passes around explicit synchronization points.”…”�”}”(hj®h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j)®h´K2hjþ­ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjû­ubj)�”}”(hŒÁSome subsystems also have their own explicit fencing primitives, like :c:type:`drm_syncobj`. Compared to :c:type:`sync_file`, a :c:type:`drm_syncobj` allows the underlying fence to be updated. ”h]”hÌ)�”}”(hŒÀSome subsystems also have their own explicit fencing primitives, like :c:type:`drm_syncobj`. Compared to :c:type:`sync_file`, a :c:type:`drm_syncobj` allows the underlying fence to be updated.”•h]”(hŒFSome subsystems also have their own explicit fencing primitives, like ”…”�”}”(hj>®h²hh³Nh´Nubh)�”}”(hŒ:c:type:`drm_syncobj`”h]”jâ)�”}”(hjH®h]”hŒ drm_syncobj”…”�”}”(hjJ®h²hh³Nh´Nubah}”(h]”h ]”(jíjîŒc-type”eh"]”h$]”h&]”uh1jáhjF®ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”júŒ refdomain”jîŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰j³j·jŒ drm_syncobj”uh1hh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:163: ./drivers/dma-buf/dma-fence.c”h´K7hj>®ubhŒ. Compared to ”…”�”}”(hj>®h²hh³Nh´Nubh)�”}”(hŒ:c:type:`sync_file`”h]”jâ)�”}”(hjl®h]”hŒ sync_file”…”�”}”(hjn®h²hh³Nh´Nubah}”(h]”h ]”(jíjîŒc-type”eh"]”h$]”h&]”uh1jáhjj®ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”júŒ refdomain”jîŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰j³j·jŒ sync_file”uh1hh³je®h´K7hj>®ubhŒ, a ”…”�”}”(hj>®h²hh³Nh´Nubh)�”}”(hŒ:c:type:`drm_syncobj`”h]”jâ)�”}”(hj�®h]”hŒ drm_syncobj”…”�”}”(hj‘®h²hh³Nh´Nubah}”(h]”h ]”(jíjîŒc-type”eh"]”h$]”h&]”uh1jáhj�®ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”júŒ refdomain”jîŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰j³j·jŒ drm_syncobj”uh1hh³je®h´K7hj>®ubhŒ+ allows the underlying fence to be updated.”…”�”}”(hj>®h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³je®h´K7hj:®ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjû­ubj)�”}”(hXThen there's also implicit fencing, where the synchronization points are implicitly passed around as part of shared :c:type:`dma_buf` instances. Such implicit fences are stored in :c:type:`struct dma_resv ` through the :c:type:`dma_buf.resv ` pointer. ”h]”hÌ)�”}”(hXThen there's also implicit fencing, where the synchronization points are implicitly passed around as part of shared :c:type:`dma_buf` instances. Such implicit fences are stored in :c:type:`struct dma_resv ` through the :c:type:`dma_buf.resv ` pointer.”h]”(hŒvThen there’s also implicit fencing, where the synchronization points are implicitly passed around as part of shared ”…”�”}”(hjÀ®h²hh³Nh´Nubh)�”}”(hŒ:c:type:`dma_buf`”h]”jâ)�”}”(hjÊ®h]”hŒdma_buf”…”�”}”(hjÌ®h²hh³Nh´Nubah}”(h]”h ]”(jíjîŒc-type”eh"]”h$]”h&]”uh1jáhjÈ®ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”júŒ refdomain”jîŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰j³j·jŒdma_buf”uh1hh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:163: ./drivers/dma-buf/dma-fence.c”h´K;hjÀ®ubhŒ/ instances. Such implicit fences are stored in ”…”�”}”(hjÀ®h²hh³Nh´Nubh)�”}”(hŒ$:c:type:`struct dma_resv `”h]”jâ)�”}”(hjî®h]”hŒstruct dma_resv”…”�”}”(hjð®h²hh³Nh´Nubah}”(h]”h ]”(jíjîŒc-type”eh"]”h$]”h&]”uh1jáhjì®ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”júŒ refdomain”jîŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰j³j·jŒdma_resv”uh1hh³jç®h´K;hjÀ®ubhŒ through the ”…”�”}”(hjÀ®h²hh³Nh´Nubh)�”}”(hŒ :c:type:`dma_buf.resv `”h]”jâ)�”}”(hj¯h]”hŒ dma_buf.resv”…”�”}”(hj¯h²hh³Nh´Nubah}”(h]”h ]”(jíjîŒc-type”eh"]”h$]”h&]”uh1jáhj¯ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”júŒ refdomain”jîŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰j³j·jŒdma_buf”uh1hh³jç®h´K;hjÀ®ubhŒ pointer.”…”�”}”(hjÀ®h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jç®h´K;hj¼®ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjû­ubeh}”(h]”h ]”h"]”h$]”h&]”jRjSuh1hýh³j)®h´K2hjš­h²hubh¶)�”}”(hhh]”(h»)�”}”(hŒDMA Fence Cross-Driver Contract”h]”hŒDMA Fence Cross-Driver Contract”…”�”}”(hjG¯h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjD¯h²hh³hÊh´K§ubhÌ)�”}”(hŒbSince :c:type:`dma_fence` provide a cross driver contract, all drivers must follow the same rules:”h]”(hŒSince ”…”�”}”(hjU¯h²hh³Nh´Nubh)�”}”(hŒ:c:type:`dma_fence`”h]”jâ)�”}”(hj_¯h]”hŒ dma_fence”…”�”}”(hja¯h²hh³Nh´Nubah}”(h]”h ]”(jíjîŒc-type”eh"]”h$]”h&]”uh1jáhj]¯ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”júŒ refdomain”jîŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰j³j·jŒ dma_fence”uh1hh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:169: ./drivers/dma-buf/dma-fence.c”h´KDhjU¯ubhŒI provide a cross driver contract, all drivers must follow the same rules:”…”�”}”(hjU¯h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j|¯h´KDhjD¯h²hubhþ)�”}”(hhh]”(j)�”}”(hX Fences must complete in a reasonable time. Fences which represent kernels and shaders submitted by userspace, which could run forever, must be backed up by timeout and gpu hang recovery code. Minimally that code must prevent further command submission and force complete all in-flight fences, e.g. when the driver or hardware do not support gpu reset, or if the gpu reset failed for some reason. Ideally the driver supports gpu recovery which only affects the offending userspace context, and no other userspace submissions. ”h]”hÌ)�”}”(hX Fences must complete in a reasonable time. Fences which represent kernels and shaders submitted by userspace, which could run forever, must be backed up by timeout and gpu hang recovery code. Minimally that code must prevent further command submission and force complete all in-flight fences, e.g. when the driver or hardware do not support gpu reset, or if the gpu reset failed for some reason. Ideally the driver supports gpu recovery which only affects the offending userspace context, and no other userspace submissions.”h]”hX Fences must complete in a reasonable time. Fences which represent kernels and shaders submitted by userspace, which could run forever, must be backed up by timeout and gpu hang recovery code. Minimally that code must prevent further command submission and force complete all in-flight fences, e.g. when the driver or hardware do not support gpu reset, or if the gpu reset failed for some reason. Ideally the driver supports gpu recovery which only affects the offending userspace context, and no other userspace submissions.”…”�”}”(hjޝh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:169: ./drivers/dma-buf/dma-fence.c”h´KGhjНubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj‡¯ubj)�”}”(hX*Drivers may have different ideas of what completion within a reasonable time means. Some hang recovery code uses a fixed timeout, others a mix between observing forward progress and increasingly strict timeouts. Drivers should not try to second guess timeout handling of fences from other drivers. ”h]”hÌ)�”}”(hX)Drivers may have different ideas of what completion within a reasonable time means. Some hang recovery code uses a fixed timeout, others a mix between observing forward progress and increasingly strict timeouts. Drivers should not try to second guess timeout handling of fences from other drivers.”h]”hX)Drivers may have different ideas of what completion within a reasonable time means. Some hang recovery code uses a fixed timeout, others a mix between observing forward progress and increasingly strict timeouts. Drivers should not try to second guess timeout handling of fences from other drivers.”…”�”}”(hj§¯h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:169: ./drivers/dma-buf/dma-fence.c”h´KPhj£¯ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj‡¯ubj)�”}”(hŒìTo ensure there's no deadlocks of dma_fence_wait() against other locks drivers should annotate all code required to reach dma_fence_signal(), which completes the fences, with dma_fence_begin_signalling() and dma_fence_end_signalling(). ”h]”hÌ)�”}”(hŒëTo ensure there's no deadlocks of dma_fence_wait() against other locks drivers should annotate all code required to reach dma_fence_signal(), which completes the fences, with dma_fence_begin_signalling() and dma_fence_end_signalling().”h]”hŒíTo ensure there’s no deadlocks of dma_fence_wait() against other locks drivers should annotate all code required to reach dma_fence_signal(), which completes the fences, with dma_fence_begin_signalling() and dma_fence_end_signalling().”…”�”}”(hjÀ¯h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:169: ./drivers/dma-buf/dma-fence.c”h´KVhj¼¯ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj‡¯ubj)�”}”(hXDrivers are allowed to call dma_fence_wait() while holding dma_resv_lock(). This means any code required for fence completion cannot acquire a :c:type:`dma_resv` lock. Note that this also pulls in the entire established locking hierarchy around dma_resv_lock() and dma_resv_unlock(). ”h]”hÌ)�”}”(hXDrivers are allowed to call dma_fence_wait() while holding dma_resv_lock(). This means any code required for fence completion cannot acquire a :c:type:`dma_resv` lock. Note that this also pulls in the entire established locking hierarchy around dma_resv_lock() and dma_resv_unlock().”h]”(hŒ�Drivers are allowed to call dma_fence_wait() while holding dma_resv_lock(). This means any code required for fence completion cannot acquire a ”…”�”}”(hjÙ¯h²hh³Nh´Nubh)�”}”(hŒ:c:type:`dma_resv`”h]”jâ)�”}”(hjã¯h]”hŒdma_resv”…”�”}”(hjå¯h²hh³Nh´Nubah}”(h]”h ]”(jíjîŒc-type”eh"]”h$]”h&]”uh1jáhjá¯ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”júŒ refdomain”jîŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰j³j·jŒdma_resv”uh1hh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:169: ./drivers/dma-buf/dma-fence.c”h´K[hjÙ¯ubhŒz lock. Note that this also pulls in the entire established locking hierarchy around dma_resv_lock() and dma_resv_unlock().”…”�”}”(hjÙ¯h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j°h´K[hjÕ¯ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj‡¯ubj)�”}”(hŒ°Drivers are allowed to call dma_fence_wait() from their :c:type:`shrinker` callbacks. This means any code required for fence completion cannot allocate memory with GFP_KERNEL. ”h]”hÌ)�”}”(hŒ¯Drivers are allowed to call dma_fence_wait() from their :c:type:`shrinker` callbacks. This means any code required for fence completion cannot allocate memory with GFP_KERNEL.”h]”(hŒ8Drivers are allowed to call dma_fence_wait() from their ”…”�”}”(hj°h²hh³Nh´Nubh)�”}”(hŒ:c:type:`shrinker`”h]”jâ)�”}”(hj°h]”hŒshrinker”…”�”}”(hj!°h²hh³Nh´Nubah}”(h]”h ]”(jíjîŒc-type”eh"]”h$]”h&]”uh1jáhj°ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”júŒ refdomain”jîŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰j³j·jŒshrinker”uh1hh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:169: ./drivers/dma-buf/dma-fence.c”h´K`hj°ubhŒe callbacks. This means any code required for fence completion cannot allocate memory with GFP_KERNEL.”…”�”}”(hj°h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j<°h´K`hj°ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj‡¯ubj)�”}”(hXDrivers are allowed to call dma_fence_wait() from their :c:type:`mmu_notifier` respectively :c:type:`mmu_interval_notifier` callbacks. This means any code required for fence completion cannot allocate memory with GFP_NOFS or GFP_NOIO. Only GFP_ATOMIC is permissible, which might fail. ”h]”hÌ)�”}”(hXDrivers are allowed to call dma_fence_wait() from their :c:type:`mmu_notifier` respectively :c:type:`mmu_interval_notifier` callbacks. This means any code required for fence completion cannot allocate memory with GFP_NOFS or GFP_NOIO. Only GFP_ATOMIC is permissible, which might fail.”h]”(hŒ8Drivers are allowed to call dma_fence_wait() from their ”…”�”}”(hjQ°h²hh³Nh´Nubh)�”}”(hŒ:c:type:`mmu_notifier`”h]”jâ)�”}”(hj[°h]”hŒ mmu_notifier”…”�”}”(hj]°h²hh³Nh´Nubah}”(h]”h ]”(jíjîŒc-type”eh"]”h$]”h&]”uh1jáhjY°ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”júŒ refdomain”jîŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰j³j·jŒ mmu_notifier”uh1hh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:169: ./drivers/dma-buf/dma-fence.c”h´KdhjQ°ubhŒ respectively ”…”�”}”(hjQ°h²hh³Nh´Nubh)�”}”(hŒ:c:type:`mmu_interval_notifier`”h]”jâ)�”}”(hj°h]”hŒmmu_interval_notifier”…”�”}”(hj�°h²hh³Nh´Nubah}”(h]”h ]”(jíjîŒc-type”eh"]”h$]”h&]”uh1jáhj}°ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”júŒ refdomain”jîŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰j³j·jŒmmu_interval_notifier”uh1hh³jx°h´KdhjQ°ubhŒ¡ callbacks. This means any code required for fence completion cannot allocate memory with GFP_NOFS or GFP_NOIO. Only GFP_ATOMIC is permissible, which might fail.”…”�”}”(hjQ°h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jx°h´KdhjM°ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj‡¯ubeh}”(h]”h ]”h"]”h$]”h&]”jRjguh1hýh³jœ¯h´KGhjD¯h²hubhÌ)�”}”(hX5Note that only GPU drivers have a reasonable excuse for both requiring :c:type:`mmu_interval_notifier` and :c:type:`shrinker` callbacks at the same time as having to track asynchronous compute work using :c:type:`dma_fence`. No driver outside of drivers/gpu should ever call dma_fence_wait() in such contexts.”h]”(hŒGNote that only GPU drivers have a reasonable excuse for both requiring ”…”�”}”(hj²°h²hh³Nh´Nubh)�”}”(hŒ:c:type:`mmu_interval_notifier`”h]”jâ)�”}”(hj¼°h]”hŒmmu_interval_notifier”…”�”}”(hj¾°h²hh³Nh´Nubah}”(h]”h ]”(jíjîŒc-type”eh"]”h$]”h&]”uh1jáhjº°ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”júŒ refdomain”jîŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰j³j·jŒmmu_interval_notifier”uh1hh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:169: ./drivers/dma-buf/dma-fence.c”h´Kihj²°ubhŒ and ”…”�”}”(hj²°h²hh³Nh´Nubh)�”}”(hŒ:c:type:`shrinker`”h]”jâ)�”}”(hjà°h]”hŒshrinker”…”�”}”(hjâ°h²hh³Nh´Nubah}”(h]”h ]”(jíjîŒc-type”eh"]”h$]”h&]”uh1jáhjÞ°ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”júŒ refdomain”jîŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰j³j·jŒshrinker”uh1hh³jÙ°h´Kihj²°ubhŒO callbacks at the same time as having to track asynchronous compute work using ”…”�”}”(hj²°h²hh³Nh´Nubh)�”}”(hŒ:c:type:`dma_fence`”h]”jâ)�”}”(hj±h]”hŒ dma_fence”…”�”}”(hj±h²hh³Nh´Nubah}”(h]”h ]”(jíjîŒc-type”eh"]”h$]”h&]”uh1jáhj±ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”júŒ refdomain”jîŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰j³j·jŒ dma_fence”uh1hh³jÙ°h´Kihj²°ubhŒV. No driver outside of drivers/gpu should ever call dma_fence_wait() in such contexts.”…”�”}”(hj²°h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jÙ°h´KihjD¯h²hubeh}”(h]”Œdma-fence-cross-driver-contract”ah ]”h"]”Œdma fence cross-driver contract”ah$]”h&]”uh1hµhjš­h²hh³hÊh´K§ubh¶)�”}”(hhh]”(h»)�”}”(hŒ DMA Fence Signalling Annotations”h]”hŒ DMA Fence Signalling Annotations”…”�”}”(hj5±h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj2±h²hh³hÊh´K­ubhÌ)�”}”(hŒ‚Proving correctness of all the kernel code around :c:type:`dma_fence` through code review and testing is tricky for a few reasons:”h]”(hŒ2Proving correctness of all the kernel code around ”…”�”}”(hjC±h²hh³Nh´Nubh)�”}”(hŒ:c:type:`dma_fence`”h]”jâ)�”}”(hjM±h]”hŒ dma_fence”…”�”}”(hjO±h²hh³Nh´Nubah}”(h]”h ]”(jíjîŒc-type”eh"]”h$]”h&]”uh1jáhjK±ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”júŒ refdomain”jîŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰j³j·jŒ dma_fence”uh1hh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:175: ./drivers/dma-buf/dma-fence.c”h´K¹hjC±ubhŒ= through code review and testing is tricky for a few reasons:”…”�”}”(hjC±h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jj±h´K¹hj2±h²hubhþ)�”}”(hhh]”(j)�”}”(hX’It is a cross-driver contract, and therefore all drivers must follow the same rules for lock nesting order, calling contexts for various functions and anything else significant for in-kernel interfaces. But it is also impossible to test all drivers in a single machine, hence brute-force N vs. N testing of all combinations is impossible. Even just limiting to the possible combinations is infeasible. ”h]”hÌ)�”}”(hX‘It is a cross-driver contract, and therefore all drivers must follow the same rules for lock nesting order, calling contexts for various functions and anything else significant for in-kernel interfaces. But it is also impossible to test all drivers in a single machine, hence brute-force N vs. N testing of all combinations is impossible. Even just limiting to the possible combinations is infeasible.”h]”hX‘It is a cross-driver contract, and therefore all drivers must follow the same rules for lock nesting order, calling contexts for various functions and anything else significant for in-kernel interfaces. But it is also impossible to test all drivers in a single machine, hence brute-force N vs. N testing of all combinations is impossible. Even just limiting to the possible combinations is infeasible.”…”�”}”(hj|±h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:175: ./drivers/dma-buf/dma-fence.c”h´K¼hjx±ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhju±ubj)�”}”(hXŸThere is an enormous amount of driver code involved. For render drivers there's the tail of command submission, after fences are published, scheduler code, interrupt and workers to process job completion, and timeout, gpu reset and gpu hang recovery code. Plus for integration with core mm with have :c:type:`mmu_notifier`, respectively :c:type:`mmu_interval_notifier`, and :c:type:`shrinker`. For modesetting drivers there's the commit tail functions between when fences for an atomic modeset are published, and when the corresponding vblank completes, including any interrupt processing and related workers. Auditing all that code, across all drivers, is not feasible. ”h]”hÌ)�”}”(hXžThere is an enormous amount of driver code involved. For render drivers there's the tail of command submission, after fences are published, scheduler code, interrupt and workers to process job completion, and timeout, gpu reset and gpu hang recovery code. Plus for integration with core mm with have :c:type:`mmu_notifier`, respectively :c:type:`mmu_interval_notifier`, and :c:type:`shrinker`. For modesetting drivers there's the commit tail functions between when fences for an atomic modeset are published, and when the corresponding vblank completes, including any interrupt processing and related workers. Auditing all that code, across all drivers, is not feasible.”h]”(hX.There is an enormous amount of driver code involved. For render drivers there’s the tail of command submission, after fences are published, scheduler code, interrupt and workers to process job completion, and timeout, gpu reset and gpu hang recovery code. Plus for integration with core mm with have ”…”�”}”(hj•±h²hh³Nh´Nubh)�”}”(hŒ:c:type:`mmu_notifier`”h]”jâ)�”}”(hjŸ±h]”hŒ mmu_notifier”…”�”}”(hj¡±h²hh³Nh´Nubah}”(h]”h ]”(jíjîŒc-type”eh"]”h$]”h&]”uh1jáhj�±ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”júŒ refdomain”jîŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰j³j·jŒ mmu_notifier”uh1hh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:175: ./drivers/dma-buf/dma-fence.c”h´KÃhj•±ubhŒ, respectively ”…”�”}”(hj•±h²hh³Nh´Nubh)�”}”(hŒ:c:type:`mmu_interval_notifier`”h]”jâ)�”}”(hjñh]”hŒmmu_interval_notifier”…”�”}”(hjűh²hh³Nh´Nubah}”(h]”h ]”(jíjîŒc-type”eh"]”h$]”h&]”uh1jáhjÁ±ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”júŒ refdomain”jîŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰j³j·jŒmmu_interval_notifier”uh1hh³j¼±h´KÃhj•±ubhŒ, and ”…”�”}”(hj•±h²hh³Nh´Nubh)�”}”(hŒ:c:type:`shrinker`”h]”jâ)�”}”(hjæ±h]”hŒshrinker”…”�”}”(hjè±h²hh³Nh´Nubah}”(h]”h ]”(jíjîŒc-type”eh"]”h$]”h&]”uh1jáhjä±ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”júŒ refdomain”jîŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰j³j·jŒshrinker”uh1hh³j¼±h´KÃhj•±ubhX. For modesetting drivers there’s the commit tail functions between when fences for an atomic modeset are published, and when the corresponding vblank completes, including any interrupt processing and related workers. Auditing all that code, across all drivers, is not feasible.”…”�”}”(hj•±h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j¼±h´KÃhj‘±ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhju±ubj)�”}”(hXºDue to how many other subsystems are involved and the locking hierarchies this pulls in there is extremely thin wiggle-room for driver-specific differences. :c:type:`dma_fence` interacts with almost all of the core memory handling through page fault handlers via :c:type:`dma_resv`, dma_resv_lock() and dma_resv_unlock(). On the other side it also interacts through all allocation sites through :c:type:`mmu_notifier` and :c:type:`shrinker`. ”h]”hÌ)�”}”(hX¹Due to how many other subsystems are involved and the locking hierarchies this pulls in there is extremely thin wiggle-room for driver-specific differences. :c:type:`dma_fence` interacts with almost all of the core memory handling through page fault handlers via :c:type:`dma_resv`, dma_resv_lock() and dma_resv_unlock(). On the other side it also interacts through all allocation sites through :c:type:`mmu_notifier` and :c:type:`shrinker`.”h]”(hŒ�Due to how many other subsystems are involved and the locking hierarchies this pulls in there is extremely thin wiggle-room for driver-specific differences. ”…”�”}”(hj²h²hh³Nh´Nubh)�”}”(hŒ:c:type:`dma_fence`”h]”jâ)�”}”(hj!²h]”hŒ dma_fence”…”�”}”(hj#²h²hh³Nh´Nubah}”(h]”h ]”(jíjîŒc-type”eh"]”h$]”h&]”uh1jáhj²ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”júŒ refdomain”jîŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰j³j·jŒ dma_fence”uh1hh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:175: ./drivers/dma-buf/dma-fence.c”h´KÎhj²ubhŒW interacts with almost all of the core memory handling through page fault handlers via ”…”�”}”(hj²h²hh³Nh´Nubh)�”}”(hŒ:c:type:`dma_resv`”h]”jâ)�”}”(hjE²h]”hŒdma_resv”…”�”}”(hjG²h²hh³Nh´Nubah}”(h]”h ]”(jíjîŒc-type”eh"]”h$]”h&]”uh1jáhjC²ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”júŒ refdomain”jîŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰j³j·jŒdma_resv”uh1hh³j>²h´KÎhj²ubhŒr, dma_resv_lock() and dma_resv_unlock(). On the other side it also interacts through all allocation sites through ”…”�”}”(hj²h²hh³Nh´Nubh)�”}”(hŒ:c:type:`mmu_notifier`”h]”jâ)�”}”(hjh²h]”hŒ mmu_notifier”…”�”}”(hjj²h²hh³Nh´Nubah}”(h]”h ]”(jíjîŒc-type”eh"]”h$]”h&]”uh1jáhjf²ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”júŒ refdomain”jîŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰j³j·jŒ mmu_notifier”uh1hh³j>²h´KÎhj²ubhŒ and ”…”�”}”(hj²h²hh³Nh´Nubh)�”}”(hŒ:c:type:`shrinker`”h]”jâ)�”}”(hj‹²h]”hŒshrinker”…”�”}”(hj�²h²hh³Nh´Nubah}”(h]”h ]”(jíjîŒc-type”eh"]”h$]”h&]”uh1jáhj‰²ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”júŒ refdomain”jîŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰j³j·jŒshrinker”uh1hh³j>²h´KÎhj²ubhŒ.”…”�”}”(hj²h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j>²h´KÎhj²ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhju±ubeh}”(h]”h ]”h"]”h$]”h&]”jRjguh1hýh³jбh´K¼hj2±h²hubhÌ)�”}”(hXFurthermore lockdep does not handle cross-release dependencies, which means any deadlocks between dma_fence_wait() and dma_fence_signal() can't be caught at runtime with some quick testing. The simplest example is one thread waiting on a :c:type:`dma_fence` while holding a lock::”h]”(hŒðFurthermore lockdep does not handle cross-release dependencies, which means any deadlocks between dma_fence_wait() and dma_fence_signal() can’t be caught at runtime with some quick testing. The simplest example is one thread waiting on a ”…”�”}”(hj¾²h²hh³Nh´Nubh)�”}”(hŒ:c:type:`dma_fence`”h]”jâ)�”}”(hjȲh]”hŒ dma_fence”…”�”}”(hjʲh²hh³Nh´Nubah}”(h]”h ]”(jíjîŒc-type”eh"]”h$]”h&]”uh1jáhjƲubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”júŒ refdomain”jîŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰j³j·jŒ dma_fence”uh1hh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:175: ./drivers/dma-buf/dma-fence.c”h´KÕhj¾²ubhŒ while holding a lock:”…”�”}”(hj¾²h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jå²h´KÕhj2±h²hubjè)�”}”(hŒ&lock(A); dma_fence_wait(B); unlock(A);”h]”hŒ&lock(A); dma_fence_wait(B); unlock(A);”…”�”}”hjð²sbah}”(h]”h ]”h"]”h$]”h&]”j÷jøuh1jçh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:175: ./drivers/dma-buf/dma-fence.c”h´KÚhj2±h²hubhÌ)�”}”(hŒ–while the other thread is stuck trying to acquire the same lock, which prevents it from signalling the fence the previous thread is stuck waiting on::”h]”hŒ•while the other thread is stuck trying to acquire the same lock, which prevents it from signalling the fence the previous thread is stuck waiting on:”…”�”}”(hjÿ²h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:175: ./drivers/dma-buf/dma-fence.c”h´KÞhj2±h²hubjè)�”}”(hŒ(lock(A); unlock(A); dma_fence_signal(B);”h]”hŒ(lock(A); unlock(A); dma_fence_signal(B);”…”�”}”hj³sbah}”(h]”h ]”h"]”h$]”h&]”j÷jøuh1jçh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:175: ./drivers/dma-buf/dma-fence.c”h´Kâhj2±h²hubhÌ)�”}”(hŒÜBy manually annotating all code relevant to signalling a :c:type:`dma_fence` we can teach lockdep about these dependencies, which also helps with the validation headache since now lockdep can check all the rules for us::”h]”(hŒ9By manually annotating all code relevant to signalling a ”…”�”}”(hj³h²hh³Nh´Nubh)�”}”(hŒ:c:type:`dma_fence`”h]”jâ)�”}”(hj'³h]”hŒ dma_fence”…”�”}”(hj)³h²hh³Nh´Nubah}”(h]”h ]”(jíjîŒc-type”eh"]”h$]”h&]”uh1jáhj%³ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”júŒ refdomain”jîŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰j³j·jŒ dma_fence”uh1hh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:175: ./drivers/dma-buf/dma-fence.c”h´Kæhj³ubhŒ� we can teach lockdep about these dependencies, which also helps with the validation headache since now lockdep can check all the rules for us:”…”�”}”(hj³h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jD³h´Kæhj2±h²hubjè)�”}”(hŒqcookie = dma_fence_begin_signalling(); lock(A); unlock(A); dma_fence_signal(B); dma_fence_end_signalling(cookie);”h]”hŒqcookie = dma_fence_begin_signalling(); lock(A); unlock(A); dma_fence_signal(B); dma_fence_end_signalling(cookie);”…”�”}”hjO³sbah}”(h]”h ]”h"]”h$]”h&]”j÷jøuh1jçh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:175: ./drivers/dma-buf/dma-fence.c”h´Kêhj2±h²hubhÌ)�”}”(hŒŒFor using dma_fence_begin_signalling() and dma_fence_end_signalling() to annotate critical sections the following rules need to be observed:”h]”hŒŒFor using dma_fence_begin_signalling() and dma_fence_end_signalling() to annotate critical sections the following rules need to be observed:”…”�”}”(hj^³h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:175: ./drivers/dma-buf/dma-fence.c”h´Kðhj2±h²hubhþ)�”}”(hhh]”(j)�”}”(hXgAll code necessary to complete a :c:type:`dma_fence` must be annotated, from the point where a fence is accessible to other threads, to the point where dma_fence_signal() is called. Un-annotated code can contain deadlock issues, and due to the very strict rules and many corner cases it is infeasible to catch these just with review or normal stress testing. ”h]”hÌ)�”}”(hXfAll code necessary to complete a :c:type:`dma_fence` must be annotated, from the point where a fence is accessible to other threads, to the point where dma_fence_signal() is called. Un-annotated code can contain deadlock issues, and due to the very strict rules and many corner cases it is infeasible to catch these just with review or normal stress testing.”h]”(hŒ!All code necessary to complete a ”…”�”}”(hjt³h²hh³Nh´Nubh)�”}”(hŒ:c:type:`dma_fence`”h]”jâ)�”}”(hj~³h]”hŒ dma_fence”…”�”}”(hj€³h²hh³Nh´Nubah}”(h]”h ]”(jíjîŒc-type”eh"]”h$]”h&]”uh1jáhj|³ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”júŒ refdomain”jîŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰j³j·jŒ dma_fence”uh1hh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:175: ./drivers/dma-buf/dma-fence.c”h´Kóhjt³ubhX2 must be annotated, from the point where a fence is accessible to other threads, to the point where dma_fence_signal() is called. Un-annotated code can contain deadlock issues, and due to the very strict rules and many corner cases it is infeasible to catch these just with review or normal stress testing.”…”�”}”(hjt³h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j›³h´Kóhjp³ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjm³ubj)�”}”(hŒï:c:type:`struct dma_resv ` deserves a special note, since the readers are only protected by rcu. This means the signalling critical section starts as soon as the new fences are installed, even before dma_resv_unlock() is called. ”h]”hÌ)�”}”(hŒî:c:type:`struct dma_resv ` deserves a special note, since the readers are only protected by rcu. This means the signalling critical section starts as soon as the new fences are installed, even before dma_resv_unlock() is called.”h]”(h)�”}”(hŒ$:c:type:`struct dma_resv `”h]”jâ)�”}”(hj¶³h]”hŒstruct dma_resv”…”�”}”(hj¸³h²hh³Nh´Nubah}”(h]”h ]”(jíjîŒc-type”eh"]”h$]”h&]”uh1jáhj´³ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”júŒ refdomain”jîŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰j³j·jŒdma_resv”uh1hh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:175: ./drivers/dma-buf/dma-fence.c”h´Kùhj°³ubhŒÊ deserves a special note, since the readers are only protected by rcu. This means the signalling critical section starts as soon as the new fences are installed, even before dma_resv_unlock() is called.”…”�”}”(hj°³h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jÓ³h´Kùhj¬³ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjm³ubj)�”}”(hXqThe only exception are fast paths and opportunistic signalling code, which calls dma_fence_signal() purely as an optimization, but is not required to guarantee completion of a :c:type:`dma_fence`. The usual example is a wait IOCTL which calls dma_fence_signal(), while the mandatory completion path goes through a hardware interrupt and possible job completion worker. ”h]”hÌ)�”}”(hXpThe only exception are fast paths and opportunistic signalling code, which calls dma_fence_signal() purely as an optimization, but is not required to guarantee completion of a :c:type:`dma_fence`. The usual example is a wait IOCTL which calls dma_fence_signal(), while the mandatory completion path goes through a hardware interrupt and possible job completion worker.”h]”(hŒ°The only exception are fast paths and opportunistic signalling code, which calls dma_fence_signal() purely as an optimization, but is not required to guarantee completion of a ”…”�”}”(hjè³h²hh³Nh´Nubh)�”}”(hŒ:c:type:`dma_fence`”h]”jâ)�”}”(hjò³h]”hŒ dma_fence”…”�”}”(hjô³h²hh³Nh´Nubah}”(h]”h ]”(jíjîŒc-type”eh"]”h$]”h&]”uh1jáhjð³ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”júŒ refdomain”jîŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰j³j·jŒ dma_fence”uh1hh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:175: ./drivers/dma-buf/dma-fence.c”h´Kýhjè³ubhŒ­. The usual example is a wait IOCTL which calls dma_fence_signal(), while the mandatory completion path goes through a hardware interrupt and possible job completion worker.”…”�”}”(hjè³h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j´h´Kýhjä³ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjm³ubj)�”}”(hXMTo aid composability of code, the annotations can be freely nested, as long as the overall locking hierarchy is consistent. The annotations also work both in interrupt and process context. Due to implementation details this requires that callers pass an opaque cookie from dma_fence_begin_signalling() to dma_fence_end_signalling(). ”h]”hÌ)�”}”(hXLTo aid composability of code, the annotations can be freely nested, as long as the overall locking hierarchy is consistent. The annotations also work both in interrupt and process context. Due to implementation details this requires that callers pass an opaque cookie from dma_fence_begin_signalling() to dma_fence_end_signalling().”h]”hXLTo aid composability of code, the annotations can be freely nested, as long as the overall locking hierarchy is consistent. The annotations also work both in interrupt and process context. Due to implementation details this requires that callers pass an opaque cookie from dma_fence_begin_signalling() to dma_fence_end_signalling().”…”�”}”(hj$´h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:175: ./drivers/dma-buf/dma-fence.c”h´Mhj ´ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjm³ubj)�”}”(hX'Validation against the cross driver contract is implemented by priming lockdep with the relevant hierarchy at boot-up. This means even just testing with a single device is enough to validate a driver, at least as far as deadlocks with dma_fence_wait() against dma_fence_signal() are concerned. ”h]”hÌ)�”}”(hX%Validation against the cross driver contract is implemented by priming lockdep with the relevant hierarchy at boot-up. This means even just testing with a single device is enough to validate a driver, at least as far as deadlocks with dma_fence_wait() against dma_fence_signal() are concerned.”h]”hX%Validation against the cross driver contract is implemented by priming lockdep with the relevant hierarchy at boot-up. This means even just testing with a single device is enough to validate a driver, at least as far as deadlocks with dma_fence_wait() against dma_fence_signal() are concerned.”…”�”}”(hj=´h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:175: ./drivers/dma-buf/dma-fence.c”h´M hj9´ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjm³ubeh}”(h]”h ]”h"]”h$]”h&]”jRjguh1hýh³j›³h´Kóhj2±h²hubeh}”(h]”Œ dma-fence-signalling-annotations”ah ]”h"]”Œ dma fence signalling annotations”ah$]”h&]”uh1hµhjš­h²hh³hÊh´K­ubh¶)�”}”(hhh]”(h»)�”}”(hŒDMA Fence Deadline Hints”h]”hŒDMA Fence Deadline Hints”…”�”}”(hjc´h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj`´h²hh³hÊh´K³ubhÌ)�”}”(hX`In an ideal world, it would be possible to pipeline a workload sufficiently that a utilization based device frequency governor could arrive at a minimum frequency that meets the requirements of the use-case, in order to minimize power consumption. But in the real world there are many workloads which defy this ideal. For example, but not limited to:”h]”hX`In an ideal world, it would be possible to pipeline a workload sufficiently that a utilization based device frequency governor could arrive at a minimum frequency that meets the requirements of the use-case, in order to minimize power consumption. But in the real world there are many workloads which defy this ideal. For example, but not limited to:”…”�”}”(hjq´h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:181: ./drivers/dma-buf/dma-fence.c”h´MÈhj`´h²hubhþ)�”}”(hhh]”(j)�”}”(hŒõWorkloads that ping-pong between device and CPU, with alternating periods of CPU waiting for device, and device waiting on CPU. This can result in devfreq and cpufreq seeing idle time in their respective domains and in result reduce frequency. ”h]”hÌ)�”}”(hŒôWorkloads that ping-pong between device and CPU, with alternating periods of CPU waiting for device, and device waiting on CPU. This can result in devfreq and cpufreq seeing idle time in their respective domains and in result reduce frequency.”h]”hŒôWorkloads that ping-pong between device and CPU, with alternating periods of CPU waiting for device, and device waiting on CPU. This can result in devfreq and cpufreq seeing idle time in their respective domains and in result reduce frequency.”…”�”}”(hj‡´h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:181: ./drivers/dma-buf/dma-fence.c”h´MÎhjƒ´ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj€´ubj)�”}”(hX}Workloads that interact with a periodic time based deadline, such as double buffered GPU rendering vs vblank sync'd page flipping. In this scenario, missing a vblank deadline results in an *increase* in idle time on the GPU (since it has to wait an additional vblank period), sending a signal to the GPU's devfreq to reduce frequency, when in fact the opposite is what is needed. ”h]”hÌ)�”}”(hX|Workloads that interact with a periodic time based deadline, such as double buffered GPU rendering vs vblank sync'd page flipping. In this scenario, missing a vblank deadline results in an *increase* in idle time on the GPU (since it has to wait an additional vblank period), sending a signal to the GPU's devfreq to reduce frequency, when in fact the opposite is what is needed.”h]”(hŒÀWorkloads that interact with a periodic time based deadline, such as double buffered GPU rendering vs vblank sync’d page flipping. In this scenario, missing a vblank deadline results in an ”…”�”}”(hj ´h²hh³Nh´Nubj ‹)�”}”(hŒ *increase*”h]”hŒincrease”…”�”}”(hj¨´h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j ‹hj ´ubhŒ¶ in idle time on the GPU (since it has to wait an additional vblank period), sending a signal to the GPU’s devfreq to reduce frequency, when in fact the opposite is what is needed.”…”�”}”(hj ´h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:181: ./drivers/dma-buf/dma-fence.c”h´MÓhjœ´ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj€´ubeh}”(h]”h ]”h"]”h$]”h&]”jRjguh1hýh³j•´h´MÎhj`´h²hubhÌ)�”}”(hX>To this end, deadline hint(s) can be set on a :c:type:`dma_fence` via :c:type:`dma_fence_set_deadline` (or indirectly via userspace facing ioctls like :c:type:`sync_set_deadline`). The deadline hint provides a way for the waiting driver, or userspace, to convey an appropriate sense of urgency to the signaling driver.”h]”(hŒ.To this end, deadline hint(s) can be set on a ”…”�”}”(hjÍ´h²hh³Nh´Nubh)�”}”(hŒ:c:type:`dma_fence`”h]”jâ)�”}”(hj×´h]”hŒ dma_fence”…”�”}”(hjÙ´h²hh³Nh´Nubah}”(h]”h ]”(jíjîŒc-type”eh"]”h$]”h&]”uh1jáhjÕ´ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”júŒ refdomain”jîŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰j³j·jŒ dma_fence”uh1hh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:181: ./drivers/dma-buf/dma-fence.c”h´MÚhjÍ´ubhŒ via ”…”�”}”(hjÍ´h²hh³Nh´Nubh)�”}”(hŒ :c:type:`dma_fence_set_deadline`”h]”jâ)�”}”(hjû´h]”hŒdma_fence_set_deadline”…”�”}”(hjý´h²hh³Nh´Nubah}”(h]”h ]”(jíjîŒc-type”eh"]”h$]”h&]”uh1jáhjù´ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”júŒ refdomain”jîŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰j³j·jŒdma_fence_set_deadline”uh1hh³jô´h´MÚhjÍ´ubhŒ1 (or indirectly via userspace facing ioctls like ”…”�”}”(hjÍ´h²hh³Nh´Nubh)�”}”(hŒ:c:type:`sync_set_deadline`”h]”jâ)�”}”(hjµh]”hŒsync_set_deadline”…”�”}”(hj µh²hh³Nh´Nubah}”(h]”h ]”(jíjîŒc-type”eh"]”h$]”h&]”uh1jáhjµubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”júŒ refdomain”jîŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰j³j·jŒsync_set_deadline”uh1hh³jô´h´MÚhjÍ´ubhŒŒ). The deadline hint provides a way for the waiting driver, or userspace, to convey an appropriate sense of urgency to the signaling driver.”…”�”}”(hjÍ´h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jô´h´MÚhj`´h²hubhÌ)�”}”(hXrA deadline hint is given in absolute ktime (CLOCK_MONOTONIC for userspace facing APIs). The time could either be some point in the future (such as the vblank based deadline for page-flipping, or the start of a compositor's composition cycle), or the current time to indicate an immediate deadline hint (Ie. forward progress cannot be made until this fence is signaled).”h]”hXtA deadline hint is given in absolute ktime (CLOCK_MONOTONIC for userspace facing APIs). The time could either be some point in the future (such as the vblank based deadline for page-flipping, or the start of a compositor’s composition cycle), or the current time to indicate an immediate deadline hint (Ie. forward progress cannot be made until this fence is signaled).”…”�”}”(hjEµh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:181: ./drivers/dma-buf/dma-fence.c”h´Mßhj`´h²hubhÌ)�”}”(hŒ’Multiple deadlines may be set on a given fence, even in parallel. See the documentation for :c:type:`dma_fence_ops.set_deadline `.”h]”(hŒ]Multiple deadlines may be set on a given fence, even in parallel. See the documentation for ”…”�”}”(hjTµh²hh³Nh´Nubh)�”}”(hŒ4:c:type:`dma_fence_ops.set_deadline `”h]”jâ)�”}”(hj^µh]”hŒdma_fence_ops.set_deadline”…”�”}”(hj`µh²hh³Nh´Nubah}”(h]”h ]”(jíjîŒc-type”eh"]”h$]”h&]”uh1jáhj\µubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”júŒ refdomain”jîŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰j³j·jŒ dma_fence_ops”uh1hh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:181: ./drivers/dma-buf/dma-fence.c”h´MåhjTµubhŒ.”…”�”}”(hjTµh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j{µh´Måhj`´h²hubhÌ)�”}”(hŒ°The deadline hint is just that, a hint. The driver that created the fence may react by increasing frequency, making different scheduling choices, etc. Or doing nothing at all.”h]”hŒ°The deadline hint is just that, a hint. The driver that created the fence may react by increasing frequency, making different scheduling choices, etc. Or doing nothing at all.”…”�”}”(hj†µh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:181: ./drivers/dma-buf/dma-fence.c”h´Mèhj`´h²hubeh}”(h]”Œdma-fence-deadline-hints”ah ]”h"]”Œdma fence deadline hints”ah$]”h&]”uh1hµhjš­h²hh³hÊh´K³ubh¶)�”}”(hhh]”(h»)�”}”(hŒDMA Fences Functions Reference”h]”hŒDMA Fences Functions Reference”…”�”}”(hj µh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj�µh²hh³hÊh´K¹ubjÉ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÕŒdma_fence_get_stub (C function)”Œc.dma_fence_get_stub”hNt”auh1jÈhj�µh²hh³Nh´NubjÛ)�”}”(hhh]”(jà)�”}”(hŒ,struct dma_fence * dma_fence_get_stub (void)”h]”jæ)�”}”(hŒ*struct dma_fence *dma_fence_get_stub(void)”h]”(jì)�”}”(hjïh]”hŒstruct”…”�”}”(hjǵh²hh³Nh´Nubah}”(h]”h ]”jøah"]”h$]”h&]”uh1jëhjõh²hh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´K†ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÕµh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjõh²hh³jÔµh´K†ubh)�”}”(hhh]”j )�”}”(hŒ dma_fence”h]”hŒ dma_fence”…”�”}”(hjæµh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjãµubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jîŒreftype”jGŒ reftarget”j赌modname”NŒ classname”Nj³j¶)�”}”j¹]”jO)�”}”jGŒdma_fence_get_stub”sbŒc.dma_fence_get_stub”†”asbuh1hhjõh²hh³jÔµh´K†ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¶h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjõh²hh³jÔµh´K†ubjd)�”}”(hjgh]”hŒ*”…”�”}”(hj¶h²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchjõh²hh³jÔµh´K†ubj )�”}”(hŒdma_fence_get_stub”h]”j )�”}”(hj¶h]”hŒdma_fence_get_stub”…”�”}”(hj&¶h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj"¶ubah}”(h]”h ]”(j' j( eh"]”h$]”h&]”j÷jøuh1j hjõh²hh³jÔµh´K†ubjŒ)�”}”(hŒ(void)”h]”j’)�”}”(hŒvoid”h]”jM)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjA¶h²hh³Nh´Nubah}”(h]”h ]”jYah"]”h$]”h&]”uh1jLhj=¶ubah}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj÷jøuh1j‘hj9¶ubah}”(h]”h ]”h"]”h$]”h&]”j÷jøuh1j‹hjõh²hh³jÔµh´K†ubeh}”(h]”h ]”h"]”h$]”h&]”j÷jøj2 ˆuh1jåj3 j4 hj¿µh²hh³jÔµh´K†ubah}”(h]”jºµah ]”(j8 j9 eh"]”h$]”h&]”j= ˆj> )j? huh1jßh³jÔµh´K†hj¼µh²hubjA )�”}”(hhh]”hÌ)�”}”(hŒreturn a signaled fence”h]”hŒreturn a signaled fence”…”�”}”(hjk¶h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´K†hjh¶h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j@ hj¼µh²hh³jÔµh´K†ubeh}”(h]”h ]”(jîŒfunction”eh"]”h$]”h&]”ja jîjb jƒ¶jc jƒ¶jd ‰je ‰jf ‰uh1jÚh²hhj�µh³Nh´Nubjh )�”}”(hŒº**Parameters** ``void`` no arguments **Description** Return a stub fence which is already signaled. The fence's timestamp corresponds to the initialisation time of the linux kernel.”h]”(hÌ)�”}”(hŒ**Parameters**”h]”jr )�”}”(hj�¶h]”hŒ Parameters”…”�”}”(hj�¶h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hj‹¶ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´KŠhj‡¶ubj´ )�”}”(hhh]”j¹ )�”}”(hŒ``void`` no arguments ”h]”(j¿ )�”}”(hŒ``void``”h]”jâ)�”}”(hj¬¶h]”hŒvoid”…”�”}”(hj®¶h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjª¶ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´Khj¦¶ubjÙ )�”}”(hhh]”hÌ)�”}”(hŒ no arguments”h]”hŒ no arguments”…”�”}”(hjŶh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jÁ¶h´Khj¶ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hj¦¶ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³jÁ¶h´Khj£¶ubah}”(h]”h ]”h"]”h$]”h&]”uh1j³ hj‡¶ubhÌ)�”}”(hŒ**Description**”h]”jr )�”}”(hjç¶h]”hŒ Description”…”�”}”(hjé¶h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hjå¶ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´Khj‡¶ubhÌ)�”}”(hŒ€Return a stub fence which is already signaled. The fence's timestamp corresponds to the initialisation time of the linux kernel.”h]”hŒ‚Return a stub fence which is already signaled. The fence’s timestamp corresponds to the initialisation time of the linux kernel.”…”�”}”(hjý¶h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´K‡hj‡¶ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jg hj�µh²hh³Nh´NubjÉ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÕŒ,dma_fence_allocate_private_stub (C function)”Œ!c.dma_fence_allocate_private_stub”hNt”auh1jÈhj�µh²hh³Nh´NubjÛ)�”}”(hhh]”(jà)�”}”(hŒFstruct dma_fence * dma_fence_allocate_private_stub (ktime_t timestamp)”h]”jæ)�”}”(hŒDstruct dma_fence *dma_fence_allocate_private_stub(ktime_t timestamp)”h]”(jì)�”}”(hjïh]”hŒstruct”…”�”}”(hj,·h²hh³Nh´Nubah}”(h]”h ]”jøah"]”h$]”h&]”uh1jëhj(·h²hh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´K’ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj:·h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj(·h²hh³j9·h´K’ubh)�”}”(hhh]”j )�”}”(hŒ dma_fence”h]”hŒ dma_fence”…”�”}”(hjK·h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjH·ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jîŒreftype”jGŒ reftarget”jM·Œmodname”NŒ classname”Nj³j¶)�”}”j¹]”jO)�”}”jGŒdma_fence_allocate_private_stub”sbŒ!c.dma_fence_allocate_private_stub”†”asbuh1hhj(·h²hh³j9·h´K’ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjl·h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj(·h²hh³j9·h´K’ubjd)�”}”(hjgh]”hŒ*”…”�”}”(hjz·h²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchj(·h²hh³j9·h´K’ubj )�”}”(hŒdma_fence_allocate_private_stub”h]”j )�”}”(hji·h]”hŒdma_fence_allocate_private_stub”…”�”}”(hj‹·h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj‡·ubah}”(h]”h ]”(j' j( eh"]”h$]”h&]”j÷jøuh1j hj(·h²hh³j9·h´K’ubjŒ)�”}”(hŒ(ktime_t timestamp)”h]”j’)�”}”(hŒktime_t timestamp”h]”(h)�”}”(hhh]”j )�”}”(hŒktime_t”h]”hŒktime_t”…”�”}”(hj©·h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj¦·ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jîŒreftype”jGŒ reftarget”j«·Œmodname”NŒ classname”Nj³j¶)�”}”j¹]”jg·Œ!c.dma_fence_allocate_private_stub”†”asbuh1hhj¢·ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÇ·h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj¢·ubj )�”}”(hŒ timestamp”h]”hŒ timestamp”…”�”}”(hjÕ·h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj¢·ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj÷jøuh1j‘hjž·ubah}”(h]”h ]”h"]”h$]”h&]”j÷jøuh1j‹hj(·h²hh³j9·h´K’ubeh}”(h]”h ]”h"]”h$]”h&]”j÷jøj2 ˆuh1jåj3 j4 hj$·h²hh³j9·h´K’ubah}”(h]”j·ah ]”(j8 j9 eh"]”h$]”h&]”j= ˆj> )j? huh1jßh³j9·h´K’hj!·h²hubjA )�”}”(hhh]”hÌ)�”}”(hŒ return a private, signaled fence”h]”hŒ return a private, signaled fence”…”�”}”(hjÿ·h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´K’hjü·h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j@ hj!·h²hh³j9·h´K’ubeh}”(h]”h ]”(jîŒfunction”eh"]”h$]”h&]”ja jîjb j¸jc j¸jd ‰je ‰jf ‰uh1jÚh²hhj�µh³Nh´Nubjh )�”}”(hŒ‘**Parameters** ``ktime_t timestamp`` timestamp when the fence was signaled **Description** Return a newly allocated and signaled stub fence.”h]”(hÌ)�”}”(hŒ**Parameters**”h]”jr )�”}”(hj!¸h]”hŒ Parameters”…”�”}”(hj#¸h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hj¸ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´K–hj¸ubj´ )�”}”(hhh]”j¹ )�”}”(hŒ<``ktime_t timestamp`` timestamp when the fence was signaled ”h]”(j¿ )�”}”(hŒ``ktime_t timestamp``”h]”jâ)�”}”(hj@¸h]”hŒktime_t timestamp”…”�”}”(hjB¸h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj>¸ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´K“hj:¸ubjÙ )�”}”(hhh]”hÌ)�”}”(hŒ%timestamp when the fence was signaled”h]”hŒ%timestamp when the fence was signaled”…”�”}”(hjY¸h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jU¸h´K“hjV¸ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hj:¸ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³jU¸h´K“hj7¸ubah}”(h]”h ]”h"]”h$]”h&]”uh1j³ hj¸ubhÌ)�”}”(hŒ**Description**”h]”jr )�”}”(hj{¸h]”hŒ Description”…”�”}”(hj}¸h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hjy¸ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´K•hj¸ubhÌ)�”}”(hŒ1Return a newly allocated and signaled stub fence.”h]”hŒ1Return a newly allocated and signaled stub fence.”…”�”}”(hj‘¸h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´K”hj¸ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jg hj�µh²hh³Nh´NubjÉ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÕŒ$dma_fence_context_alloc (C function)”Œc.dma_fence_context_alloc”hNt”auh1jÈhj�µh²hh³Nh´NubjÛ)�”}”(hhh]”(jà)�”}”(hŒ*u64 dma_fence_context_alloc (unsigned num)”h]”jæ)�”}”(hŒ)u64 dma_fence_context_alloc(unsigned num)”h]”(h)�”}”(hhh]”j )�”}”(hŒu64”h]”hŒu64”…”�”}”(hjøh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjÀ¸ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jîŒreftype”jGŒ reftarget”jŸŒmodname”NŒ classname”Nj³j¶)�”}”j¹]”jO)�”}”jGŒdma_fence_context_alloc”sbŒc.dma_fence_context_alloc”†”asbuh1hhj¼¸h²hh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´Kªubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjå¸h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj¼¸h²hh³jä¸h´Kªubj )�”}”(hŒdma_fence_context_alloc”h]”j )�”}”(hjá¸h]”hŒdma_fence_context_alloc”…”�”}”(hj÷¸h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjó¸ubah}”(h]”h ]”(j' j( eh"]”h$]”h&]”j÷jøuh1j hj¼¸h²hh³jä¸h´KªubjŒ)�”}”(hŒ(unsigned num)”h]”j’)�”}”(hŒ unsigned num”h]”(jM)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj¹h²hh³Nh´Nubah}”(h]”h ]”jYah"]”h$]”h&]”uh1jLhj¹ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj ¹h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj¹ubj )�”}”(hŒnum”h]”hŒnum”…”�”}”(hj.¹h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj¹ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj÷jøuh1j‘hj ¹ubah}”(h]”h ]”h"]”h$]”h&]”j÷jøuh1j‹hj¼¸h²hh³jä¸h´Kªubeh}”(h]”h ]”h"]”h$]”h&]”j÷jøj2 ˆuh1jåj3 j4 hj¸¸h²hh³jä¸h´Kªubah}”(h]”j³¸ah ]”(j8 j9 eh"]”h$]”h&]”j= ˆj> )j? huh1jßh³jä¸h´Kªhjµ¸h²hubjA )�”}”(hhh]”hÌ)�”}”(hŒ#allocate an array of fence contexts”h]”hŒ#allocate an array of fence contexts”…”�”}”(hjX¹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´KªhjU¹h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j@ hjµ¸h²hh³jä¸h´Kªubeh}”(h]”h ]”(jîŒfunction”eh"]”h$]”h&]”ja jîjb jp¹jc jp¹jd ‰je ‰jf ‰uh1jÚh²hhj�µh³Nh´Nubjh )�”}”(hX6**Parameters** ``unsigned num`` amount of contexts to allocate **Description** This function will return the first index of the number of fence contexts allocated. The fence context is used for setting :c:type:`dma_fence.context ` to a unique number by passing the context to dma_fence_init().”h]”(hÌ)�”}”(hŒ**Parameters**”h]”jr )�”}”(hjz¹h]”hŒ Parameters”…”�”}”(hj|¹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hjx¹ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´K®hjt¹ubj´ )�”}”(hhh]”j¹ )�”}”(hŒ0``unsigned num`` amount of contexts to allocate ”h]”(j¿ )�”}”(hŒ``unsigned num``”h]”jâ)�”}”(hj™¹h]”hŒ unsigned num”…”�”}”(hj›¹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj—¹ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´K«hj“¹ubjÙ )�”}”(hhh]”hÌ)�”}”(hŒamount of contexts to allocate”h]”hŒamount of contexts to allocate”…”�”}”(hj²¹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j®¹h´K«hj¯¹ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hj“¹ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³j®¹h´K«hj�¹ubah}”(h]”h ]”h"]”h$]”h&]”uh1j³ hjt¹ubhÌ)�”}”(hŒ**Description**”h]”jr )�”}”(hjÔ¹h]”hŒ Description”…”�”}”(hjÖ¹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hjÒ¹ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´K­hjt¹ubhÌ)�”}”(hŒâThis function will return the first index of the number of fence contexts allocated. The fence context is used for setting :c:type:`dma_fence.context ` to a unique number by passing the context to dma_fence_init().”h]”(hŒ|This function will return the first index of the number of fence contexts allocated. The fence context is used for setting ”…”�”}”(hjê¹h²hh³Nh´Nubh)�”}”(hŒ':c:type:`dma_fence.context `”h]”jâ)�”}”(hjô¹h]”hŒdma_fence.context”…”�”}”(hjö¹h²hh³Nh´Nubah}”(h]”h ]”(jíjîŒc-type”eh"]”h$]”h&]”uh1jáhjò¹ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”júŒ refdomain”jîŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰j³j·jŒ dma_fence”uh1hh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´K¬hjê¹ubhŒ? to a unique number by passing the context to dma_fence_init().”…”�”}”(hjê¹h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jºh´K¬hjt¹ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jg hj�µh²hh³Nh´NubjÉ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÕŒ'dma_fence_begin_signalling (C function)”Œc.dma_fence_begin_signalling”hNt”auh1jÈhj�µh²hh³Nh´NubjÛ)�”}”(hhh]”(jà)�”}”(hŒ&bool dma_fence_begin_signalling (void)”h]”jæ)�”}”(hŒ%bool dma_fence_begin_signalling(void)”h]”(jM)�”}”(hji5h]”hŒbool”…”�”}”(hj<ºh²hh³Nh´Nubah}”(h]”h ]”jYah"]”h$]”h&]”uh1jLhj8ºh²hh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´Mubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjJºh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj8ºh²hh³jIºh´Mubj )�”}”(hŒdma_fence_begin_signalling”h]”j )�”}”(hŒdma_fence_begin_signalling”h]”hŒdma_fence_begin_signalling”…”�”}”(hj\ºh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjXºubah}”(h]”h ]”(j' j( eh"]”h$]”h&]”j÷jøuh1j hj8ºh²hh³jIºh´MubjŒ)�”}”(hŒ(void)”h]”j’)�”}”(hŒvoid”h]”jM)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjxºh²hh³Nh´Nubah}”(h]”h ]”jYah"]”h$]”h&]”uh1jLhjtºubah}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj÷jøuh1j‘hjpºubah}”(h]”h ]”h"]”h$]”h&]”j÷jøuh1j‹hj8ºh²hh³jIºh´Mubeh}”(h]”h ]”h"]”h$]”h&]”j÷jøj2 ˆuh1jåj3 j4 hj4ºh²hh³jIºh´Mubah}”(h]”j/ºah ]”(j8 j9 eh"]”h$]”h&]”j= ˆj> )j? huh1jßh³jIºh´Mhj1ºh²hubjA )�”}”(hhh]”hÌ)�”}”(hŒ-begin a critical DMA fence signalling section”h]”hŒ-begin a critical DMA fence signalling section”…”�”}”(hj¢ºh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´MhjŸºh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j@ hj1ºh²hh³jIºh´Mubeh}”(h]”h ]”(jîŒfunction”eh"]”h$]”h&]”ja jîjb jººjc jººjd ‰je ‰jf ‰uh1jÚh²hhj�µh³Nh´Nubjh )�”}”(hX‹**Parameters** ``void`` no arguments **Description** Drivers should use this to annotate the beginning of any code section required to eventually complete :c:type:`dma_fence` by calling dma_fence_signal(). The end of these critical sections are annotated with dma_fence_end_signalling(). Opaque cookie needed by the implementation, which needs to be passed to dma_fence_end_signalling().”h]”(hÌ)�”}”(hŒ**Parameters**”h]”jr )�”}”(hjĺh]”hŒ Parameters”…”�”}”(hjƺh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hjºubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´Mhj¾ºubj´ )�”}”(hhh]”j¹ )�”}”(hŒ``void`` no arguments ”h]”(j¿ )�”}”(hŒ``void``”h]”jâ)�”}”(hjãºh]”hŒvoid”…”�”}”(hjåºh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjáºubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´KhjݺubjÙ )�”}”(hhh]”hÌ)�”}”(hŒ no arguments”h]”hŒ no arguments”…”�”}”(hjüºh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jøºh´Khjùºubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hjݺubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³jøºh´KhjÚºubah}”(h]”h ]”h"]”h$]”h&]”uh1j³ hj¾ºubhÌ)�”}”(hŒ**Description**”h]”jr )�”}”(hj»h]”hŒ Description”…”�”}”(hj »h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hj»ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´Khj¾ºubhÌ)�”}”(hŒ˜Drivers should use this to annotate the beginning of any code section required to eventually complete :c:type:`dma_fence` by calling dma_fence_signal().”h]”(hŒfDrivers should use this to annotate the beginning of any code section required to eventually complete ”…”�”}”(hj4»h²hh³Nh´Nubh)�”}”(hŒ:c:type:`dma_fence`”h]”jâ)�”}”(hj>»h]”hŒ dma_fence”…”�”}”(hj@»h²hh³Nh´Nubah}”(h]”h ]”(jíjîŒc-type”eh"]”h$]”h&]”uh1jáhj<»ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”júŒ refdomain”jîŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰j³j·jŒ dma_fence”uh1hh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´Mhj4»ubhŒ by calling dma_fence_signal().”…”�”}”(hj4»h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j[»h´Mhj¾ºubhÌ)�”}”(hŒQThe end of these critical sections are annotated with dma_fence_end_signalling().”h]”hŒQThe end of these critical sections are annotated with dma_fence_end_signalling().”…”�”}”(hjf»h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´Mhj¾ºubhÌ)�”}”(hŒcOpaque cookie needed by the implementation, which needs to be passed to dma_fence_end_signalling().”h]”hŒcOpaque cookie needed by the implementation, which needs to be passed to dma_fence_end_signalling().”…”�”}”(hju»h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´Mhj¾ºubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jg hj�µh²hh³Nh´NubjÉ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÕŒ%dma_fence_end_signalling (C function)”Œc.dma_fence_end_signalling”hNt”auh1jÈhj�µh²hh³Nh´NubjÛ)�”}”(hhh]”(jà)�”}”(hŒ+void dma_fence_end_signalling (bool cookie)”h]”jæ)�”}”(hŒ*void dma_fence_end_signalling(bool cookie)”h]”(jM)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj¤»h²hh³Nh´Nubah}”(h]”h ]”jYah"]”h$]”h&]”uh1jLhj »h²hh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´M6ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj³»h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj »h²hh³j²»h´M6ubj )�”}”(hŒdma_fence_end_signalling”h]”j )�”}”(hŒdma_fence_end_signalling”h]”hŒdma_fence_end_signalling”…”�”}”(hjÅ»h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjÁ»ubah}”(h]”h ]”(j' j( eh"]”h$]”h&]”j÷jøuh1j hj »h²hh³j²»h´M6ubjŒ)�”}”(hŒ (bool cookie)”h]”j’)�”}”(hŒ bool cookie”h]”(jM)�”}”(hji5h]”hŒbool”…”�”}”(hjá»h²hh³Nh´Nubah}”(h]”h ]”jYah"]”h$]”h&]”uh1jLhjÝ»ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjî»h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjÝ»ubj )�”}”(hŒcookie”h]”hŒcookie”…”�”}”(hjü»h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjÝ»ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj÷jøuh1j‘hjÙ»ubah}”(h]”h ]”h"]”h$]”h&]”j÷jøuh1j‹hj »h²hh³j²»h´M6ubeh}”(h]”h ]”h"]”h$]”h&]”j÷jøj2 ˆuh1jåj3 j4 hjœ»h²hh³j²»h´M6ubah}”(h]”j—»ah ]”(j8 j9 eh"]”h$]”h&]”j= ˆj> )j? huh1jßh³j²»h´M6hj™»h²hubjA )�”}”(hhh]”hÌ)�”}”(hŒ+end a critical DMA fence signalling section”h]”hŒ+end a critical DMA fence signalling section”…”�”}”(hj&¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´M6hj#¼h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j@ hj™»h²hh³j²»h´M6ubeh}”(h]”h ]”(jîŒfunction”eh"]”h$]”h&]”ja jîjb j>¼jc j>¼jd ‰je ‰jf ‰uh1jÚh²hhj�µh³Nh´Nubjh )�”}”(hŒ°**Parameters** ``bool cookie`` opaque cookie from dma_fence_begin_signalling() **Description** Closes a critical section annotation opened by dma_fence_begin_signalling().”h]”(hÌ)�”}”(hŒ**Parameters**”h]”jr )�”}”(hjH¼h]”hŒ Parameters”…”�”}”(hjJ¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hjF¼ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´M:hjB¼ubj´ )�”}”(hhh]”j¹ )�”}”(hŒ@``bool cookie`` opaque cookie from dma_fence_begin_signalling() ”h]”(j¿ )�”}”(hŒ``bool cookie``”h]”jâ)�”}”(hjg¼h]”hŒ bool cookie”…”�”}”(hji¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhje¼ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´M7hja¼ubjÙ )�”}”(hhh]”hÌ)�”}”(hŒ/opaque cookie from dma_fence_begin_signalling()”h]”hŒ/opaque cookie from dma_fence_begin_signalling()”…”�”}”(hj€¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j|¼h´M7hj}¼ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hja¼ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³j|¼h´M7hj^¼ubah}”(h]”h ]”h"]”h$]”h&]”uh1j³ hjB¼ubhÌ)�”}”(hŒ**Description**”h]”jr )�”}”(hj¢¼h]”hŒ Description”…”�”}”(hj¤¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hj ¼ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´M9hjB¼ubhÌ)�”•}”(hŒLCloses a critical section annotation opened by dma_fence_begin_signalling().”h]”hŒLCloses a critical section annotation opened by dma_fence_begin_signalling().”…”�”}”(hj¸¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´M8hjB¼ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jg hj�µh²hh³Nh´NubjÉ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÕŒ.dma_fence_signal_timestamp_locked (C function)”Œ#c.dma_fence_signal_timestamp_locked”hNt”auh1jÈhj�µh²hh³Nh´NubjÛ)�”}”(hhh]”(jà)�”}”(hŒSvoid dma_fence_signal_timestamp_locked (struct dma_fence *fence, ktime_t timestamp)”h]”jæ)�”}”(hŒRvoid dma_fence_signal_timestamp_locked(struct dma_fence *fence, ktime_t timestamp)”h]”(jM)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjç¼h²hh³Nh´Nubah}”(h]”h ]”jYah"]”h$]”h&]”uh1jLhjã¼h²hh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´MSubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjö¼h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjã¼h²hh³jõ¼h´MSubj )�”}”(hŒ!dma_fence_signal_timestamp_locked”h]”j )�”}”(hŒ!dma_fence_signal_timestamp_locked”h]”hŒ!dma_fence_signal_timestamp_locked”…”�”}”(hj½h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj½ubah}”(h]”h ]”(j' j( eh"]”h$]”h&]”j÷jøuh1j hjã¼h²hh³jõ¼h´MSubjŒ)�”}”(hŒ,(struct dma_fence *fence, ktime_t timestamp)”h]”(j’)�”}”(hŒstruct dma_fence *fence”h]”(jì)�”}”(hjïh]”hŒstruct”…”�”}”(hj$½h²hh³Nh´Nubah}”(h]”h ]”jøah"]”h$]”h&]”uh1jëhj ½ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj1½h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj ½ubh)�”}”(hhh]”j )�”}”(hŒ dma_fence”h]”hŒ dma_fence”…”�”}”(hjB½h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj?½ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jîŒreftype”jGŒ reftarget”jD½Œmodname”NŒ classname”Nj³j¶)�”}”j¹]”jO)�”}”jGj ½sbŒ#c.dma_fence_signal_timestamp_locked”†”asbuh1hhj ½ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjb½h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj ½ubjd)�”}”(hjgh]”hŒ*”…”�”}”(hjp½h²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchj ½ubj )�”}”(hŒfence”h]”hŒfence”…”�”}”(hj}½h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj ½ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj÷jøuh1j‘hj½ubj’)�”}”(hŒktime_t timestamp”h]”(h)�”}”(hhh]”j )�”}”(hŒktime_t”h]”hŒktime_t”…”�”}”(hj™½h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj–½ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jîŒreftype”jGŒ reftarget”j›½Œmodname”NŒ classname”Nj³j¶)�”}”j¹]”j^½Œ#c.dma_fence_signal_timestamp_locked”†”asbuh1hhj’½ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj·½h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj’½ubj )�”}”(hŒ timestamp”h]”hŒ timestamp”…”�”}”(hjŽh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj’½ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj÷jøuh1j‘hj½ubeh}”(h]”h ]”h"]”h$]”h&]”j÷jøuh1j‹hjã¼h²hh³jõ¼h´MSubeh}”(h]”h ]”h"]”h$]”h&]”j÷jøj2 ˆuh1jåj3 j4 hjß¼h²hh³jõ¼h´MSubah}”(h]”jÚ¼ah ]”(j8 j9 eh"]”h$]”h&]”j= ˆj> )j? huh1jßh³jõ¼h´MShjܼh²hubjA )�”}”(hhh]”hÌ)�”}”(hŒsignal completion of a fence”h]”hŒsignal completion of a fence”…”�”}”(hjï½h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´MShjì½h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j@ hjܼh²hh³jõ¼h´MSubeh}”(h]”h ]”(jîŒfunction”eh"]”h$]”h&]”ja jîjb j¾jc j¾jd ‰je ‰jf ‰uh1jÚh²hhj�µh³Nh´Nubjh )�”}”(hX“**Parameters** ``struct dma_fence *fence`` the fence to signal ``ktime_t timestamp`` fence signal timestamp in kernel's CLOCK_MONOTONIC time domain **Description** Signal completion for software callbacks on a fence, this will unblock dma_fence_wait() calls and run all the callbacks added with dma_fence_add_callback(). Can be called multiple times, but since a fence can only go from the unsignaled to the signaled state and not back, it will only be effective the first time. Set the timestamp provided as the fence signal timestamp. Unlike dma_fence_signal_timestamp(), this function must be called with :c:type:`dma_fence.lock ` held.”h]”(hÌ)�”}”(hŒ**Parameters**”h]”jr )�”}”(hj¾h]”hŒ Parameters”…”�”}”(hj¾h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hj¾ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´MWhj ¾ubj´ )�”}”(hhh]”(j¹ )�”}”(hŒ0``struct dma_fence *fence`` the fence to signal ”h]”(j¿ )�”}”(hŒ``struct dma_fence *fence``”h]”jâ)�”}”(hj0¾h]”hŒstruct dma_fence *fence”…”�”}”(hj2¾h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj.¾ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´MThj*¾ubjÙ )�”}”(hhh]”hÌ)�”}”(hŒthe fence to signal”h]”hŒthe fence to signal”…”�”}”(hjI¾h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jE¾h´MThjF¾ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hj*¾ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³jE¾h´MThj'¾ubj¹ )�”}”(hŒU``ktime_t timestamp`` fence signal timestamp in kernel's CLOCK_MONOTONIC time domain ”h]”(j¿ )�”}”(hŒ``ktime_t timestamp``”h]”jâ)�”}”(hji¾h]”hŒktime_t timestamp”…”�”}”(hjk¾h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjg¾ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´MUhjc¾ubjÙ )�”}”(hhh]”hÌ)�”}”(hŒ>fence signal timestamp in kernel's CLOCK_MONOTONIC time domain”h]”hŒ@fence signal timestamp in kernel’s CLOCK_MONOTONIC time domain”…”�”}”(hj‚¾h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j~¾h´MUhj¾ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hjc¾ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³j~¾h´MUhj'¾ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j³ hj ¾ubhÌ)�”}”(hŒ**Description**”h]”jr )�”}”(hj¤¾h]”hŒ Description”…”�”}”(hj¦¾h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hj¢¾ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´MWhj ¾ubhÌ)�”}”(hXtSignal completion for software callbacks on a fence, this will unblock dma_fence_wait() calls and run all the callbacks added with dma_fence_add_callback(). Can be called multiple times, but since a fence can only go from the unsignaled to the signaled state and not back, it will only be effective the first time. Set the timestamp provided as the fence signal timestamp.”h]”hXtSignal completion for software callbacks on a fence, this will unblock dma_fence_wait() calls and run all the callbacks added with dma_fence_add_callback(). Can be called multiple times, but since a fence can only go from the unsignaled to the signaled state and not back, it will only be effective the first time. Set the timestamp provided as the fence signal timestamp.”…”�”}”(hjº¾h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´MVhj ¾ubhÌ)�”}”(hŒqUnlike dma_fence_signal_timestamp(), this function must be called with :c:type:`dma_fence.lock ` held.”h]”(hŒGUnlike dma_fence_signal_timestamp(), this function must be called with ”…”�”}”(hjɾh²hh³Nh´Nubh)�”}”(hŒ$:c:type:`dma_fence.lock `”h]”jâ)�”}”(hjÓ¾h]”hŒdma_fence.lock”…”�”}”(hjÕ¾h²hh³Nh´Nubah}”(h]”h ]”(jíjîŒc-type”eh"]”h$]”h&]”uh1jáhjѾubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”júŒ refdomain”jîŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰j³j·jŒ dma_fence”uh1hh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´M]hjɾubhŒ held.”…”�”}”(hjɾh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jð¾h´M]hj ¾ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jg hj�µh²hh³Nh´NubjÉ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÕŒ'dma_fence_signal_timestamp (C function)”Œc.dma_fence_signal_timestamp”hNt”auh1jÈhj�µh²hh³Nh´NubjÛ)�”}”(hhh]”(jà)�”}”(hŒLvoid dma_fence_signal_timestamp (struct dma_fence *fence, ktime_t timestamp)”h]”jæ)�”}”(hŒKvoid dma_fence_signal_timestamp(struct dma_fence *fence, ktime_t timestamp)”h]”(jM)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj¿h²hh³Nh´Nubah}”(h]”h ]”jYah"]”h$]”h&]”uh1jLhj¿h²hh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´M‡ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj*¿h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj¿h²hh³j)¿h´M‡ubj )�”}”(hŒdma_fence_signal_timestamp”h]”j )�”}”(hŒdma_fence_signal_timestamp”h]”hŒdma_fence_signal_timestamp”…”�”}”(hj<¿h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj8¿ubah}”(h]”h ]”(j' j( eh"]”h$]”h&]”j÷jøuh1j hj¿h²hh³j)¿h´M‡ubjŒ)�”}”(hŒ,(struct dma_fence *fence, ktime_t timestamp)”h]”(j’)�”}”(hŒstruct dma_fence *fence”h]”(jì)�”}”(hjïh]”hŒstruct”…”�”}”(hjX¿h²hh³Nh´Nubah}”(h]”h ]”jøah"]”h$]”h&]”uh1jëhjT¿ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hje¿h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjT¿ubh)�”}”(hhh]”j )�”}”(hŒ dma_fence”h]”hŒ dma_fence”…”�”}”(hjv¿h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjs¿ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jîŒreftype”jGŒ reftarget”jx¿Œmodname”NŒ classname”Nj³j¶)�”}”j¹]”jO)�”}”jGj>¿sbŒc.dma_fence_signal_timestamp”†”asbuh1hhjT¿ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj–¿h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjT¿ubjd)�”}”(hjgh]”hŒ*”…”�”}”(hj¤¿h²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchjT¿ubj )�”}”(hŒfence”h]”hŒfence”…”�”}”(hj±¿h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjT¿ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj÷jøuh1j‘hjP¿ubj’)�”}”(hŒktime_t timestamp”h]”(h)�”}”(hhh]”j )�”}”(hŒktime_t”h]”hŒktime_t”…”�”}”(hjÍ¿h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjÊ¿ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jîŒreftype”jGŒ reftarget”jÏ¿Œmodname”NŒ classname”Nj³j¶)�”}”j¹]”j’¿Œc.dma_fence_signal_timestamp”†”asbuh1hhjÆ¿ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjë¿h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjÆ¿ubj )�”}”(hŒ timestamp”h]”hŒ timestamp”…”�”}”(hjù¿h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjÆ¿ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj÷jøuh1j‘hjP¿ubeh}”(h]”h ]”h"]”h$]”h&]”j÷jøuh1j‹hj¿h²hh³j)¿h´M‡ubeh}”(h]”h ]”h"]”h$]”h&]”j÷jøj2 ˆuh1jåj3 j4 hj¿h²hh³j)¿h´M‡ubah}”(h]”j¿ah ]”(j8 j9 eh"]”h$]”h&]”j= ˆj> )j? huh1jßh³j)¿h´M‡hj¿h²hubjA )�”}”(hhh]”hÌ)�”}”(hŒsignal completion of a fence”h]”hŒsignal completion of a fence”…”�”}”(hj#Àh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´M‡hj Àh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j@ hj¿h²hh³j)¿h´M‡ubeh}”(h]”h ]”(jîŒfunction”eh"]”h$]”h&]”ja jîjb j;Àjc j;Àjd ‰je ‰jf ‰uh1jÚh²hhj�µh³Nh´Nubjh )�”}”(hX **Parameters** ``struct dma_fence *fence`` the fence to signal ``ktime_t timestamp`` fence signal timestamp in kernel's CLOCK_MONOTONIC time domain **Description** Signal completion for software callbacks on a fence, this will unblock dma_fence_wait() calls and run all the callbacks added with dma_fence_add_callback(). Can be called multiple times, but since a fence can only go from the unsignaled to the signaled state and not back, it will only be effective the first time. Set the timestamp provided as the fence signal timestamp.”h]”(hÌ)�”}”(hŒ**Parameters**”h]”jr )�”}”(hjEÀh]”hŒ Parameters”…”�”}”(hjGÀh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hjCÀubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´M‹hj?Àubj´ )�”}”(hhh]”(j¹ )�”}”(hŒ0``struct dma_fence *fence`` the fence to signal ”h]”(j¿ )�”}”(hŒ``struct dma_fence *fence``”h]”jâ)�”}”(hjdÀh]”hŒstruct dma_fence *fence”…”�”}”(hjfÀh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjbÀubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´Mˆhj^ÀubjÙ )�”}”(hhh]”hÌ)�”}”(hŒthe fence to signal”h]”hŒthe fence to signal”…”�”}”(hj}Àh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jyÀh´MˆhjzÀubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hj^Àubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³jyÀh´Mˆhj[Àubj¹ )�”}”(hŒU``ktime_t timestamp`` fence signal timestamp in kernel's CLOCK_MONOTONIC time domain ”h]”(j¿ )�”}”(hŒ``ktime_t timestamp``”h]”jâ)�”}”(hj�Àh]”hŒktime_t timestamp”…”�”}”(hjŸÀh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj›Àubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´M‰hj—ÀubjÙ )�”}”(hhh]”hÌ)�”}”(hŒ>fence signal timestamp in kernel's CLOCK_MONOTONIC time domain”h]”hŒ@fence signal timestamp in kernel’s CLOCK_MONOTONIC time domain”…”�”}”(hj¶Àh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j²Àh´M‰hj³Àubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hj—Àubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³j²Àh´M‰hj[Àubeh}”(h]”h ]”h"]”h$]”h&]”uh1j³ hj?ÀubhÌ)�”}”(hŒ**Description**”h]”jr )�”}”(hjØÀh]”hŒ Description”…”�”}”(hjÚÀh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hjÖÀubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´M‹hj?ÀubhÌ)�”}”(hXtSignal completion for software callbacks on a fence, this will unblock dma_fence_wait() calls and run all the callbacks added with dma_fence_add_callback(). Can be called multiple times, but since a fence can only go from the unsignaled to the signaled state and not back, it will only be effective the first time. Set the timestamp provided as the fence signal timestamp.”h]”hXtSignal completion for software callbacks on a fence, this will unblock dma_fence_wait() calls and run all the callbacks added with dma_fence_add_callback(). Can be called multiple times, but since a fence can only go from the unsignaled to the signaled state and not back, it will only be effective the first time. Set the timestamp provided as the fence signal timestamp.”…”�”}”(hjîÀh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´MŠhj?Àubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jg hj�µh²hh³Nh´NubjÉ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÕŒ$dma_fence_signal_locked (C function)”Œc.dma_fence_signal_locked”hNt”auh1jÈhj�µh²hh³Nh´NubjÛ)�”}”(hhh]”(jà)�”}”(hŒ6void dma_fence_signal_locked (struct dma_fence *fence)”h]”jæ)�”}”(hŒ5void dma_fence_signal_locked(struct dma_fence *fence)”h]”(jM)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjÁh²hh³Nh´Nubah}”(h]”h ]”jYah"]”h$]”h&]”uh1jLhjÁh²hh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´M ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj,Áh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjÁh²hh³j+Áh´M ubj )�”}”(hŒdma_fence_signal_locked”h]”j )�”}”(hŒdma_fence_signal_locked”h]”hŒdma_fence_signal_locked”…”�”}”(hj>Áh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj:Áubah}”(h]”h ]”(j' j( eh"]”h$]”h&]”j÷jøuh1j hjÁh²hh³j+Áh´M ubjŒ)�”}”(hŒ(struct dma_fence *fence)”h]”j’)�”}”(hŒstruct dma_fence *fence”h]”(jì)�”}”(hjïh]”hŒstruct”…”�”}”(hjZÁh²hh³Nh´Nubah}”(h]”h ]”jøah"]”h$]”h&]”uh1jëhjVÁubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjgÁh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjVÁubh)�”}”(hhh]”j )�”}”(hŒ dma_fence”h]”hŒ dma_fence”…”�”}”(hjxÁh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjuÁubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jîŒreftype”jGŒ reftarget”jzÁŒmodname”NŒ classname”Nj³j¶)�”}”j¹]”jO)�”}”jGj@ÁsbŒc.dma_fence_signal_locked”†”asbuh1hhjVÁubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj˜Áh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjVÁubjd)�”}”(hjgh]”hŒ*”…”�”}”(hj¦Áh²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchjVÁubj )�”}”(hŒfence”h]”hŒfence”…”�”}”(hj³Áh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjVÁubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj÷jøuh1j‘hjRÁubah}”(h]”h ]”h"]”h$]”h&]”j÷jøuh1j‹hjÁh²hh³j+Áh´M ubeh}”(h]”h ]”h"]”h$]”h&]”j÷jøj2 ˆuh1jåj3 j4 hjÁh²hh³j+Áh´M ubah}”(h]”jÁah ]”(j8 j9 eh"]”h$]”h&]”j= ˆj> )j? huh1jßh³j+Áh´M hjÁh²hubjA )�”}”(hhh]”hÌ)�”}”(hŒsignal completion of a fence”h]”hŒsignal completion of a fence”…”�”}”(hjÝÁh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´M hjÚÁh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j@ hjÁh²hh³j+Áh´M ubeh}”(h]”h ]”(jîŒfunction”eh"]”h$]”h&]”ja jîjb jõÁjc jõÁjd ‰je ‰jf ‰uh1jÚh²hhj�µh³Nh´Nubjh )�”}”(hX÷**Parameters** ``struct dma_fence *fence`` the fence to signal **Description** Signal completion for software callbacks on a fence, this will unblock dma_fence_wait() calls and run all the callbacks added with dma_fence_add_callback(). Can be called multiple times, but since a fence can only go from the unsignaled to the signaled state and not back, it will only be effective the first time. Unlike dma_fence_signal(), this function must be called with :c:type:`dma_fence.lock ` held.”h]”(hÌ)�”}”(hŒ**Parameters**”h]”jr )�”}”(hjÿÁh]”hŒ Parameters”…”�”}”(hjÂh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hjýÁubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´M¤hjùÁubj´ )�”}”(hhh]”j¹ )�”}”(hŒ0``struct dma_fence *fence`` the fence to signal ”h]”(j¿ )�”}”(hŒ``struct dma_fence *fence``”h]”jâ)�”}”(hjÂh]”hŒstruct dma_fence *fence”…”�”}”(hj Âh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjÂubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´M¡hjÂubjÙ )�”}”(hhh]”hÌ)�”}”(hŒthe fence to signal”h]”hŒthe fence to signal”…”�”}”(hj7Âh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j3Âh´M¡hj4Âubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hjÂubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³j3Âh´M¡hjÂubah}”(h]”h ]”h"]”h$]”h&]”uh1j³ hjùÁubhÌ)�”}”(hŒ**Description**”h]”jr )�”}”(hjYÂh]”hŒ Description”…”�”}”(hj[Âh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hjWÂubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´M£hjùÁubhÌ)�”}”(hX:Signal completion for software callbacks on a fence, this will unblock dma_fence_wait() calls and run all the callbacks added with dma_fence_add_callback(). Can be called multiple times, but since a fence can only go from the unsignaled to the signaled state and not back, it will only be effective the first time.”h]”hX:Signal completion for software callbacks on a fence, this will unblock dma_fence_wait() calls and run all the callbacks added with dma_fence_add_callback(). Can be called multiple times, but since a fence can only go from the unsignaled to the signaled state and not back, it will only be effective the first time.”…”�”}”(hjoÂh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´M¢hjùÁubhÌ)�”}”(hŒgUnlike dma_fence_signal(), this function must be called with :c:type:`dma_fence.lock ` held.”h]”(hŒ=Unlike dma_fence_signal(), this function must be called with ”…”�”}”(hj~Âh²hh³Nh´Nubh)�”}”(hŒ$:c:type:`dma_fence.lock `”h]”jâ)�”}”(hjˆÂh]”hŒdma_fence.lock”…”�”}”(hjŠÂh²hh³Nh´Nubah}”(h]”h ]”(jíjîŒc-type”eh"]”h$]”h&]”uh1jáhj†Âubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”júŒ refdomain”jîŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰j³j·jŒ dma_fence”uh1hh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´M¨hj~ÂubhŒ held.”…”�”}”(hj~Âh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j¥Âh´M¨hjùÁubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jg hj�µh²hh³Nh´NubjÉ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÕŒ.dma_fence_check_and_signal_locked (C function)”Œ#c.dma_fence_check_and_signal_locked”hNt”auh1jÈhj�µh²hh³Nh´NubjÛ)�”}”(hhh]”(jà)�”}”(hŒ@bool dma_fence_check_and_signal_locked (struct dma_fence *fence)”h]”jæ)�”}”(hŒ?bool dma_fence_check_and_signal_locked(struct dma_fence *fence)”h]”(jM)�”}”(hji5h]”hŒbool”…”�”}”(hjÐÂh²hh³Nh´Nubah}”(h]”h ]”jYah"]”h$]”h&]”uh1jLhjÌÂh²hh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´M³ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÞÂh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjÌÂh²hh³jÝÂh´M³ubj )�”}”(hŒ!dma_fence_check_and_signal_locked”h]”j )�”}”(hŒ!dma_fence_check_and_signal_locked”h]”hŒ!dma_fence_check_and_signal_locked”…”�”}”(hjðÂh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjìÂubah}”(h]”h ]”(j' j( eh"]”h$]”h&]”j÷jøuh1j hjÌÂh²hh³jÝÂh´M³ubjŒ)�”}”(hŒ(struct dma_fence *fence)”h]”j’)�”}”(hŒstruct dma_fence *fence”h]”(jì)�”}”(hjïh]”hŒstruct”…”�”}”(hj Ãh²hh³Nh´Nubah}”(h]”h ]”jøah"]”h$]”h&]”uh1jëhjÃubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÃh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjÃubh)�”}”(hhh]”j )�”}”(hŒ dma_fence”h]”hŒ dma_fence”…”�”}”(hj*Ãh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj'Ãubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jîŒreftype”jGŒ reftarget”j,ÃŒmodname”NŒ classname”Nj³j¶)�”}”j¹]”jO)�”}”jGjòÂsbŒ#c.dma_fence_check_and_signal_locked”†”asbuh1hhjÃubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjJÃh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjÃubjd)�”}”(hjgh]”hŒ*”…”�”}”(hjXÃh²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchjÃubj )�”}”(hŒfence”h]”hŒfence”…”�”}”(hjeÃh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjÃubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj÷jøuh1j‘hjÃubah}”(h]”h ]”h"]”h$]”h&]”j÷jøuh1j‹hjÌÂh²hh³jÝÂh´M³ubeh}”(h]”h ]”h"]”h$]”h&]”j÷jøj2 ˆuh1jåj3 j4 hjÈÂh²hh³jÝÂh´M³ubah}”(h]”jÃÂah ]”(j8 j9 eh"]”h$]”h&]”j= ˆj> )j? huh1jßh³jÝÂh´M³hjÅÂh²hubjA )�”}”(hhh]”hÌ)�”}”(hŒ)signal the fence if it's not yet signaled”h]”hŒ+signal the fence if it’s not yet signaled”…”�”}”(hj�Ãh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´M³hjŒÃh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j@ hjÅÂh²hh³jÝÂh´M³ubeh}”(h]”h ]”(jîŒfunction”eh"]”h$]”h&]”ja jîjb j§Ãjc j§Ãjd ‰je ‰jf ‰uh1jÚh²hhj�µh³Nh´Nubjh )�”}”(hXs**Parameters** ``struct dma_fence *fence`` the fence to check and signal **Description** Checks whether a fence was signaled and signals it if it was not yet signaled. Unlike dma_fence_check_and_signal(), this function must be called with :c:type:`struct dma_fence `.lock being held. **Return** true if fence has been signaled already, false otherwise.”h]”(hÌ)�”}”(hŒ**Parameters**”h]”jr )�”}”(hj±Ãh]”hŒ Parameters”…”�”}”(hj³Ãh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hj¯Ãubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´M·hj«Ãubj´ )�”}”(hhh]”j¹ )�”}”(hŒ:``struct dma_fence *fence`` the fence to check and signal ”h]”(j¿ )�”}”(hŒ``struct dma_fence *fence``”h]”jâ)�”}”(hjÐÃh]”hŒstruct dma_fence *fence”…”�”}”(hjÒÃh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjÎÃubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´M´hjÊÃubjÙ )�”}”(hhh]”hÌ)�”}”(hŒthe fence to check and signal”h]”hŒthe fence to check and signal”…”�”}”(hjéÃh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jåÃh´M´hjæÃubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hjÊÃubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³jåÃh´M´hjÇÃubah}”(h]”h ]”h"]”h$]”h&]”uh1j³ hj«ÃubhÌ)�”}”(hŒ**Description**”h]”jr )�”}”(hj Äh]”hŒ Description”…”�”}”(hj Äh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hj Äubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´M¶hj«ÃubhÌ)�”}”(hŒNChecks whether a fence was signaled and signals it if it was not yet signaled.”h]”hŒNChecks whether a fence was signaled and signals it if it was not yet signaled.”…”�”}”(hj!Äh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´Mµhj«ÃubhÌ)�”}”(hŒ~Unlike dma_fence_check_and_signal(), this function must be called with :c:type:`struct dma_fence `.lock being held.”h]”(hŒGUnlike dma_fence_check_and_signal(), this function must be called with ”…”�”}”(hj0Äh²hh³Nh´Nubh)�”}”(hŒ&:c:type:`struct dma_fence `”h]”jâ)�”}”(hj:Äh]”hŒstruct dma_fence”…”�”}”(hj<Äh²hh³Nh´Nubah}”(h]”h ]”(jíjîŒc-type”eh"]”h$]”h&]”uh1jáhj8Äubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”júŒ refdomain”jîŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰j³j·jŒ dma_fence”uh1hh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´M·hj0ÄubhŒ.lock being held.”…”�”}”(hj0Äh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jWÄh´M·hj«ÃubhÌ)�”}”(hŒ **Return**”h]”jr )�”}”(hjdÄh]”hŒReturn”…”�”}”(hjfÄh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hjbÄubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´Mºhj«ÃubhÌ)�”}”(hŒ9true if fence has been signaled already, false otherwise.”h]”hŒ9true if fence has been signaled already, false otherwise.”…”�”}”(hjzÄh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´M»hj«Ãubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jg hj�µh²hh³Nh´NubjÉ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÕŒ'dma_fence_check_and_signal (C function)”Œc.dma_fence_check_and_signal”hNt”auh1jÈhj�µh²hh³Nh´NubjÛ)�”}”(hhh]”(jà)�”}”(hŒ9bool dma_fence_check_and_signal (struct dma_fence *fence)”h]”jæ)�”}”(hŒ8bool dma_fence_check_and_signal(struct dma_fence *fence)”h]”(jM)�”}”(hji5h]”hŒbool”…”�”}”(hj©Äh²hh³Nh´Nubah}”(h]”h ]”jYah"]”h$]”h&]”uh1jLhj¥Äh²hh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´MÉubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj·Äh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj¥Äh²hh³j¶Äh´MÉubj )�”}”(hŒdma_fence_check_and_signal”h]”j )�”}”(hŒdma_fence_check_and_signal”h]”hŒdma_fence_check_and_signal”…”�”}”(hjÉÄh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjÅÄubah}”(h]”h ]”(j' j( eh"]”h$]”h&]”j÷jøuh1j hj¥Äh²hh³j¶Äh´MÉubjŒ)�”}”(hŒ(struct dma_fence *fence)”h]”j’)�”}”(hŒstruct dma_fence *fence”h]”(jì)�”}”(hjïh]”hŒstruct”…”�”}”(hjåÄh²hh³Nh´Nubah}”(h]”h ]”jøah"]”h$]”h&]”uh1jëhjáÄubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjòÄh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjáÄubh)�”}”(hhh]”j )�”}”(hŒ dma_fence”h]”hŒ dma_fence”…”�”}”(hjÅh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjÅubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jîŒreftype”jGŒ reftarget”jÅŒmodname”NŒ classname”Nj³j¶)�”}”j¹]”jO)�”}”jGjËÄsbŒc.dma_fence_check_and_signal”†”asbuh1hhjáÄubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj#Åh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjáÄubjd)�”}”(hjgh]”hŒ*”…”�”}”(hj1Åh²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchjáÄubj )�”}”(hŒfence”h]”hŒfence”…”�”}”(hj>Åh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjáÄubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj÷jøuh1j‘hjÝÄubah}”(h]”h ]”h"]”h$]”h&]”j÷jøuh1j‹hj¥Äh²hh³j¶Äh´MÉubeh}”(h]”h ]”h"]”h$]”h&]”j÷jøj2 ˆuh1jåj3 j4 hj¡Äh²hh³j¶Äh´MÉubah}”(h]”jœÄah ]”(j8 j9 eh"]”h$]”h&]”j= ˆj> )j? huh1jßh³j¶Äh´MÉhjžÄh²hubjA )�”}”(hhh]”hÌ)�”}”(hŒ)signal the fence if it's not yet signaled”h]”hŒ+signal the fence if it’s not yet signaled”…”�”}”(hjhÅh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´MÉhjeÅh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j@ hjžÄh²hh³j¶Äh´MÉubeh}”(h]”h ]”(jîŒfunction”eh"]”h$]”h&]”ja jîjb j€Åjc j€Åjd ‰je ‰jf ‰uh1jÚh²hhj�µh³Nh´Nubjh )�”}”(hX**Parameters** ``struct dma_fence *fence`` the fence to check and signal **Description** Checks whether a fence was signaled and signals it if it was not yet signaled. All this is done in a race-free manner. **Return** true if fence has been signaled already, false otherwise.”h]”(hÌ)�”}”(hŒ**Parameters**”h]”jr )�”}”(hjŠÅh]”hŒ Parameters”…”�”}”(hjŒÅh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hjˆÅubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´MÍhj„Åubj´ )�”}”(hhh]”j¹ )�”}”(hŒ:``struct dma_fence *fence`` the fence to check and signal ”h]”(j¿ )�”}”(hŒ``struct dma_fence *fence``”h]”jâ)�”}”(hj©Åh]”hŒstruct dma_fence *fence”…”�”}”(hj«Åh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj§Åubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´MÊhj£ÅubjÙ )�”}”(hhh]”hÌ)�”}”(hŒthe fence to check and signal”h]”hŒthe fence to check and signal”…”�”}”(hjÂÅh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j¾Åh´MÊhj¿Åubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hj£Åubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³j¾Åh´MÊhj Åubah}”(h]”h ]”h"]”h$]”h&]”uh1j³ hj„ÅubhÌ)�”}”(hŒ**Description**”h]”jr )�”}”(hjäÅh]”hŒ Description”…”�”}”(hjæÅh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hjâÅubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´MÌhj„ÅubhÌ)�”}”(hŒvChecks whether a fence was signaled and signals it if it was not yet signaled. All this is done in a race-free manner.”h]”hŒvChecks whether a fence was signaled and signals it if it was not yet signaled. All this is done in a race-free manner.”…”�”}”(hjúÅh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´MËhj„ÅubhÌ)�”}”(hŒ **Return**”h]”jr )�”}”(hj Æh]”hŒReturn”…”�”}”(hj Æh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hj Æubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´MÎhj„ÅubhÌ)�”}”(hŒ9true if fence has been signaled already, false otherwise.”h]”hŒ9true if fence has been signaled already, false otherwise.”…”�”}”(hj!Æh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´MÏhj„Åubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jg hj�µh²hh³Nh´NubjÉ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÕŒdma_fence_signal (C function)”Œc.dma_fence_signal”hNt”auh1jÈhj�µh²hh³Nh´NubjÛ)�”}”(hhh]”(jà)�”}”(hŒ/void dma_fence_signal (struct dma_fence *fence)”h]”jæ)�”}”(hŒ.void dma_fence_signal(struct dma_fence *fence)”h]”(jM)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjPÆh²hh³Nh´Nubah}”(h]”h ]”jYah"]”h$]”h&]”uh1jLhjLÆh²hh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´Mßubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj_Æh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjLÆh²hh³j^Æh´Mßubj )�”}”(hŒdma_fence_signal”h]”j )�”}”(hŒdma_fence_signal”h]”hŒdma_fence_signal”…”�”}”(hjqÆh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjmÆubah}”(h]”h ]”(j' j( eh"]”h$]”h&]”j÷jøuh1j hjLÆh²hh³j^Æh´MßubjŒ)�”}”(hŒ(struct dma_fence *fence)”h]”j’)�”}”(hŒstruct dma_fence *fence”h]”(jì)�”}”(hjïh]”hŒstruct”…”�”}”(hj�Æh²hh³Nh´Nubah}”(h]”h ]”jøah"]”h$]”h&]”uh1jëhj‰Æubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjšÆh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj‰Æubh)�”}”(hhh]”j )�”}”(hŒ dma_fence”h]”hŒ dma_fence”…”�”}”(hj«Æh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj¨Æubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jîŒreftype”jGŒ reftarget”j­ÆŒmodname”NŒ classname”Nj³j¶)�”}”j¹]”jO)�”}”jGjsÆsbŒc.dma_fence_signal”†”asbuh1hhj‰Æubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjËÆh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj‰Æubjd)�”}”(hjgh]”hŒ*”…”�”}”(hjÙÆh²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchj‰Æubj )�”}”(hŒfence”h]”hŒfence”…”�”}”(hjæÆh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj‰Æubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj÷jøuh1j‘hj…Æubah}”(h]”h ]”h"]”h$]”h&]”j÷jøuh1j‹hjLÆh²hh³j^Æh´Mßubeh}”(h]”h ]”h"]”h$]”h&]”j÷jøj2 ˆuh1jåj3 j4 hjHÆh²hh³j^Æh´Mßubah}”(h]”jCÆah ]”(j8 j9 eh"]”h$]”h&]”j= ˆj> )j? huh1jßh³j^Æh´MßhjEÆh²hubjA )�”}”(hhh]”hÌ)�”}”(hŒsignal completion of a fence”h]”hŒsignal completion of a fence”…”�”}”(hjÇh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´Mßhj Çh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j@ hjEÆh²hh³j^Æh´Mßubeh}”(h]”h ]”(jîŒfunction”eh"]”h$]”h&]”ja jîjb j(Çjc j(Çjd ‰je ‰jf ‰uh1jÚh²hhj�µh³Nh´Nubjh )�”}”(hXŽ**Parameters** ``struct dma_fence *fence`` the fence to signal **Description** Signal completion for software callbacks on a fence, this will unblock dma_fence_wait() calls and run all the callbacks added with dma_fence_add_callback(). Can be called multiple times, but since a fence can only go from the unsignaled to the signaled state and not back, it will only be effective the first time.”h]”(hÌ)�”}”(hŒ**Parameters**”h]”jr )�”}”(hj2Çh]”hŒ Parameters”…”�”}”(hj4Çh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hj0Çubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´Mãhj,Çubj´ )�”}”(hhh]”j¹ )�”}”(hŒ0``struct dma_fence *fence`` the fence to signal ”h]”(j¿ )�”}”(hŒ``struct dma_fence *fence``”h]”jâ)�”}”(hjQÇh]”hŒstruct dma_fence *fence”…”�”}”(hjSÇh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjOÇubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´MàhjKÇubjÙ )�”}”(hhh]”hÌ)�”}”(hŒthe fence to signal”h]”hŒthe fence to signal”…”�”}”(hjjÇh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jfÇh´MàhjgÇubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hjKÇubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³jfÇh´MàhjHÇubah}”(h]”h ]”h"]”h$]”h&]”uh1j³ hj,ÇubhÌ)�”}”(hŒ**Description**”h]”jr )�”}”(hjŒÇh]”hŒ Description”…”�”}”(hjŽÇh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hjŠÇubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´Mâhj,ÇubhÌ)�”}”(hX:Signal completion for software callbacks on a fence, this will unblock dma_fence_wait() calls and run all the callbacks added with dma_fence_add_callback(). Can be called multiple times, but since a fence can only go from the unsignaled to the signaled state and not back, it will only be effective the first time.”h]”hX:Signal completion for software callbacks on a fence, this will unblock dma_fence_wait() calls and run all the callbacks added with dma_fence_add_callback(). Can be called multiple times, but since a fence can only go from the unsignaled to the signaled state and not back, it will only be effective the first time.”…”�”}”(hj¢Çh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´Máhj,Çubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jg hj�µh²hh³Nh´NubjÉ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÕŒ#dma_fence_wait_timeout (C function)”Œc.dma_fence_wait_timeout”hNt”auh1jÈhj�µh²hh³Nh´NubjÛ)�”}”(hhh]”(jà)�”}”(hŒ\signed long dma_fence_wait_timeout (struct dma_fence *fence, bool intr, signed long timeout)”h]”jæ)�”}”(hŒ[signed long dma_fence_wait_timeout(struct dma_fence *fence, bool intr, signed long timeout)”h]”(jM)�”}”(hŒsigned”h]”hŒsigned”…”�”}”(hjÑÇh²hh³Nh´Nubah}”(h]”h ]”jYah"]”h$]”h&]”uh1jLhjÍÇh²hh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´Mûubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjàÇh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjÍÇh²hh³jßÇh´MûubjM)�”}”(hŒlong”h]”hŒlong”…”�”}”(hjîÇh²hh³Nh´Nubah}”(h]”h ]”jYah"]”h$]”h&]”uh1jLhjÍÇh²hh³jßÇh´Mûubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjüÇh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjÍÇh²hh³jßÇh´Mûubj )�”}”(hŒdma_fence_wait_timeout”h]”j )�”}”(hŒdma_fence_wait_timeout”h]”hŒdma_fence_wait_timeout”…”�”}”(hjÈh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj Èubah}”(h]”h ]”(j' j( eh"]”h$]”h&]”j÷jøuh1j hjÍÇh²hh³jßÇh´MûubjŒ)�”}”(hŒ9(struct dma_fence *fence, bool intr, signed long timeout)”h]”(j’)�”}”(hŒstruct dma_fence *fence”h]”(jì)�”}”(hjïh]”hŒstruct”…”�”}”(hj*Èh²hh³Nh´Nubah}”(h]”h ]”jøah"]”h$]”h&]”uh1jëhj&Èubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj7Èh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj&Èubh)�”}”(hhh]”j )�”}”(hŒ dma_fence”h]”hŒ dma_fence”…”�”}”(hjHÈh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjEÈubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jîŒreftype”jGŒ reftarget”jJÈŒmodname”NŒ classname”Nj³j¶)�”}”j¹]”jO)�”}”jGjÈsbŒc.dma_fence_wait_timeout”†”asbuh1hhj&Èubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjhÈh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj&Èubjd)�”}”(hjgh]”hŒ*”…”�”}”(hjvÈh²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchj&Èubj )�”}”(hŒfence”h]”hŒfence”…”�”}”(hjƒÈh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj&Èubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj÷jøuh1j‘hj"Èubj’)�”}”(hŒ bool intr”h]”(jM)�”}”(hji5h]”hŒbool”…”�”}”(hjœÈh²hh³Nh´Nubah}”(h]”h ]”jYah"]”h$]”h&]”uh1jLhj˜Èubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj©Èh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj˜Èubj )�”}”(hŒintr”h]”hŒintr”…”�”}”(hj·Èh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj˜Èubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj÷jøuh1j‘hj"Èubj’)�”}”(hŒsigned long timeout”h]”(jM)�”}”(hŒsigned”h]”hŒsigned”…”�”}”(hjÐÈh²hh³Nh´Nubah}”(h]”h ]”jYah"]”h$]”h&]”uh1jLhjÌÈubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÞÈh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjÌÈubjM)�”}”(hŒlong”h]”hŒlong”…”�”}”(hjìÈh²hh³Nh´Nubah}”(h]”h ]”jYah"]”h$]”h&]”uh1jLhjÌÈubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjúÈh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjÌÈubj )�”}”(hŒtimeout”h]”hŒtimeout”…”�”}”(hjÉh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjÌÈubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj÷jøuh1j‘hj"Èubeh}”(h]”h ]”h"]”h$]”h&]”j÷jøuh1j‹hjÍÇh²hh³jßÇh´Mûubeh}”(h]”h ]”h"]”h$]”h&]”j÷jøj2 ˆuh1jåj3 j4 hjÉÇh²hh³jßÇh´Mûubah}”(h]”jÄÇah ]”(j8 j9 eh"]”h$]”h&]”j= ˆj> )j? huh1jßh³jßÇh´MûhjÆÇh²hubjA )�”}”(hhh]”hÌ)�”}”(hŒ )j? huh1jßh³j‘Êh´M5hjxÊh²hubjA )�”}”(hhh]”hÌ)�”}”(hŒ#default release function for fences”h]”hŒ#default release function for fences”…”�”}”(hjCËh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´M5hj@Ëh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j@ hjxÊh²hh³j‘Êh´M5ubeh}”(h]”h ]”(jîŒfunction”eh"]”h$]”h&]”ja jîjb j[Ëjc j[Ëjd ‰je ‰jf ‰uh1jÚh²hhj�µh³Nh´Nubjh )�”}”(hŒé**Parameters** ``struct kref *kref`` :c:type:`dma_fence.recfount ` **Description** This is the default release functions for :c:type:`dma_fence`. Drivers shouldn't call this directly, but instead call dma_fence_put().”h]”(hÌ)�”}”(hŒ**Parameters**”h]”jr )�”}”(hjeËh]”hŒ Parameters”…”�”}”(hjgËh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hjcËubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´M9hj_Ëubj´ )�”}”(hhh]”j¹ )�”}”(hŒ?``struct kref *kref`` :c:type:`dma_fence.recfount ` ”h]”(j¿ )�”}”(hŒ``struct kref *kref``”h]”jâ)�”}”(hj„Ëh]”hŒstruct kref *kref”…”�”}”(hj†Ëh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj‚Ëubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´M6hj~ËubjÙ )�”}”(hhh]”hÌ)�”}”(hŒ(:c:type:`dma_fence.recfount `”h]”h)�”}”(hjŸËh]”jâ)�”}”(hjŸËh]”hŒdma_fence.recfount”…”�”}”(hj¤Ëh²hh³Nh´Nubah}”(h]”h ]”(jíjîŒc-type”eh"]”h$]”h&]”uh1jáhj¡Ëubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”júŒ refdomain”jîŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰j³j·jŒ dma_fence”uh1hh³j™Ëh´M6hj�Ëubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j™Ëh´M6hjšËubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hj~Ëubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³j™Ëh´M6hj{Ëubah}”(h]”h ]”h"]”h$]”h&]”uh1j³ hj_ËubhÌ)�”}”(hŒ**Description**”h]”jr )�”}”(hjÙËh]”hŒ Description”…”�”}”(hjÛËh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hj×Ëubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´M8hj_ËubhÌ)�”}”(hŒ†This is the default release functions for :c:type:`dma_fence`. Drivers shouldn't call this directly, but instead call dma_fence_put().”h]”(hŒ*This is the default release functions for ”…”�”}”(hjïËh²hh³Nh´Nubh)�”}”(hŒ:c:type:`dma_fence`”h]”jâ)�”}”(hjùËh]”hŒ dma_fence”…”�”}”(hjûËh²hh³Nh´Nubah}”(h]”h ]”(jíjîŒc-type”eh"]”h$]”h&]”uh1jáhj÷Ëubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”júŒ refdomain”jîŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰j³j·jŒ dma_fence”uh1hh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´M7hjïËubhŒK. Drivers shouldn’t call this directly, but instead call dma_fence_put().”…”�”}”(hjïËh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jÌh´M7hj_Ëubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jg hj�µh²hh³Nh´NubjÉ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÕŒdma_fence_free (C function)”Œc.dma_fence_free”hNt”auh1jÈhj�µh²hh³Nh´NubjÛ)�”}”(hhh]”(jà)�”}”(hŒ-void dma_fence_free (struct dma_fence *fence)”h]”jæ)�”}”(hŒ,void dma_fence_free(struct dma_fence *fence)”h]”(jM)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjAÌh²hh³Nh´Nubah}”(h]”h ]”jYah"]”h$]”h&]”uh1jLhj=Ìh²hh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´Miubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjPÌh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj=Ìh²hh³jOÌh´Miubj )�”}”(hŒdma_fence_free”h]”j )�”}”(hŒdma_fence_free”h]”hŒdma_fence_free”…”�”}”(hjbÌh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj^Ìubah}”(h]”h ]”(j' j( eh"]”h$]”h&]”j÷jøuh1j hj=Ìh²hh³jOÌh´MiubjŒ)�”}”(hŒ(struct dma_fence *fence)”h]”j’)�”}”(hŒstruct dma_fence *fence”h]”(jì)�”}”(hjïh]”hŒstruct”…”�”}”(hj~Ìh²hh³Nh´Nubah}”(h]”h ]”jøah"]”h$]”h&]”uh1jëhjzÌubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‹Ìh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjzÌubh)�”}”(hhh]”j )�”}”(hŒ dma_fence”h]”hŒ dma_fence”…”�”}”(hjœÌh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj™Ìubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jîŒreftype”jGŒ reftarget”jžÌŒmodname”NŒ classname”Nj³j¶)�”}”j¹]”jO)�”}”jGjdÌsbŒc.dma_fence_free”†”asbuh1hhjzÌubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¼Ìh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjzÌubjd)�”}”(hjgh]”hŒ*”…”�”}”(hjÊÌh²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchjzÌubj )�”}”(hŒfence”h]”hŒfence”…”�”}”(hj×Ìh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjzÌubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj÷jøuh1j‘hjvÌubah}”(h]”h ]”h"]”h$]”h&]”j÷jøuh1j‹hj=Ìh²hh³jOÌh´Miubeh}”(h]”h ]”h"]”h$]”h&]”j÷jøj2 ˆuh1jåj3 j4 hj9Ìh²hh³jOÌh´Miubah}”(h]”j4Ìah ]”(j8 j9 eh"]”h$]”h&]”j= ˆj> )j? huh1jßh³jOÌh´Mihj6Ìh²hubjA )�”}”(hhh]”hÌ)�”}”(hŒ1default release function for :c:type:`dma_fence`.”h]”(hŒdefault release function for ”…”�”}”(hjÍh²hh³Nh´Nubh)�”}”(hŒ:c:type:`dma_fence`”h]”jâ)�”}”(hj Íh]”hŒ dma_fence”…”�”}”(hj Íh²hh³Nh´Nubah}”(h]”h ]”(jíjîŒc-type”eh"]”h$]”h&]”uh1jáhj Íubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”júŒ refdomain”jîŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰j³j¶)�”}”j¹]”j¸ÌŒc.dma_fence_free”†”asbjŒ dma_fence”uh1hh³jÔµh´K†hjÍubhŒ.”…”�”}”(hjÍh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´MihjþÌh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j@ hj6Ìh²hh³jOÌh´Miubeh}”(h]”h ]”(jîŒfunction”eh"]”h$]”h&]”ja jîjb jAÍjc jAÍjd ‰je ‰jf ‰uh1jÚh²hhj�µh³Nh´Nubjh )�”}”(hŒË**Parameters** ``struct dma_fence *fence`` fence to release **Description** This is the default implementation for :c:type:`dma_fence_ops.release `. It calls kfree_rcu() on **fence**.”h]”(hÌ)�”}”(hŒ**Parameters**”h]”jr )�”}”(hjKÍh]”hŒ Parameters”…”�”}”(hjMÍh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hjIÍubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´MmhjEÍubj´ )�”}”(hhh]”j¹ )�”}”(hŒ-``struct dma_fence *fence`` fence to release ”h]”(j¿ )�”}”(hŒ``struct dma_fence *fence``”h]”jâ)�”}”(hjjÍh]”hŒstruct dma_fence *fence”…”�”}”(hjlÍh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjhÍubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´MjhjdÍubjÙ )�”}”(hhh]”hÌ)�”}”(hŒfence to release”h]”hŒfence to release”…”�”}”(hjƒÍh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jÍh´Mjhj€Íubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hjdÍubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³jÍh´MjhjaÍubah}”(h]”h ]”h"]”h$]”h&]”uh1j³ hjEÍubhÌ)�”}”(hŒ**Description**”h]”jr )�”}”(hj¥Íh]”hŒ Description”…”�”}”(hj§Íh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hj£Íubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´MlhjEÍubhÌ)�”}”(hŒzThis is the default implementation for :c:type:`dma_fence_ops.release `. It calls kfree_rcu() on **fence**.”h]”(hŒ'This is the default implementation for ”…”�”}”(hj»Íh²hh³Nh´Nubh)�”}”(hŒ/:c:type:`dma_fence_ops.release `”h]”jâ)�”}”(hjÅÍh]”hŒdma_fence_ops.release”…”�”}”(hjÇÍh²hh³Nh´Nubah}”(h]”h ]”(jíjîŒc-type”eh"]”h$]”h&]”uh1jáhjÃÍubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”júŒ refdomain”jîŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰j³j·jŒ dma_fence_ops”uh1hh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´Mkhj»ÍubhŒ. It calls kfree_rcu() on ”…”�”}”(hj»Íh²hh³Nh´Nubjr )�”}”(hŒ **fence**”h]”hŒfence”…”�”}”(hjçÍh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hj»ÍubhŒ.”…”�”}”(hj»Íh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jâÍh´MkhjEÍubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jg hj�µh²hh³Nh´NubjÉ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÕŒ'dma_fence_enable_signaling (C function)”Œc.dma_fence_enable_signaling”hNt”auh1jÈhj�µh²hh³Nh´NubjÛ)�”}”(hhh]”(jà)�”}”(hŒ9void dma_fence_enable_signaling (struct dma_fence *fence)”h]”jæ)�”}”(hŒ8void dma_fence_enable_signaling(struct dma_fence *fence)”h]”(jM)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjÎh²hh³Nh´Nubah}”(h]”h ]”jYah"]”h$]”h&]”uh1jLhjÎh²hh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´M“ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj.Îh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjÎh²hh³j-Îh´M“ubj )�”}”(hŒdma_fence_enable_signaling”h]”j )�”}”(hŒdma_fence_enable_signaling”h]”hŒdma_fence_enable_signaling”…”�”}”(hj@Îh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj<Îubah}”(h]”h ]”(j' j( eh"]”h$]”h&]”j÷jøuh1j hjÎh²hh³j-Îh´M“ubjŒ)�”}”(hŒ(struct dma_fence *fence)”h]”j’)�”}”(hŒstruct dma_fence *fence”h]”(jì)�”}”(hjïh]”hŒstruct”…”�”}”(hj\Îh²hh³Nh´Nubah}”(h]”h ]”jøah"]”h$]”h&]”uh1jëhjXÎubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjiÎh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjXÎubh)�”}”(hhh]”j )�”}”(hŒ dma_fence”h]”hŒ dma_fence”…”�”}”(hjzÎh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjwÎubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jîŒreftype”jGŒ reftarget”j|ÎŒmodname”NŒ classname”Nj³j¶)�”}”j¹]”jO)�”}”jGjBÎsbŒc.dma_fence_enable_signaling”†”asbuh1hhjXÎubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjšÎh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjXÎubjd)�”}”(hjgh]”hŒ*”…”�”}”(hj¨Îh²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchjXÎubj )�”}”(hŒfence”h]”hŒfence”…”�”}”(hjµÎh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjXÎubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj÷jøuh1j‘hjTÎubah}”(h]”h ]”h"]”h$]”h&]”j÷jøuh1j‹hjÎh²hh³j-Îh´M“ubeh}”(h]”h ]”h"]”h$]”h&]”j÷jøj2 ˆuh1jåj3 j4 hjÎh²hh³j-Îh´M“ubah}”(h]”jÎah ]”(j8 j9 eh"]”h$]”h&]”j= ˆj> )j? huh1jßh³j-Îh´M“hjÎh²hubjA )�”}”(hhh]”hÌ)�”}”(hŒenable signaling on fence”h]”hŒenable signaling on fence”…”�”}”(hjßÎh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´M“hjÜÎh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j@ hjÎh²hh³j-Îh´M“ubeh}”(h]”h ]”(jîŒfunction”eh"]”h$]”h&]”ja jîjb j÷Îjc j÷Îjd ‰je ‰jf ‰uh1jÚh²hhj�µh³Nh´Nubjh )�”}”(hX**Parameters** ``struct dma_fence *fence`` the fence to enable **Description** This will request for sw signaling to be enabled, to make the fence complete as soon as possible. This calls :c:type:`dma_fence_ops.enable_signaling ` internally.”h]”(hÌ)�”}”(hŒ**Parameters**”h]”jr )�”}”(hjÏh]”hŒ Parameters”…”�”}”(hjÏh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hjÿÎubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´M—hjûÎubj´ )�”}”(hhh]”j¹ )�”}”(hŒ0``struct dma_fence *fence`` the fence to enable ”h]”(j¿ )�”}”(hŒ``struct dma_fence *fence``”h]”jâ)�”}”(hj Ïh]”hŒstruct dma_fence *fence”…”�”}”(hj"Ïh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjÏubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´M”hjÏubjÙ )�”}”(hhh]”hÌ)�”}”(hŒthe fence to enable”h]”hŒthe fence to enable”…”�”}”(hj9Ïh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j5Ïh´M”hj6Ïubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hjÏubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³j5Ïh´M”hjÏubah}”(h]”h ]”h"]”h$]”h&]”uh1j³ hjûÎubhÌ)�”}”(hŒ**Description**”h]”jr )�”}”(hj[Ïh]”hŒ Description”…”�”}”(hj]Ïh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hjYÏubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´M–hjûÎubhÌ)�”}”(hŒ±This will request for sw signaling to be enabled, to make the fence complete as soon as possible. This calls :c:type:`dma_fence_ops.enable_signaling ` internally.”h]”(hŒmThis will request for sw signaling to be enabled, to make the fence complete as soon as possible. This calls ”…”�”}”(hjqÏh²hh³Nh´Nubh)�”}”(hŒ8:c:type:`dma_fence_ops.enable_signaling `”h]”jâ)�”}”(hj{Ïh]”hŒdma_fence_ops.enable_signaling”…”�”}”(hj}Ïh²hh³Nh´Nubah}”(h]”h ]”(jíjîŒc-type”eh"]”h$]”h&]”uh1jáhjyÏubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”júŒ refdomain”jîŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰j³j·jŒ dma_fence_ops”uh1hh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´M•hjqÏubhŒ internally.”…”�”}”(hjqÏh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j˜Ïh´M•hjûÎubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jg hj�µh²hh³Nh´NubjÉ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÕŒ#dma_fence_add_callback (C function)”Œc.dma_fence_add_callback”hNt”auh1jÈhj�µh²hh³Nh´NubjÛ)�”}”(hhh]”(jà)�”}”(hŒdint dma_fence_add_callback (struct dma_fence *fence, struct dma_fence_cb *cb, dma_fence_func_t func)”h]”jæ)�”}”(hŒcint dma_fence_add_callback(struct dma_fence *fence, struct dma_fence_cb *cb, dma_fence_func_t func)”h]”(jM)�”}”(hŒint”h]”hŒint”…”�”}”(hjÃÏh²hh³Nh´Nubah}”(h]”h ]”jYah"]”h$]”h&]”uh1jLhj¿Ïh²hh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´M¥ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÒÏh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj¿Ïh²hh³jÑÏh´M¥ubj )�”}”(hŒdma_fence_add_callback”h]”j )�”}”(hŒdma_fence_add_callback”h]”hŒdma_fence_add_callback”…”�”}”(hjäÏh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjàÏubah}”(h]”h ]”(j' j( eh"]”h$]”h&]”j÷jøuh1j hj¿Ïh²hh³jÑÏh´M¥ubjŒ)�”}”(hŒI(struct dma_fence *fence, struct dma_fence_cb *cb, dma_fence_func_t func)”h]”(j’)�”}”(hŒstruct dma_fence *fence”h]”(jì)�”}”(hjïh]”hŒstruct”…”�”}”(hjÐh²hh³Nh´Nubah}”(h]”h ]”jøah"]”h$]”h&]”uh1jëhjüÏubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj Ðh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjüÏubh)�”}”(hhh]”j )�”}”(hŒ dma_fence”h]”hŒ dma_fence”…”�”}”(hjÐh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjÐubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jîŒreftype”jGŒ reftarget”j ÐŒmodname”NŒ classname”Nj³j¶)�”}”j¹]”jO)�”}”jGjæÏsbŒc.dma_fence_add_callback”†”asbuh1hhjüÏubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj>Ðh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjüÏubjd)�”}”(hjgh]”hŒ*”…”�”}”(hjLÐh²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchjüÏubj )�”}”(hŒfence”h]”hŒfence”…”�”}”(hjYÐh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjüÏubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj÷jøuh1j‘hjøÏubj’)�”}”(hŒstruct dma_fence_cb *cb”h]”(jì)�”}”(hjïh]”hŒstruct”…”�”}”(hjrÐh²hh³Nh´Nubah}”(h]”h ]”jøah"]”h$]”h&]”uh1jëhjnÐubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÐh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjnÐubh)�”}”(hhh]”j )�”}”(hŒ dma_fence_cb”h]”hŒ dma_fence_cb”…”�”}”(hj�Ðh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj�Ðubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jîŒreftype”jGŒ reftarget”j’ÐŒmodname”NŒ classname”Nj³j¶)�”}”j¹]”j:ÐŒc.dma_fence_add_callback”†”asbu•h1hhjnÐubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj®Ðh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjnÐubjd)�”}”(hjgh]”hŒ*”…”�”}”(hj¼Ðh²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchjnÐubj )�”}”(hŒcb”h]”hŒcb”…”�”}”(hjÉÐh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjnÐubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj÷jøuh1j‘hjøÏubj’)�”}”(hŒdma_fence_func_t func”h]”(h)�”}”(hhh]”j )�”}”(hŒdma_fence_func_t”h]”hŒdma_fence_func_t”…”�”}”(hjåÐh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjâÐubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jîŒreftype”jGŒ reftarget”jçÐŒmodname”NŒ classname”Nj³j¶)�”}”j¹]”j:ÐŒc.dma_fence_add_callback”†”asbuh1hhjÞÐubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÑh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjÞÐubj )�”}”(hŒfunc”h]”hŒfunc”…”�”}”(hjÑh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjÞÐubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj÷jøuh1j‘hjøÏubeh}”(h]”h ]”h"]”h$]”h&]”j÷jøuh1j‹hj¿Ïh²hh³jÑÏh´M¥ubeh}”(h]”h ]”h"]”h$]”h&]”j÷jøj2 ˆuh1jåj3 j4 hj»Ïh²hh³jÑÏh´M¥ubah}”(h]”j¶Ïah ]”(j8 j9 eh"]”h$]”h&]”j= ˆj> )j? huh1jßh³jÑÏh´M¥hj¸Ïh²hubjA )�”}”(hhh]”hÌ)�”}”(hŒ6add a callback to be called when the fence is signaled”h]”hŒ6add a callback to be called when the fence is signaled”…”�”}”(hj;Ñh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´M¥hj8Ñh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j@ hj¸Ïh²hh³jÑÏh´M¥ubeh}”(h]”h ]”(jîŒfunction”eh"]”h$]”h&]”ja jîjb jSÑjc jSÑjd ‰je ‰jf ‰uh1jÚh²hhj�µh³Nh´Nubjh )�”}”(hX**Parameters** ``struct dma_fence *fence`` the fence to wait on ``struct dma_fence_cb *cb`` the callback to register ``dma_fence_func_t func`` the function to call **Description** Add a software callback to the fence. The caller should keep a reference to the fence. **cb** will be initialized by dma_fence_add_callback(), no initialization by the caller is required. Any number of callbacks can be registered to a fence, but a callback can only be registered to one fence at a time. If fence is already signaled, this function will return -ENOENT (and *not* call the callback). Note that the callback can be called from an atomic context or irq context. Returns 0 in case of success, -ENOENT if the fence is already signaled and -EINVAL in case of error.”h]”(hÌ)�”}”(hŒ**Parameters**”h]”jr )�”}”(hj]Ñh]”hŒ Parameters”…”�”}”(hj_Ñh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hj[Ñubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´M©hjWÑubj´ )�”}”(hhh]”(j¹ )�”}”(hŒ1``struct dma_fence *fence`` the fence to wait on ”h]”(j¿ )�”}”(hŒ``struct dma_fence *fence``”h]”jâ)�”}”(hj|Ñh]”hŒstruct dma_fence *fence”…”�”}”(hj~Ñh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjzÑubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´M§hjvÑubjÙ )�”}”(hhh]”hÌ)�”}”(hŒthe fence to wait on”h]”hŒthe fence to wait on”…”�”}”(hj•Ñh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j‘Ñh´M§hj’Ñubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hjvÑubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³j‘Ñh´M§hjsÑubj¹ )�”}”(hŒ5``struct dma_fence_cb *cb`` the callback to register ”h]”(j¿ )�”}”(hŒ``struct dma_fence_cb *cb``”h]”jâ)�”}”(hjµÑh]”hŒstruct dma_fence_cb *cb”…”�”}”(hj·Ñh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj³Ñubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´M¨hj¯ÑubjÙ )�”}”(hhh]”hÌ)�”}”(hŒthe callback to register”h]”hŒthe callback to register”…”�”}”(hjÎÑh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jÊÑh´M¨hjËÑubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hj¯Ñubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³jÊÑh´M¨hjsÑubj¹ )�”}”(hŒ/``dma_fence_func_t func`` the function to call ”h]”(j¿ )�”}”(hŒ``dma_fence_func_t func``”h]”jâ)�”}”(hjîÑh]”hŒdma_fence_func_t func”…”�”}”(hjðÑh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjìÑubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´M©hjèÑubjÙ )�”}”(hhh]”hÌ)�”}”(hŒthe function to call”h]”hŒthe function to call”…”�”}”(hjÒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jÒh´M©hjÒubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hjèÑubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³jÒh´M©hjsÑubeh}”(h]”h ]”h"]”h$]”h&]”uh1j³ hjWÑubhÌ)�”}”(hŒ**Description**”h]”jr )�”}”(hj)Òh]”hŒ Description”…”�”}”(hj+Òh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hj'Òubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´M«hjWÑubhÌ)�”}”(hŒVAdd a software callback to the fence. The caller should keep a reference to the fence.”h]”hŒVAdd a software callback to the fence. The caller should keep a reference to the fence.”…”�”}”(hj?Òh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´MªhjWÑubhÌ)�”}”(hŒØ**cb** will be initialized by dma_fence_add_callback(), no initialization by the caller is required. Any number of callbacks can be registered to a fence, but a callback can only be registered to one fence at a time.”h]”(jr )�”}”(hŒ**cb**”h]”hŒcb”…”�”}”(hjRÒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hjNÒubhŒÒ will be initialized by dma_fence_add_callback(), no initialization by the caller is required. Any number of callbacks can be registered to a fence, but a callback can only be registered to one fence at a time.”…”�”}”(hjNÒh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´M­hjWÑubhÌ)�”}”(hŒ^If fence is already signaled, this function will return -ENOENT (and *not* call the callback).”h]”(hŒEIf fence is already signaled, this function will return -ENOENT (and ”…”�”}”(hjkÒh²hh³Nh´Nubj ‹)�”}”(hŒ*not*”h]”hŒnot”…”�”}”(hjsÒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j ‹hjkÒubhŒ call the callback).”…”�”}”(hjkÒh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´M±hjWÑubhÌ)�”}”(hŒKNote that the callback can be called from an atomic context or irq context.”h]”hŒKNote that the callback can be called from an atomic context or irq context.”…”�”}”(hjŒÒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´M´hjWÑubhÌ)�”}”(hŒdReturns 0 in case of success, -ENOENT if the fence is already signaled and -EINVAL in case of error.”h]”hŒdReturns 0 in case of success, -ENOENT if the fence is already signaled and -EINVAL in case of error.”…”�”}”(hj›Òh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´M¶hjWÑubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jg hj�µh²hh³Nh´NubjÉ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÕŒ!dma_fence_get_status (C function)”Œc.dma_fence_get_status”hNt”auh1jÈhj�µh²hh³Nh´NubjÛ)�”}”(hhh]”(jà)�”}”(hŒ2int dma_fence_get_status (struct dma_fence *fence)”h]”jæ)�”}”(hŒ1int dma_fence_get_status(struct dma_fence *fence)”h]”(jM)�”}”(hŒint”h]”hŒint”…”�”}”(hjÊÒh²hh³Nh´Nubah}”(h]”h ]”jYah"]”h$]”h&]”uh1jLhjÆÒh²hh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´M×ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÙÒh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjÆÒh²hh³jØÒh´M×ubj )�”}”(hŒdma_fence_get_status”h]”j )�”}”(hŒdma_fence_get_status”h]”hŒdma_fence_get_status”…”�”}”(hjëÒh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjçÒubah}”(h]”h ]”(j' j( eh"]”h$]”h&]”j÷jøuh1j hjÆÒh²hh³jØÒh´M×ubjŒ)�”}”(hŒ(struct dma_fence *fence)”h]”j’)�”}”(hŒstruct dma_fence *fence”h]”(jì)�”}”(hjïh]”hŒstruct”…”�”}”(hjÓh²hh³Nh´Nubah}”(h]”h ]”jøah"]”h$]”h&]”uh1jëhjÓubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÓh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjÓubh)�”}”(hhh]”j )�”}”(hŒ dma_fence”h]”hŒ dma_fence”…”�”}”(hj%Óh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj"Óubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jîŒreftype”jGŒ reftarget”j'ÓŒmodname”NŒ classname”Nj³j¶)�”}”j¹]”jO)�”}”jGjíÒsbŒc.dma_fence_get_status”†”asbuh1hhjÓubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjEÓh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjÓubjd)�”}”(hjgh]”hŒ*”…”�”}”(hjSÓh²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchjÓubj )�”}”(hŒfence”h]”hŒfence”…”�”}”(hj`Óh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjÓubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj÷jøuh1j‘hjÿÒubah}”(h]”h ]”h"]”h$]”h&]”j÷jøuh1j‹hjÆÒh²hh³jØÒh´M×ubeh}”(h]”h ]”h"]”h$]”h&]”j÷jøj2 ˆuh1jåj3 j4 hjÂÒh²hh³jØÒh´M×ubah}”(h]”j½Òah ]”(j8 j9 eh"]”h$]”h&]”j= ˆj> )j? huh1jßh³jØÒh´M×hj¿Òh²hubjA )�”}”(hhh]”hÌ)�”}”(hŒ"returns the status upon completion”h]”hŒ"returns the status upon completion”…”�”}”(hjŠÓh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´M×hj‡Óh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j@ hj¿Òh²hh³jØÒh´M×ubeh}”(h]”h ]”(jîŒfunction”eh"]”h$]”h&]”ja jîjb j¢Ójc j¢Ójd ‰je ‰jf ‰uh1jÚh²hhj�µh³Nh´Nubjh )�”}”(hXž**Parameters** ``struct dma_fence *fence`` the dma_fence to query **Description** This wraps dma_fence_get_status_locked() to return the error status condition on a signaled fence. See dma_fence_get_status_locked() for more details. Returns 0 if the fence has not yet been signaled, 1 if the fence has been signaled without an error condition, or a negative error code if the fence has been completed in err.”h]”(hÌ)�”}”(hŒ**Parameters**”h]”jr )�”}”(hj¬Óh]”hŒ Parameters”…”�”}”(hj®Óh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hjªÓubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´MÛhj¦Óubj´ )�”}”(hhh]”j¹ )�”}”(hŒ3``struct dma_fence *fence`` the dma_fence to query ”h]”(j¿ )�”}”(hŒ``struct dma_fence *fence``”h]”jâ)�”}”(hjËÓh]”hŒstruct dma_fence *fence”…”�”}”(hjÍÓh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjÉÓubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´MØhjÅÓubjÙ )�”}”(hhh]”hÌ)�”}”(hŒthe dma_fence to query”h]”hŒthe dma_fence to query”…”�”}”(hjäÓh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jàÓh´MØhjáÓubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hjÅÓubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³jàÓh´MØhjÂÓubah}”(h]”h ]”h"]”h$]”h&]”uh1j³ hj¦ÓubhÌ)�”}”(hŒ**Description**”h]”jr )�”}”(hjÔh]”hŒ Description”…”�”}”(hjÔh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hjÔubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´MÚhj¦ÓubhÌ)�”}”(hŒ–This wraps dma_fence_get_status_locked() to return the error status condition on a signaled fence. See dma_fence_get_status_locked() for more details.”h]”hŒ–This wraps dma_fence_get_status_locked() to return the error status condition on a signaled fence. See dma_fence_get_status_locked() for more details.”…”�”}”(hjÔh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´MÙhj¦ÓubhÌ)�”}”(hŒ¯Returns 0 if the fence has not yet been signaled, 1 if the fence has been signaled without an error condition, or a negative error code if the fence has been completed in err.”h]”hŒ¯Returns 0 if the fence has not yet been signaled, 1 if the fence has been signaled without an error condition, or a negative error code if the fence has been completed in err.”…”�”}”(hj+Ôh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´MÝhj¦Óubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jg hj�µh²hh³Nh´NubjÉ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÕŒ&dma_fence_remove_callback (C function)”Œc.dma_fence_remove_callback”hNt”auh1jÈhj�µh²hh³Nh´NubjÛ)�”}”(hhh]”(jà)�”}”(hŒQbool dma_fence_remove_callback (struct dma_fence *fence, struct dma_fence_cb *cb)”h]”jæ)�”}”(hŒPbool dma_fence_remove_callback(struct dma_fence *fence, struct dma_fence_cb *cb)”h]”(jM)�”}”(hji5h]”hŒbool”…”�”}”(hjZÔh²hh³Nh´Nubah}”(h]”h ]”jYah"]”h$]”h&]”uh1jLhjVÔh²hh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´Mðubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjhÔh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjVÔh²hh³jgÔh´Mðubj )�”}”(hŒdma_fence_remove_callback”h]”j )�”}”(hŒdma_fence_remove_callback”h]”hŒdma_fence_remove_callback”…”�”}”(hjzÔh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjvÔubah}”(h]”h ]”(j' j( eh"]”h$]”h&]”j÷jøuh1j hjVÔh²hh³jgÔh´MðubjŒ)�”}”(hŒ2(struct dma_fence *fence, struct dma_fence_cb *cb)”h]”(j’)�”}”(hŒstruct dma_fence *fence”h]”(jì)�”}”(hjïh]”hŒstruct”…”�”}”(hj–Ôh²hh³Nh´Nubah}”(h]”h ]”jøah"]”h$]”h&]”uh1jëhj’Ôubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj£Ôh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj’Ôubh)�”}”(hhh]”j )�”}”(hŒ dma_fence”h]”hŒ dma_fence”…”�”}”(hj´Ôh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj±Ôubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jîŒreftype”jGŒ reftarget”j¶ÔŒmodname”NŒ classname”Nj³j¶)�”}”j¹]”jO)�”}”jGj|ÔsbŒc.dma_fence_remove_callback”†”asbuh1hhj’Ôubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÔÔh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj’Ôubjd)�”}”(hjgh]”hŒ*”…”�”}”(hjâÔh²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchj’Ôubj )�”}”(hŒfence”h]”hŒfence”…”�”}”(hjïÔh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj’Ôubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj÷jøuh1j‘hjŽÔubj’)�”}”(hŒstruct dma_fence_cb *cb”h]”(jì)�”}”(hjïh]”hŒstruct”…”�”}”(hjÕh²hh³Nh´Nubah}”(h]”h ]”jøah"]”h$]”h&]”uh1jëhjÕubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÕh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjÕubh)�”}”(hhh]”j )�”}”(hŒ dma_fence_cb”h]”hŒ dma_fence_cb”…”�”}”(hj&Õh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj#Õubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jîŒreftype”jGŒ reftarget”j(ÕŒmodname”NŒ classname”Nj³j¶)�”}”j¹]”jÐÔŒc.dma_fence_remove_callback”†”asbuh1hhjÕubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjDÕh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjÕubjd)�”}”(hjgh]”hŒ*”…”�”}”(hjRÕh²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchjÕubj )�”}”(hŒcb”h]”hŒcb”…”�”}”(hj_Õh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjÕubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj÷jøuh1j‘hjŽÔubeh}”(h]”h ]”h"]”h$]”h&]”j÷jøuh1j‹hjVÔh²hh³jgÔh´Mðubeh}”(h]”h ]”h"]”h$]”h&]”j÷jøj2 ˆuh1jåj3 j4 hjRÔh²hh³jgÔh´Mðubah}”(h]”jMÔah ]”(j8 j9 eh"]”h$]”h&]”j= ˆj> )j? huh1jßh³jgÔh´MðhjOÔh²hubjA )�”}”(hhh]”hÌ)�”}”(hŒ)remove a callback from the signaling list”h]”hŒ)remove a callback from the signaling list”…”�”}”(hj‰Õh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´Mðhj†Õh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j@ hjOÔh²hh³jgÔh´Mðubeh}”(h]”h ]”(jîŒfunction”eh"]”h$]”h&]”ja jîjb j¡Õjc j¡Õjd ‰je ‰jf ‰uh1jÚh²hhj�µh³Nh´Nubjh )�”}”(hXª**Parameters** ``struct dma_fence *fence`` the fence to wait on ``struct dma_fence_cb *cb`` the callback to remove **Description** Remove a previously queued callback from the fence. This function returns true if the callback is successfully removed, or false if the fence has already been signaled. *WARNING*: Cancelling a callback should only be done if you really know what you're doing, since deadlocks and race conditions could occur all too easily. For this reason, it should only ever be done on hardware lockup recovery, with a reference held to the fence. Behaviour is undefined if **cb** has not been added to **fence** using dma_fence_add_callback() beforehand.”h]”(hÌ)�”}”(hŒ**Parameters**”h]”jr )�”}”(hj«Õh]”hŒ Parameters”…”�”}”(hj­Õh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hj©Õubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´Môhj¥Õubj´ )�”}”(hhh]”(j¹ )�”}”(hŒ1``struct dma_fence *fence`` the fence to wait on ”h]”(j¿ )�”}”(hŒ``struct dma_fence *fence``”h]”jâ)�”}”(hjÊÕh]”hŒstruct dma_fence *fence”…”�”}”(hjÌÕh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjÈÕubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´MñhjÄÕubjÙ )�”}”(hhh]”hÌ)�”}”(hŒthe fence to wait on”h]”hŒthe fence to wait on”…”�”}”(hjãÕh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jßÕh´MñhjàÕubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hjÄÕubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³jßÕh´MñhjÁÕubj¹ )�”}”(hŒ3``struct dma_fence_cb *cb`` the callback to remove ”h]”(j¿ )�”}”(hŒ``struct dma_fence_cb *cb``”h]”jâ)�”}”(hjÖh]”hŒstruct dma_fence_cb *cb”…”�”}”(hjÖh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjÖubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´MòhjýÕubjÙ )�”}”(hhh]”hÌ)�”}”(hŒthe callback to remove”h]”hŒthe callback to remove”…”�”}”(hjÖh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jÖh´MòhjÖubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hjýÕubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³jÖh´MòhjÁÕubeh}”(h]”h ]”h"]”h$]”h&]”uh1j³ hj¥ÕubhÌ)�”}”(hŒ**Description**”h]”jr )�”}”(hj>Öh]”hŒ Description”…”�”}”(hj@Öh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hj<Öubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´Môhj¥ÕubhÌ)�”}”(hŒ¨Remove a previously queued callback from the fence. This function returns true if the callback is successfully removed, or false if the fence has already been signaled.”h]”hŒ¨Remove a previously queued callback from the fence. This function returns true if the callback is successfully removed, or false if the fence has already been signaled.”…”�”}”(hjTÖh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´Móhj¥ÕubhÌ)�”}”(hX*WARNING*: Cancelling a callback should only be done if you really know what you're doing, since deadlocks and race conditions could occur all too easily. For this reason, it should only ever be done on hardware lockup recovery, with a reference held to the fence.”h]”(j ‹)�”}”(hŒ *WARNING*”h]”hŒWARNING”…”�”}”(hjgÖh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j ‹hjcÖubhX: Cancelling a callback should only be done if you really know what you’re doing, since deadlocks and race conditions could occur all too easily. For this reason, it should only ever be done on hardware lockup recovery, with a reference held to the fence.”…”�”}”(hjcÖh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´M÷hj¥ÕubhÌ)�”}”(hŒkBehaviour is undefined if **cb** has not been added to **fence** using dma_fence_add_callback() beforehand.”h]”(hŒBehaviour is undefined if ”…”�”}”(hj€Öh²hh³Nh´Nubjr )�”}”(hŒ**cb**”h]”hŒcb”…”�”}”(hjˆÖh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hj€ÖubhŒ has not been added to ”…”�”}”(hj€Öh²hh³Nh´Nubjr )�”}”(hŒ **fence**”h]”hŒfence”…”�”}”(hjšÖh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hj€ÖubhŒ+ using dma_fence_add_callback() beforehand.”…”�”}”(hj€Öh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´Mýhj¥Õubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jg hj�µh²hh³Nh´NubjÉ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÕŒ#dma_fence_default_wait (C function)”Œc.dma_fence_default_wait”hNt”auh1jÈhj�µh²hh³Nh´NubjÛ)�”}”(hhh]”(jà)�”}”(hŒ\signed long dma_fence_default_wait (struct dma_fence *fence, bool intr, signed long timeout)”h]”jæ)�”}”(hŒ[signed long dma_fence_default_wait(struct dma_fence *fence, bool intr, signed long timeout)”h]”(jM)�”}”(hŒsigned”h]”hŒsigned”…”�”}”(hjÓÖh²hh³Nh´Nubah}”(h]”h ]”jYah"]”h$]”h&]”uh1jLhjÏÖh²hh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´M ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjâÖh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjÏÖh²hh³jáÖh´M ubjM)�”}”(hŒlong”h]”hŒlong”…”�”}”(hjðÖh²hh³Nh´Nubah}”(h]”h ]”jYah"]”h$]”h&]”uh1jLhjÏÖh²hh³jáÖh´M ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjþÖh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjÏÖh²hh³jáÖh´M ubj )�”}”(hŒdma_fence_default_wait”h]”j )�”}”(hŒdma_fence_default_wait”h]”hŒdma_fence_default_wait”…”�”}”(hj×h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj ×ubah}”(h]”h ]”(j' j( eh"]”h$]”h&]”j÷jøuh1j hjÏÖh²hh³jáÖh´M ubjŒ)�”}”(hŒ9(struct dma_fence *fence, bool intr, signed long timeout)”h]”(j’)�”}”(hŒstruct dma_fence *fence”h]”(jì)�”}”(hjïh]”hŒstruct”…”�”}”(hj,×h²hh³Nh´Nubah}”(h]”h ]”jøah"]”h$]”h&]”uh1jëhj(×ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj9×h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj(×ubh)�”}”(hhh]”j )�”}”(hŒ dma_fence”h]”hŒ dma_fence”…”�”}”(hjJ×h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjG×ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jîŒreftype”jGŒ reftarget”jL׌modname”NŒ classname”Nj³j¶)�”}”j¹]”jO)�”}”jGj×sbŒc.dma_fence_default_wait”†”asbuh1hhj(×ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjj×h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj(×ubjd)�”}”(hjgh]”hŒ*”…”�”}”(hjx×h²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchj(×ubj )�”}”(hŒfence”h]”hŒfence”…”�”}”(hj…×h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj(×ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj÷jøuh1j‘hj$×ubj’)�”}”(hŒ bool intr”h]”(jM)�”}”(hji5h]”hŒbool”…”�”}”(hjž×h²hh³Nh´Nubah}”(h]”h ]”jYah"]”h$]”h&]”uh1jLhjš×ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj«×h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjš×ubj )�”}”(hŒintr”h]”hŒintr”…”�”}”(hj¹×h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjš×ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj÷jøuh1j‘hj$×ubj’)�”}”(hŒsigned long timeout”h]”(jM)�”}”(hŒsigned”h]”hŒsigned”…”�”}”(hjÒ×h²hh³Nh´Nubah}”(h]”h ]”jYah"]”h$]”h&]”uh1jLhjÎ×ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjà×h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjÎ×ubjM)�”}”(hŒlong”h]”hŒlong”…”�”}”(hjî×h²hh³Nh´Nubah}”(h]”h ]”jYah"]”h$]”h&]”uh1jLhjÎ×ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjü×h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjÎ×ubj )�”}”(hŒtimeout”h]”hŒtimeout”…”�”}”(hj Øh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjÎ×ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj÷jøuh1j‘hj$×ubeh}”(h]”h ]”h"]”h$]”h&]”j÷jøuh1j‹hjÏÖh²hh³jáÖh´M ubeh}”(h]”h ]”h"]”h$]”h&]”j÷jøj2 ˆuh1jåj3 j4 hjËÖh²hh³jáÖh´M ubah}”(h]”jÆÖah ]”(j8 j9 eh"]”h$]”h&]”j= ˆj> )j? huh1jßh³jáÖh´M hjÈÖh²hubjA )�”}”(hhh]”hÌ)�”}”(hŒDdefault sleep until the fence gets signaled or until timeout elapses”h]”hŒDdefault sleep until the fence gets signaled or until timeout elapses”…”�”}”(hj4Øh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´M hj1Øh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j@ hjÈÖh²hh³jáÖh´M ubeh}”(h]”h ]”(jîŒfunction”eh"]”h$]”h&]”ja jîjb jLØjc jLØjd ‰je ‰jf ‰uh1jÚh²hhj�µh³Nh´Nubjh )�”}”(hXÏ**Parameters** ``struct dma_fence *fence`` the fence to wait on ``bool intr`` if true, do an interruptible wait ``signed long timeout`` timeout value in jiffies, or MAX_SCHEDULE_TIMEOUT **Description** Returns -ERESTARTSYS if interrupted, 0 if the wait timed out, or the remaining timeout in jiffies on success. If timeout is zero the value one is returned if the fence is already signaled for consistency with other functions taking a jiffies timeout.”h]”(hÌ)�”}”(hŒ**Parameters**”h]”jr )�”}”(hjVØh]”hŒ Parameters”…”�”}”(hjXØh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hjTØubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´M$hjPØubj´ )�”}”(hhh]”(j¹ )�”}”(hŒ1``struct dma_fence *fence`` the fence to wait on ”h]”(j¿ )�”}”(hŒ``struct dma_fence *fence``”h]”jâ)�”}”(hjuØh]”hŒstruct dma_fence *fence”…”�”}”(hjwØh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjsØubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´M"hjoØubjÙ )�”}”(hhh]”hÌ)�”}”(hŒthe fence to wait on”h]”hŒthe fence to wait on”…”�”}”(hjŽØh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jŠØh´M"hj‹Øubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hjoØubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³jŠØh´M"hjlØubj¹ )�”}”(hŒ0``bool intr`` if true, do an interruptible wait ”h]”(j¿ )�”}”(hŒ ``bool intr``”h]”jâ)�”}”(hj®Øh]”hŒ bool intr”…”�”}”(hj°Øh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj¬Øubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´M#hj¨ØubjÙ )�”}”(hhh]”hÌ)�”}”(hŒ!if true, do an interruptible wait”h]”hŒ!if true, do an interruptible wait”…”�”}”(hjÇØh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jÃØh´M#hjÄØubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hj¨Øubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³jÃØh´M#hjlØubj¹ )�”}”(hŒJ``signed long timeout`` timeout value in jiffies, or MAX_SCHEDULE_TIMEOUT ”h]”(j¿ )�”}”(hŒ``signed long timeout``”h]”jâ)�”}”(hjçØh]”hŒsigned long timeout”…”�”}”(hjéØh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjåØubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´M$hjáØubjÙ )�”}”(hhh]”hÌ)�”}”(hŒ1timeout value in jiffies, or MAX_SCHEDULE_TIMEOUT”h]”hŒ1timeout value in jiffies, or MAX_SCHEDULE_TIMEOUT”…”�”}”(hjÙh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jüØh´M$hjýØubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hjáØubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³jüØh´M$hjlØubeh}”(h]”h ]”h"]”h$]”h&]”uh1j³ hjPØubhÌ)�”}”(hŒ**Description**”h]”jr )�”}”(hj"Ùh]”hŒ Description”…”�”}”(hj$Ùh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hj Ùubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´M&hjPØubhÌ)�”}”(hŒúReturns -ERESTARTSYS if interrupted, 0 if the wait timed out, or the remaining timeout in jiffies on success. If timeout is zero the value one is returned if the fence is already signaled for consistency with other functions taking a jiffies timeout.”h]”hŒúReturns -ERESTARTSYS if interrupted, 0 if the wait timed out, or the remaining timeout in jiffies on success. If timeout is zero the value one is returned if the fence is already signaled for consistency with other functions taking a jiffies timeout.”…”�”}”(hj8Ùh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´M%hjPØubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jg hj�µh²hh³Nh´NubjÉ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÕŒ'dma_fence_wait_any_timeout (C function)”Œc.dma_fence_wait_any_timeout”hNt”auh1jÈhj�µh²hh³Nh´NubjÛ)�”}”(hhh]”(jà)�”}”(hŒ�signed long dma_fence_wait_any_timeout (struct dma_fence **fences, uint32_t count, bool intr, signed long timeout, uint32_t *idx)”h]”jæ)�”}”(hŒ€signed long dma_fence_wait_any_timeout(struct dma_fence **fences, uint32_t count, bool intr, signed long timeout, uint32_t *idx)”h]”(jM)�”}”(hŒsigned”h]”hŒsigned”…”�”}”(hjgÙh²hh³Nh´Nubah}”(h]”h ]”jYah"]”h$]”h&]”uh1jLhjcÙh²hh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´Moubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjvÙh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjcÙh²hh³juÙh´MoubjM)�”}”(hŒlong”h]”hŒlong”…”�”}”(hj„Ùh²hh³Nh´Nubah}”(h]”h ]”jYah"]”h$]”h&]”uh1jLhjcÙh²hh³juÙh´Moubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj’Ùh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjcÙh²hh³juÙh´Moubj )�”}”(hŒdma_fence_wait_any_timeout”h]”j )�”}”(hŒdma_fence_wait_any_timeout”h]”hŒdma_fence_wait_any_timeout”…”�”}”(hj¤Ùh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj Ùubah}”(h]”h ]”(j' j( eh"]”h$]”h&]”j÷jøuh1j hjcÙh²hh³juÙh´MoubjŒ)�”}”(hŒZ(struct dma_fence **fences, uint32_t count, bool intr, signed long timeout, uint32_t *idx)”h]”(j’)�”}”(hŒstruct dma_fence **fences”h]”(jì)�”}”(hjïh]”hŒstruct”…”�”}”(hjÀÙh²hh³Nh´Nubah}”(h]”h ]”jøah"]”h$]”h&]”uh1jëhj¼Ùubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÍÙh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj¼Ùubh)�”}”(hhh]”j )�”}”(hŒ dma_fence”h]”hŒ dma_fence”…”�”}”(hjÞÙh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjÛÙubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jîŒreftype”jGŒ reftarget”jàÙŒmodname”NŒ classname”Nj³j¶)�”}”j¹]”jO)�”}”jGj¦ÙsbŒc.dma_fence_wait_any_timeout”†”asbuh1hhj¼Ùubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjþÙh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj¼Ùubjd)�”}”(hjgh]”hŒ*”…”�”}”(hj Úh²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchj¼Ùubjd)�”}”(hjgh]”hŒ*”…”�”}”(hjÚh²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchj¼Ùubj )�”}”(hŒfences”h]”hŒfences”…”�”}”(hj&Úh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj¼Ùubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj÷jøuh1j‘hj¸Ùubj’)�”}”(hŒuint32_t count”h]”(h)�”}”(hhh]”j )�”}”(hŒuint32_t”h]”hŒuint32_t”…”�”}”(hjBÚh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj?Úubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jîŒreftype”jGŒ reftarget”jDÚŒmodname”NŒ classname”Nj³j¶)�”}”j¹]”júÙŒc.dma_fence_wait_any_timeout”†”asbuh1hhj;Úubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj`Úh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj;Úubj )�”}”(hŒcount”h]”hŒcount”…”�”}”(hjnÚh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj;Úubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj÷jøuh1j‘hj¸Ùubj’)�”}”(hŒ bool intr”h]”(jM)�”}”(hji5h]”hŒbool”…”�”}”(hj‡Úh²hh³Nh´Nubah}”(h]”h ]”jYah"]”h$]”h&]”uh1jLhjƒÚubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj”Úh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjƒÚubj )�”}”(hŒintr”h]”hŒintr”…”�”}”(hj¢Úh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjƒÚubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj÷jøuh1j‘hj¸Ùubj’)�”}”(hŒsigned long timeout”h]”(jM)�”}”(hŒsigned”h]”hŒsigned”…”�”}”(hj»Úh²hh³Nh´Nubah}”(h]”h ]”jYah"]”h$]”h&]”uh1jLhj·Úubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÉÚh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj·ÚubjM)�”}”(hŒlong”h]”hŒlong”…”�”}”(hj×Úh²hh³Nh´Nubah}”(h]”h ]”jYah"]”h$]”h&]”uh1jLhj·Úubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjåÚh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj·Úubj )�”}”(hŒtimeout”h]”hŒtimeout”…”�”}”(hjóÚh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj·Úubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj÷jøuh1j‘hj¸Ùubj’)�”}”(hŒ uint32_t *idx”h]”(h)�”}”(hhh]”j )�”}”(hŒuint32_t”h]”hŒuint32_t”…”�”}”(hjÛh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj Ûubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jîŒreftype”jGŒ reftarget”jÛŒmodname”NŒ classname”Nj³j¶)�”}”j¹]”júÙŒc.dma_fence_wait_any_timeout”†”asbuh1hhjÛubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj-Ûh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjÛubjd)�”}”(hjgh]”hŒ*”…”�”}”(hj;Ûh²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchjÛubj )�”}”(hŒidx”h]”hŒidx”…”�”}”(hjHÛh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjÛubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj÷jøuh1j‘hj¸Ùubeh}”(h]”h ]”h"]”h$]”h&]”j÷jøuh1j‹hjcÙh²hh³juÙh´Moubeh}”(h]”h ]”h"]”h$]”h&]”j÷jøj2 ˆuh1jåj3 j4 hj_Ùh²hh³juÙh´Moubah}”(h]”jZÙah ]”(j8 j9 eh"]”h$]”h&]”j= ˆj> )j? huh1jßh³juÙh´Mohj\Ùh²hubjA )�”}”(hhh]”hÌ)�”}”(hŒÜh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j:Üh´Mshj;Üubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hjÜubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³j:Üh´MshjªÛubj¹ )�”}”(hŒJ``signed long timeout`` timeout value in jiffies, or MAX_SCHEDULE_TIMEOUT ”h]”(j¿ )�”}”(hŒ``signed long timeout``”h]”jâ)�”}”(hj^Üh]”hŒsigned long timeout”…”�”}”(hj`Üh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj\Üubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´MthjXÜubjÙ )�”}”(hhh]”hÌ)�”}”(hŒ1timeout value in jiffies, or MAX_SCHEDULE_TIMEOUT”h]”hŒ1timeout value in jiffies, or MAX_SCHEDULE_TIMEOUT”…”�”}”(hjwÜh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jsÜh´MthjtÜubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hjXÜubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³jsÜh´MthjªÛubj¹ )�”}”(hŒc``uint32_t *idx`` used to store the first signaled fence index, meaningful only on positive return ”h]”(j¿ )�”}”(hŒ``uint32_t *idx``”h]”jâ)�”}”(hj—Üh]”hŒ uint32_t *idx”…”�”}”(hj™Üh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj•Üubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´Mvhj‘ÜubjÙ )�”}”(hhh]”hÌ)�”}”(hŒPused to store the first signaled fence index, meaningful only on positive return”h]”hŒPused to store the first signaled fence index, meaningful only on positive return”…”�”}”(hj°Üh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´Muhj­Üubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hj‘Üubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³j¬Üh´MvhjªÛubeh}”(h]”h ]”h"]”h$]”h&]”uh1j³ hjŽÛubhÌ)�”}”(hŒ**Description**”h]”jr )�”}”(hjÓÜh]”hŒ Description”…”�”}”(hjÕÜh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hjÑÜubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´MxhjŽÛubhÌ)�”}”(hŒšReturns -EINVAL on custom fence wait implementation, -ERESTARTSYS if interrupted, 0 if the wait timed out, or the remaining timeout in jiffies on success.”h]”hŒšReturns -EINVAL on custom fence wait implementation, -ERESTARTSYS if interrupted, 0 if the wait timed out, or the remaining timeout in jiffies on success.”…”�”}”(hjéÜh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´MwhjŽÛubhÌ)�”}”(hŒÔSynchronous waits for the first fence in the array to be signaled. The caller needs to hold a reference to all fences in the array, otherwise a fence might be freed before return, resulting in undefined behavior.”h]”hŒÔSynchronous waits for the first fence in the array to be signaled. The caller needs to hold a reference to all fences in the array, otherwise a fence might be freed before return, resulting in undefined behavior.”…”�”}”(hjøÜh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´M{hjŽÛubhÌ)�”}”(hŒ7See also dma_fence_wait() and dma_fence_wait_timeout().”h]”hŒ7See also dma_fence_wait() and dma_fence_wait_timeout().”…”�”}”(hjÝh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´MhjŽÛubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jg hj�µh²hh³Nh´NubjÉ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÕŒ#dma_fence_set_deadline (C function)”Œc.dma_fence_set_deadline”hNt”auh1jÈhj�µh²hh³Nh´NubjÛ)�”}”(hhh]”(jà)�”}”(hŒGvoid dma_fence_set_deadline (struct dma_fence *fence, ktime_t deadline)”h]”jæ)�”}”(hŒFvoid dma_fence_set_deadline(struct dma_fence *fence, ktime_t deadline)”h]”(jM)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj6Ýh²hh³Nh´Nubah}”(h]”h ]”jYah"]”h$]”h&]”uh1jLhj2Ýh²hh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´Mðubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjEÝh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj2Ýh²hh³jDÝh´Mðubj )�”}”(hŒdma_fence_set_deadline”h]”j )�”}”(hŒdma_fence_set_deadline”h]”hŒdma_fence_set_deadline”…”�”}”(hjWÝh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjSÝubah}”(h]”h ]”(j' j( eh"]”h$]”h&]”j÷jøuh1j hj2Ýh²hh³jDÝh´MðubjŒ)�”}”(hŒ+(struct dma_fence *fence, ktime_t deadline)”h]”(j’)�”}”(hŒstruct dma_fence *fence”h]”(jì)�”}”(hjïh]”hŒstruct”…”�”}”(hjsÝh²hh³Nh´Nubah}”(h]”h ]”jøah"]”h$]”h&]”uh1jëhjoÝubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj€Ýh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjoÝubh)�”}”(hhh]”j )�”}”(hŒ dma_fence”h]”hŒ dma_fence”…”�”}”(hj‘Ýh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjŽÝubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jîŒreftype”jGŒ reftarget”j“ÝŒmodname”NŒ classname”Nj³j¶)�”}”j¹]”jO)�”}”jGjYÝsbŒc.dma_fence_set_deadline”†”asbuh1hhjoÝubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj±Ýh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjoÝubjd)�”}”(hjgh]”hŒ*”…”�”}”(hj¿Ýh²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchjoÝubj )�”}”(hŒfence”h]”hŒfence”…”�”}”(hjÌÝh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjoÝubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj÷jøuh1j‘hjkÝubj’)�”}”(hŒktime_t deadline”h]”(h)�”}”(hhh]”j )�”}”(hŒktime_t”h]”hŒktime_t”…”�”}”(hjèÝh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjåÝubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jîŒreftype”jGŒ reftarget”jêÝŒmodname”NŒ classname”Nj³j¶)�”}”j¹]”j­ÝŒc.dma_fence_set_deadline”†”asbuh1hhjáÝubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÞh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjáÝubj )�”}”(hŒdeadline”h]”hŒdeadline”…”�”}”(hjÞh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjáÝubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj÷jøuh1j‘hjkÝubeh}”(h]”h ]”h"]”h$]”h&]”j÷jøuh1j‹hj2Ýh²hh³jDÝh´Mðubeh}”(h]”h ]”h"]”h$]”h&]”j÷jøj2 ˆuh1jåj3 j4 hj.Ýh²hh³jDÝh´Mðubah}”(h]”j)Ýah ]”(j8 j9 eh"]”h$]”h&]”j= ˆj> )j? huh1jßh³jDÝh´Mðhj+Ýh²hubjA )�”}”(hhh]”hÌ)�”}”(hŒ$set desired fence-wait deadline hint”h]”hŒ$set desired fence-wait deadline hint”…”�”}”(hj>Þh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´Mðhj;Þh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j@ hj+Ýh²hh³jDÝh´Mðubeh}”(h]”h ]”(jîŒfunction”eh"]”h$]”h&]”ja jîjb jVÞjc jVÞjd ‰je ‰jf ‰uh1jÚh²hhj�µh³Nh´Nubjh )�”}”(hX**Parameters** ``struct dma_fence *fence`` the fence that is to be waited on ``ktime_t deadline`` the time by which the waiter hopes for the fence to be signaled **Description** Give the fence signaler a hint about an upcoming deadline, such as vblank, by which point the waiter would prefer the fence to be signaled by. This is intended to give feedback to the fence signaler to aid in power management decisions, such as boosting GPU frequency if a periodic vblank deadline is approaching but the fence is not yet signaled..”h]”(hÌ)�”}”(hŒ**Parameters**”h]”jr )�”}”(hj`Þh]”hŒ Parameters”…”�”}”(hjbÞh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hj^Þubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´MôhjZÞubj´ )�”}”(hhh]”(j¹ )�”}”(hŒ>``struct dma_fence *fence`` the fence that is to be waited on ”h]”(j¿ )�”}”(hŒ``struct dma_fence *fence``”h]”jâ)�”}”(hjÞh]”hŒstruct dma_fence *fence”…”�”}”(hj�Þh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj}Þubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´MñhjyÞubjÙ )�”}”(hhh]”hÌ)�”}”(hŒ!the fence that is to be waited on”h]”hŒ!the fence that is to be waited on”…”�”}”(hj˜Þh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j”Þh´Mñhj•Þubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hjyÞubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³j”Þh´MñhjvÞubj¹ )�”}”(hŒU``ktime_t deadline`` the time by which the waiter hopes for the fence to be signaled ”h]”(j¿ )�”}”(hŒ``ktime_t deadline``”h]”jâ)�”}”(hj¸Þh]”hŒktime_t deadline”…”�”}”(hjºÞh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj¶Þubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´Móhj²ÞubjÙ )�”}”(hhh]”hÌ)�”}”(hŒ?the time by which the waiter hopes for the fence to be signaled”h]”hŒ?the time by which the waiter hopes for the fence to be signaled”…”�”}”(hjÑÞh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´MòhjÎÞubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hj²Þubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³jÍÞh´MóhjvÞubeh}”(h]”h ]”h"]”h$]”h&]”uh1j³ hjZÞubhÌ)�”}”(hŒ**Description**”h]”jr )�”}”(hjôÞh]”hŒ Description”…”�”}”(hjöÞh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hjòÞubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´MõhjZÞubhÌ)�”}”(hX]Give the fence signaler a hint about an upcoming deadline, such as vblank, by which point the waiter would prefer the fence to be signaled by. This is intended to give feedback to the fence signaler to aid in power management decisions, such as boosting GPU frequency if a periodic vblank deadline is approaching but the fence is not yet signaled..”h]”hX]Give the fence signaler a hint about an upcoming deadline, such as vblank, by which point the waiter would prefer the fence to be signaled by. This is intended to give feedback to the fence signaler to aid in power management decisions, such as boosting GPU frequency if a periodic vblank deadline is approaching but the fence is not yet signaled..”…”�”}”(hj ßh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´MôhjZÞubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jg hj�µh²hh³Nh´NubjÉ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÕŒdma_fence_describe (C function)”Œc.dma_fence_describe”hNt”auh1jÈhj�µh²hh³Nh´NubjÛ)�”}”(hhh]”(jà)�”}”(hŒGvoid dma_fence_describe (struct dma_fence *fence, struct seq_file *seq)”h]”jæ)�”}”(hŒFvoid dma_fence_describe(struct dma_fence *fence, struct seq_file *seq)”h]”(jM)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj9ßh²hh³Nh´Nubah}”(h]”h ]”jYah"]”h$]”h&]”uh1jLhj5ßh²hh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´M ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjHßh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj5ßh²hh³jGßh´M ubj )�”}”(hŒdma_fence_describe”h]”j )�”}”(hŒdma_fence_describe”h]”hŒdma_fence_describe”…”�”}”(hjZßh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjVßubah}”(h]”h ]”(j' j( eh"]”h$]”h&]”j÷jøuh1j hj5ßh²hh³jGßh´M ubjŒ)�”}”(hŒ/(struct dma_fence *fence, struct seq_file *seq)”h]”(j’)�”}”(hŒstruct dma_fence *fence”h]”(jì)�”}”(hjïh]”hŒstruct”…”�”}”(hjvßh²hh³Nh´Nubah}”(h]”h ]”jøah"]”h$]”h&]”uh1jëhjrßubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjƒßh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjrßubh)�”}”(hhh]”j )�”}”(hŒ dma_fence”h]”hŒ dma_fence”…”�”}”(hj”ßh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj‘ßubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jîŒreftype”jGŒ reftarget”j–ߌmodname”NŒ classname”Nj³j¶)�”}”j¹]”jO)�”}”jGj\ßsbŒc.dma_fence_describe”†”asbuh1hhjrßubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj´ßh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjrßubjd)�”}”(hjgh]”hŒ*”…”�”}”(hjÂßh²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchjrßubj )�”}”(hŒfence”h]”hŒfence”…”�”}”(hjÏßh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjrßubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj÷jøuh1j‘hjnßubj’)�”}”(hŒstruct seq_file *seq”h]”(jì)�”}”(hjïh]”hŒstruct”…”�”}”(hjèßh²hh³Nh´Nubah}”(h]”h ]”jøah"]”h$]”h&]”uh1jëhjäßubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjõßh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjäßubh)�”}”(hhh]”j )�”}”(hŒseq_file”h]”hŒseq_file”…”�”}”(hjàh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjàubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jîŒreftype”jGŒ reftarget”jàŒmodname”NŒ classname”Nj³j¶)�”}”j¹]”j°ßŒc.dma_fence_describe”†”asbuh1hhjäßubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj$àh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjäßubjd)�”}”(hjgh]”hŒ*”…”�”}”(hj2àh²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchjäßubj )�”}”(hŒseq”h]”hŒseq”…”�”}”(hj?àh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjäßubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj÷jøuh1j‘hjnßubeh}”(h]”h ]”h"]”h$]”h&]”j÷jøuh1j‹hj5ßh²hh³jGßh´M ubeh}”(h]”h ]”h"]”h$]”h&]”j÷jøj2 ˆuh1jåj3 j4 hj1ßh²hh³jGßh´M ubah}”(h]”j,ßah ]”(j8 j9 eh"]”h$]”h&]”j= ˆj> )j? huh1jßh³jGßh´M hj.ßh²hubjA )�”}”(hhh]”hÌ)�”}”(hŒ$Dump fence description into seq_file”h]”hŒ$Dump fence description into seq_file”…”�”}”(hjiàh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´M hjfàh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j@ hj.ßh²hh³jGßh´M ubeh}”(h]”h ]”(jîŒfunction”eh"]”h$]”h&]”ja jîjb j�àjc j�àjd ‰je ‰jf ‰uh1jÚh²hhj�µh³Nh´Nubjh )�”}”(hŒì**Parameters** ``struct dma_fence *fence`` the fence to describe ``struct seq_file *seq`` the seq_file to put the textual description into **Description** Dump a textual description of the fence and it's state into the seq_file.”h]”(hÌ)�”}”(hŒ**Parameters**”h]”jr )�”}”(hj‹àh]”hŒ Parameters”…”�”}”(hj�àh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hj‰àubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´M hj…àubj´ )�”}”(hhh]”(j¹ )�”}”(hŒ2``struct dma_fence *fence`` the fence to describe ”h]”(j¿ )�”}”(hŒ``struct dma_fence *fence``”h]”jâ)�”}”(hjªàh]”hŒstruct dma_fence *fence”…”�”}”(hj¬àh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj¨àubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´M hj¤àubjÙ )�”}”(hhh]”hÌ)�”}”(hŒthe fence to describe”h]”hŒthe fence to describe”…”�”}”(hjÃàh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j¿àh´M hjÀàubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hj¤àubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³j¿àh´M hj¡àubj¹ )�”}”(hŒJ``struct seq_file *seq`` the seq_file to put the textual description into ”h]”(j¿ )�”}”(hŒ``struct seq_file *seq``”h]”jâ)�”}”(hjãàh]”hŒstruct seq_file *seq”…”�”}”(hjåàh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjáàubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´M hjÝàubjÙ )�”}”(hhh]”hÌ)�”}”(hŒ0the seq_file to put the textual description into”h]”hŒ0the seq_file to put the textual description into”…”�”}”(hjüàh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jøàh´M hjùàubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hjÝàubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³jøàh´M hj¡àubeh}”(h]”h ]”h"]”h$]”h&]”uh1j³ hj…àubhÌ)�”}”(hŒ**Description**”h]”jr )�”}”(hjáh]”hŒ Description”…”�”}”(hj áh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hjáubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´M hj…àubhÌ)�”}”(hŒIDump a textual description of the fence and it's state into the seq_file.”h]”hŒKDump a textual description of the fence and it’s state into the seq_file.”…”�”}”(hj4áh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´M hj…àubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jg hj�µh²hh³Nh´NubjÉ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÕŒdma_fence_init (C function)”Œc.dma_fence_init”hNt”auh1jÈhj�µh²hh³Nh´NubjÛ)�”}”(hhh]”(jà)�”}”(hŒxvoid dma_fence_init (struct dma_fence *fence, const struct dma_fence_ops *ops, spinlock_t *lock, u64 context, u64 seqno)”h]”jæ)�”}”(hŒwvoid dma_fence_init(struct dma_fence *fence, const struct dma_fence_ops *ops, spinlock_t *lock, u64 context, u64 seqno)”h]”(jM)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjcáh²hh³Nh´Nubah}”(h]”h ]”jYah"]”h$]”h&]”uh1jLhj_áh²hh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´MCubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjráh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj_áh²hh³jqáh´MCubj )�”}”(hŒdma_fence_init”h]”j )�”}”(hŒdma_fence_init”h]”hŒdma_fence_init”…”�”}”(hj„áh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj€áubah}”(h]”h ]”(j' j( eh"]”h$]”h&]”j÷jøuh1j hj_áh²hh³jqáh´MCubjŒ)�”}”(hŒd(struct dma_fence *fence, const struct dma_fence_ops *ops, spinlock_t *lock, u64 context, u64 seqno)”h]”(j’)�”}”(hŒstruct dma_fence *fence”h]”(jì)�”}”(hjïh]”hŒstruct”…”�”}”(hj áh²hh³Nh´Nubah}”(h]”h ]”jøah"]”h$]”h&]”uh1jëhjœáubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj­áh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjœáubh)�”}”(hhh]”j )�”}”(hŒ dma_fence”h]”hŒ dma_fence”…”�”}”(hj¾áh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj»áubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jîŒreftype”jGŒ reftarget”jÀáŒmodname”NŒ classname”Nj³j¶)�”}”j¹]”jO)�”}”jGj†ásbŒc.dma_fence_init”†”asbuh1hhjœáubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÞáh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjœáubjd)�”}”(hjgh]”hŒ*”…”�”}”(hjìáh²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchjœáubj )�”}”(hŒfence”h]”hŒfence”…”�”}”(hjùáh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjœáubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj÷jøuh1j‘hj˜áubj’)�”}”(hŒconst struct dma_fence_ops *ops”h]”(jì)�”}”(hj™h]”hŒconst”…”�”}”(hjâh²hh³Nh´Nubah}”(h]”h ]”jøah"]”h$]”h&]”uh1jëhjâubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjâh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjâubjì)�”}”(hjïh]”hŒstruct”…”�”}”(hj-âh²hh³Nh´Nubah}”(h]”h ]”jøah"]”h$]”h&]”uh1jëhjâubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj:âh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjâubh)�”}”(hhh]”j )�”}”(hŒ dma_fence_ops”h]”hŒ dma_fence_ops”…”�”}”(hjKâh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjHâubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jîŒreftype”jGŒ reftarget”jMâŒmodname”NŒ classname”Nj³j¶)�”}”j¹]”jÚáŒc.dma_fence_init”†”asbuh1hhjâubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjiâh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjâubjd)�”}”(hjgh]”hŒ*”…”�”}”(hjwâh²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchjâubj )�”}”(hŒops”h]”hŒops”…”�”}”(hj„âh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjâubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj÷jøuh1j‘hj˜áubj’)�”}”(hŒspinlock_t *lock”h]”(h)�”}”(hhh]”j )�”}”(hŒ spinlock_t”h]”hŒ spinlock_t”…”�”}”(hj âh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj�âubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jîŒreftype”jGŒ reftarget”j¢âŒmodname”NŒ classname”Nj³j¶)�”}”j¹]”jÚáŒc.dma_fence_init”†”asbuh1hhj™âubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¾âh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj™âubjd)�”}”(hjgh]”hŒ*”…”�”}”(hjÌâh²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchj™âubj )�”}”(hŒlock”h]”hŒlock”…”�”}”(hjÙâh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj™âubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj÷jøuh1j‘hj˜áubj’)�”}”(hŒ u64 context”h]”(h)�”}”(hhh]”j )�”}”(hŒu64”h]”hŒu64”…”�”}”(hjõâh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjòâubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jîŒreftype”jGŒ reftarget”j÷âŒmodname”NŒ classname”Nj³j¶)�”}”j¹]”jÚáŒc.dma_fence_init”†”asbuh1hhjîâubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjãh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjîâubj )�”}”(hŒcontext”h]”hŒcontext”…”�”}”(hj!ãh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjîâubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj÷jøuh1j‘hj˜áubj’)�”}”(hŒ u64 seqno”h]”(h)�”}”(hhh]”j )�”}”(hŒu64”h]”hŒu64”…”�”}”(hj=ãh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj:ãubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jîŒreftype”jGŒ reftarget”j?ãŒmodname”NŒ classname”Nj³j¶)�”}”j¹]”jÚáŒc.dma_fence_init”†”asbuh1hhj6ãubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj[ãh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj6ãubj )�”}”(hŒseqno”h]”hŒseqno”…”�”}”(hjiãh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj6ãubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj÷jøuh1j‘hj˜áubeh}”(h]”h ]”h"]”h$]”h&]”j÷jøuh1j‹hj_áh²hh³jqáh´MCubeh}”(h]”h ]”h"]”h$]”h&]”j÷jøj2 ˆuh1jåj3 j4 hj[áh²hh³jqáh´MCubah}”(h]”jVáah ]”(j8 j9 eh"]”h$]”h&]”j= ˆj> )j? huh1jßh³jqáh´MChjXáh²hubjA )�”}”(hhh]”hÌ)�”}”(hŒInitialize a custom fence.”h]”hŒInitialize a custom fence.”…”�”}”(hj“ãh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´MChj�ãh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j@ hjXáh²hh³jqáh´MCubeh}”(h]”h ]”(jîŒfunction”eh"]”h$]”h&]”ja jîjb j«ãjc j«ãjd ‰je ‰jf ‰uh1jÚh²hhj�µh³Nh´Nubjh )�”}”(hX–**Parameters** ``struct dma_fence *fence`` the fence to initialize ``const struct dma_fence_ops *ops`` the dma_fence_ops for operations on this fence ``spinlock_t *lock`` optional irqsafe spinlock to use for locking this fence ``u64 context`` the execution context this fence is run on ``u64 seqno`` a linear increasing sequence number for this context **Description** Initializes an allocated fence, the caller doesn't have to keep its refcount after committing with this fence, but it will need to hold a refcount again if :c:type:`dma_fence_ops.enable_signaling ` gets called. context and seqno are used for easy comparison between fences, allowing to check which fence is later by simply using dma_fence_later(). External locks are a relic of legacy use cases that needed a shared lock to serialize signaling when no out-of-order signaling was possible through :c:type:`dma_fence_ops.signaled `. Drivers have abandoned this concept since the introduction of the callback, but the external lock is still around. New users MUST NOT use external locks, as they force the issuer to outlive all fences that reference the lock.”h]”(hÌ)�”}”(hŒ**Parameters**”h]”jr )�”}”(hjµãh]”hŒ Parameters”…”�”}”(hj·ãh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hj³ãubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´MGhj¯ãubj´ )�”}”(hhh]”(j¹ )�”}”(hŒ4``struct dma_fence *fence`` the fence to initialize ”h]”(j¿ )�”}”(hŒ``struct dma_fence *fence``”h]”jâ)�”}”(hjÔãh]”hŒstruct dma_fence *fence”…”�”}”(hjÖãh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjÒãubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´MDhjÎãubjÙ )�”}”(hhh]”hÌ)�”}”(hŒthe fence to initialize”h]”hŒthe fence to initialize”…”�”}”(hjíãh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jéãh´MDhjêãubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hjÎãubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³jéãh´MDhjËãubj¹ )�”}”(hŒS``const struct dma_fence_ops *ops`` the dma_fence_ops for operations on this fence ”h]”(j¿ )�”}”(hŒ#``const struct dma_fence_ops *ops``”h]”jâ)�”}”(hj äh]”hŒconst struct dma_fence_ops *ops”…”�”}”(hjäh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj äubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´MEhjäubjÙ )�”}”(hhh]”hÌ)�”}”(hŒ.the dma_fence_ops for operations on this fence”h]”hŒ.the dma_fence_ops for operations on this fence”…”�”}”(hj&äh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j"äh´MEhj#äubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hjäubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³j"äh´MEhjËãubj¹ )�”}”(hŒM``spinlock_t *lock`` optional irqsafe spinlock to use for locking this fence ”h]”(j¿ )�”}”(hŒ``spinlock_t *lock``”h]”jâ)�”}”(hjFäh]”hŒspinlock_t *lock”…”�”}”(hjHäh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjDäubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´MFhj@äubjÙ )�”}”(hhh]”hÌ)�”}”(hŒ7optional irqsafe spinlock to use for locking this fence”h]”hŒ7optional irqsafe spinlock to use for locking this fence”…”�”}”(hj_äh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j[äh´MFhj\äubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hj@äubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³j[äh´MFhjËãubj¹ )�”}”(hŒ;``u64 context`` the execution context this fence is run on ”h]”(j¿ )�”}”(hŒ``u64 context``”h]”jâ)�”}”(hjäh]”hŒ u64 context”…”�”}”(hj�äh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj}äubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´MGhjyäubjÙ )�”}”(hhh]”hÌ)�”}”(hŒ*the execution context this fence is run on”h]”hŒ*the execution context this fence is run on”…”�”}”(hj˜äh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j”äh´MGhj•äubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hjyäubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³j”äh´MGhjËãubj¹ )�”}”(hŒC``u64 seqno`` a linear increasing sequence number for this context ”h]”(j¿ )�”}”(hŒ ``u64 seqno``”h]”jâ)�”}”(hj¸äh]”hŒ u64 seqno”…”�”}”(hjºäh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj¶äubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´MHhj²äubjÙ )�”}”(hhh]”hÌ)�”}”(hŒ4a linear increasing sequence number for this context”h]”hŒ4a linear increasing sequence number for this context”…”�”}”(hjÑäh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jÍäh´MHhjÎäubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hj²äube•yh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³jÍäh´MHhjËãubeh}”(h]”h ]”h"]”h$]”h&]”uh1j³ hj¯ãubhÌ)�”}”(hŒ**Description**”h]”jr )�”}”(hjóäh]”hŒ Description”…”�”}”(hjõäh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hjñäubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´MJhj¯ãubhÌ)�”}”(hŒáInitializes an allocated fence, the caller doesn't have to keep its refcount after committing with this fence, but it will need to hold a refcount again if :c:type:`dma_fence_ops.enable_signaling ` gets called.”h]”(hŒžInitializes an allocated fence, the caller doesn’t have to keep its refcount after committing with this fence, but it will need to hold a refcount again if ”…”�”}”(hj åh²hh³Nh´Nubh)�”}”(hŒ8:c:type:`dma_fence_ops.enable_signaling `”h]”jâ)�”}”(hjåh]”hŒdma_fence_ops.enable_signaling”…”�”}”(hjåh²hh³Nh´Nubah}”(h]”h ]”(jíjîŒc-type”eh"]”h$]”h&]”uh1jáhjåubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”júŒ refdomain”jîŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰j³j·jŒ dma_fence_ops”uh1hh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´MIhj åubhŒ gets called.”…”�”}”(hj åh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j0åh´MIhj¯ãubhÌ)�”}”(hŒˆcontext and seqno are used for easy comparison between fences, allowing to check which fence is later by simply using dma_fence_later().”h]”hŒˆcontext and seqno are used for easy comparison between fences, allowing to check which fence is later by simply using dma_fence_later().”…”�”}”(hj;åh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´MMhj¯ãubhÌ)�”}”(hX§External locks are a relic of legacy use cases that needed a shared lock to serialize signaling when no out-of-order signaling was possible through :c:type:`dma_fence_ops.signaled `. Drivers have abandoned this concept since the introduction of the callback, but the external lock is still around. New users MUST NOT use external locks, as they force the issuer to outlive all fences that reference the lock.”h]”(hŒ”External locks are a relic of legacy use cases that needed a shared lock to serialize signaling when no out-of-order signaling was possible through ”…”�”}”(hjJåh²hh³Nh´Nubh)�”}”(hŒ0:c:type:`dma_fence_ops.signaled `”h]”jâ)�”}”(hjTåh]”hŒdma_fence_ops.signaled”…”�”}”(hjVåh²hh³Nh´Nubah}”(h]”h ]”(jíjîŒc-type”eh"]”h$]”h&]”uh1jáhjRåubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”júŒ refdomain”jîŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰j³j·jŒ dma_fence_ops”uh1hh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´MPhjJåubhŒã. Drivers have abandoned this concept since the introduction of the callback, but the external lock is still around. New users MUST NOT use external locks, as they force the issuer to outlive all fences that reference the lock.”…”�”}”(hjJåh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jqåh´MPhj¯ãubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jg hj�µh²hh³Nh´NubjÉ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÕŒdma_fence_init64 (C function)”Œc.dma_fence_init64”hNt”auh1jÈhj�µh²hh³Nh´NubjÛ)�”}”(hhh]”(jà)�”}”(hŒzvoid dma_fence_init64 (struct dma_fence *fence, const struct dma_fence_ops *ops, spinlock_t *lock, u64 context, u64 seqno)”h]”jæ)�”}”(hŒyvoid dma_fence_init64(struct dma_fence *fence, const struct dma_fence_ops *ops, spinlock_t *lock, u64 context, u64 seqno)”h]”(jM)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjœåh²hh³Nh´Nubah}”(h]”h ]”jYah"]”h$]”h&]”uh1jLhj˜åh²hh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´Maubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj«åh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj˜åh²hh³jªåh´Maubj )�”}”(hŒdma_fence_init64”h]”j )�”}”(hŒdma_fence_init64”h]”hŒdma_fence_init64”…”�”}”(hj½åh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj¹åubah}”(h]”h ]”(j' j( eh"]”h$]”h&]”j÷jøuh1j hj˜åh²hh³jªåh´MaubjŒ)�”}”(hŒd(struct dma_fence *fence, const struct dma_fence_ops *ops, spinlock_t *lock, u64 context, u64 seqno)”h]”(j’)�”}”(hŒstruct dma_fence *fence”h]”(jì)�”}”(hjïh]”hŒstruct”…”�”}”(hjÙåh²hh³Nh´Nubah}”(h]”h ]”jøah"]”h$]”h&]”uh1jëhjÕåubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjæåh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjÕåubh)�”}”(hhh]”j )�”}”(hŒ dma_fence”h]”hŒ dma_fence”…”�”}”(hj÷åh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjôåubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jîŒreftype”jGŒ reftarget”jùåŒmodname”NŒ classname”Nj³j¶)�”}”j¹]”jO)�”}”jGj¿åsbŒc.dma_fence_init64”†”asbuh1hhjÕåubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjæh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjÕåubjd)�”}”(hjgh]”hŒ*”…”�”}”(hj%æh²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchjÕåubj )�”}”(hŒfence”h]”hŒfence”…”�”}”(hj2æh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjÕåubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj÷jøuh1j‘hjÑåubj’)�”}”(hŒconst struct dma_fence_ops *ops”h]”(jì)�”}”(hj™h]”hŒconst”…”�”}”(hjKæh²hh³Nh´Nubah}”(h]”h ]”jøah"]”h$]”h&]”uh1jëhjGæubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjXæh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjGæubjì)�”}”(hjïh]”hŒstruct”…”�”}”(hjfæh²hh³Nh´Nubah}”(h]”h ]”jøah"]”h$]”h&]”uh1jëhjGæubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjsæh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjGæubh)�”}”(hhh]”j )�”}”(hŒ dma_fence_ops”h]”hŒ dma_fence_ops”…”�”}”(hj„æh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj�æubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jîŒreftype”jGŒ reftarget”j†æŒmodname”NŒ classname”Nj³j¶)�”}”j¹]”jæŒc.dma_fence_init64”†”asbuh1hhjGæubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¢æh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjGæubjd)�”}”(hjgh]”hŒ*”…”�”}”(hj°æh²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchjGæubj )�”}”(hŒops”h]”hŒops”…”�”}”(hj½æh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjGæubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj÷jøuh1j‘hjÑåubj’)�”}”(hŒspinlock_t *lock”h]”(h)�”}”(hhh]”j )�”}”(hŒ spinlock_t”h]”hŒ spinlock_t”…”�”}”(hjÙæh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjÖæubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jîŒreftype”jGŒ reftarget”jÛæŒmodname”NŒ classname”Nj³j¶)�”}”j¹]”jæŒc.dma_fence_init64”†”asbuh1hhjÒæubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj÷æh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjÒæubjd)�”}”(hjgh]”hŒ*”…”�”}”(hjçh²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchjÒæubj )�”}”(hŒlock”h]”hŒlock”…”�”}”(hjçh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjÒæubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj÷jøuh1j‘hjÑåubj’)�”}”(hŒ u64 context”h]”(h)�”}”(hhh]”j )�”}”(hŒu64”h]”hŒu64”…”�”}”(hj.çh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj+çubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jîŒreftype”jGŒ reftarget”j0çŒmodname”NŒ classname”Nj³j¶)�”}”j¹]”jæŒc.dma_fence_init64”†”asbuh1hhj'çubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjLçh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj'çubj )�”}”(hŒcontext”h]”hŒcontext”…”�”}”(hjZçh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj'çubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj÷jøuh1j‘hjÑåubj’)�”}”(hŒ u64 seqno”h]”(h)�”}”(hhh]”j )�”}”(hŒu64”h]”hŒu64”…”�”}”(hjvçh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjsçubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jîŒreftype”jGŒ reftarget”jxçŒmodname”NŒ classname”Nj³j¶)�”}”j¹]”jæŒc.dma_fence_init64”†”asbuh1hhjoçubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj”çh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjoçubj )�”}”(hŒseqno”h]”hŒseqno”…”�”}”(hj¢çh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjoçubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj÷jøuh1j‘hjÑåubeh}”(h]”h ]”h"]”h$]”h&]”j÷jøuh1j‹hj˜åh²hh³jªåh´Maubeh}”(h]”h ]”h"]”h$]”h&]”j÷jøj2 ˆuh1jåj3 j4 hj”åh²hh³jªåh´Maubah}”(h]”j�åah ]”(j8 j9 eh"]”h$]”h&]”j= ˆj> )j? huh1jßh³jªåh´Mahj‘åh²hubjA )�”}”(hhh]”hÌ)�”}”(hŒ4Initialize a custom fence with 64-bit seqno support.”h]”hŒ4Initialize a custom fence with 64-bit seqno support.”…”�”}”(hjÌçh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´MahjÉçh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j@ hj‘åh²hh³jªåh´Maubeh}”(h]”h ]”(jîŒfunction”eh"]”h$]”h&]”ja jîjb jäçjc jäçjd ‰je ‰jf ‰uh1jÚh²hhj�µh³Nh´Nubjh )�”}”(hXx**Parameters** ``struct dma_fence *fence`` the fence to initialize ``const struct dma_fence_ops *ops`` the dma_fence_ops for operations on this fence ``spinlock_t *lock`` optional irqsafe spinlock to use for locking this fence ``u64 context`` the execution context this fence is run on ``u64 seqno`` a linear increasing sequence number for this context **Description** Initializes an allocated fence, the caller doesn't have to keep its refcount after committing with this fence, but it will need to hold a refcount again if :c:type:`dma_fence_ops.enable_signaling ` gets called. Context and seqno are used for easy comparison between fences, allowing to check which fence is later by simply using dma_fence_later(). New users MUST NOT use external locks. Check the documentation in dma_fence_init() to understand the motives behind the legacy use cases.”h]”(hÌ)�”}”(hŒ**Parameters**”h]”jr )�”}”(hjîçh]”hŒ Parameters”…”�”}”(hjðçh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hjìçubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´Mehjèçubj´ )�”}”(hhh]”(j¹ )�”}”(hŒ4``struct dma_fence *fence`` the fence to initialize ”h]”(j¿ )�”}”(hŒ``struct dma_fence *fence``”h]”jâ)�”}”(hj èh]”hŒstruct dma_fence *fence”…”�”}”(hjèh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj èubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´MbhjèubjÙ )�”}”(hhh]”hÌ)�”}”(hŒthe fence to initialize”h]”hŒthe fence to initialize”…”�”}”(hj&èh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j"èh´Mbhj#èubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hjèubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³j"èh´Mbhjèubj¹ )�”}”(hŒS``const struct dma_fence_ops *ops`` the dma_fence_ops for operations on this fence ”h]”(j¿ )�”}”(hŒ#``const struct dma_fence_ops *ops``”h]”jâ)�”}”(hjFèh]”hŒconst struct dma_fence_ops *ops”…”�”}”(hjHèh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjDèubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´Mchj@èubjÙ )�”}”(hhh]”hÌ)�”}”(hŒ.the dma_fence_ops for operations on this fence”h]”hŒ.the dma_fence_ops for operations on this fence”…”�”}”(hj_èh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j[èh´Mchj\èubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hj@èubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³j[èh´Mchjèubj¹ )�”}”(hŒM``spinlock_t *lock`` optional irqsafe spinlock to use for locking this fence ”h]”(j¿ )�”}”(hŒ``spinlock_t *lock``”h]”jâ)�”}”(hjèh]”hŒspinlock_t *lock”…”�”}”(hj�èh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj}èubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´MdhjyèubjÙ )�”}”(hhh]”hÌ)�”}”(hŒ7optional irqsafe spinlock to use for locking this fence”h]”hŒ7optional irqsafe spinlock to use for locking this fence”…”�”}”(hj˜èh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j”èh´Mdhj•èubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hjyèubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³j”èh´Mdhjèubj¹ )�”}”(hŒ;``u64 context`` the execution context this fence is run on ”h]”(j¿ )�”}”(hŒ``u64 context``”h]”jâ)�”}”(hj¸èh]”hŒ u64 context”…”�”}”(hjºèh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj¶èubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´Mehj²èubjÙ )�”}”(hhh]”hÌ)�”}”(hŒ*the execution context this fence is run on”h]”hŒ*the execution context this fence is run on”…”�”}”(hjÑèh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jÍèh´MehjÎèubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hj²èubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³jÍèh´Mehjèubj¹ )�”}”(hŒC``u64 seqno`` a linear increasing sequence number for this context ”h]”(j¿ )�”}”(hŒ ``u64 seqno``”h]”jâ)�”}”(hjñèh]”hŒ u64 seqno”…”�”}”(hjóèh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjïèubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´MfhjëèubjÙ )�”}”(hhh]”hÌ)�”}”(hŒ4a linear increasing sequence number for this context”h]”hŒ4a linear increasing sequence number for this context”…”�”}”(hj éh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jéh´Mfhjéubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hjëèubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³jéh´Mfhjèubeh}”(h]”h ]”h"]”h$]”h&]”uh1j³ hjèçubhÌ)�”}”(hŒ**Description**”h]”jr )�”}”(hj,éh]”hŒ Description”…”�”}”(hj.éh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hj*éubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´MhhjèçubhÌ)�”}”(hŒáInitializes an allocated fence, the caller doesn't have to keep its refcount after committing with this fence, but it will need to hold a refcount again if :c:type:`dma_fence_ops.enable_signaling ` gets called.”h]”(hŒžInitializes an allocated fence, the caller doesn’t have to keep its refcount after committing with this fence, but it will need to hold a refcount again if ”…”�”}”(hjBéh²hh³Nh´Nubh)�”}”(hŒ8:c:type:`dma_fence_ops.enable_signaling `”h]”jâ)�”}”(hjLéh]”hŒdma_fence_ops.enable_signaling”…”�”}”(hjNéh²hh³Nh´Nubah}”(h]”h ]”(jíjîŒc-type”eh"]”h$]”h&]”uh1jáhjJéubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”júŒ refdomain”jîŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰j³j·jŒ dma_fence_ops”uh1hh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´MghjBéubhŒ gets called.”…”�”}”(hjBéh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jiéh´MghjèçubhÌ)�”}”(hŒˆContext and seqno are used for easy comparison between fences, allowing to check which fence is later by simply using dma_fence_later().”h]”hŒˆContext and seqno are used for easy comparison between fences, allowing to check which fence is later by simply using dma_fence_later().”…”�”}”(hjtéh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´MkhjèçubhÌ)�”}”(hŒ‰New users MUST NOT use external locks. Check the documentation in dma_fence_init() to understand the motives behind the legacy use cases.”h]”hŒ‰New users MUST NOT use external locks. Check the documentation in dma_fence_init() to understand the motives behind the legacy use cases.”…”�”}”(hjƒéh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´Mnhjèçubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jg hj�µh²hh³Nh´NubjÉ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÕŒ"dma_fence_driver_name (C function)”Œc.dma_fence_driver_name”hNt”auh1jÈhj�µh²hh³Nh´NubjÛ)�”}”(hhh]”(jà)�”}”(hŒBconst char __rcu * dma_fence_driver_name (struct dma_fence *fence)”h]”jæ)�”}”(hŒ@const char __rcu *dma_fence_driver_name(struct dma_fence *fence)”h]”(jì)�”}”(hj™h]”hŒconst”…”�”}”(hj²éh²hh³Nh´Nubah}”(h]”h ]”jøah"]”h$]”h&]”uh1jëhj®éh²hh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´M|ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÀéh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj®éh²hh³j¿éh´M|ubjM)�”}”(hŒchar”h]”hŒchar”…”�”}”(hjÎéh²hh³Nh´Nubah}”(h]”h ]”jYah"]”h$]”h&]”uh1jLhj®éh²hh³j¿éh´M|ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÜéh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj®éh²hh³j¿éh´M|ubhŒ__rcu”…”�”}”(hj®éh²hh³Nh´Nubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjîéh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj®éh²hh³j¿éh´M|ubjd)�”}”(hjgh]”hŒ*”…”�”}”(hjüéh²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchj®éh²hh³j¿éh´M|ubj )�”}”(hŒdma_fence_driver_name”h]”j )�”}”(hŒdma_fence_driver_name”h]”hŒdma_fence_driver_name”…”�”}”(hj êh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj êubah}”(h]”h ]”(j' j( eh"]”h$]”h&]”j÷jøuh1j hj®éh²hh³j¿éh´M|ubjŒ)�”}”(hŒ(struct dma_fence *fence)”h]”j’)�”}”(hŒstruct dma_fence *fence”h]”(jì)�”}”(hjïh]”hŒstruct”…”�”}”(hj)êh²hh³Nh´Nubah}”(h]”h ]”jøah"]”h$]”h&]”uh1jëhj%êubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj6êh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj%êubh)�”}”(hhh]”j )�”}”(hŒ dma_fence”h]”hŒ dma_fence”…”�”}”(hjGêh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjDêubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jîŒreftype”jGŒ reftarget”jIêŒmodname”NŒ classname”Nj³j¶)�”}”j¹]”jO)�”}”jGjêsbŒc.dma_fence_driver_name”†”asbuh1hhj%êubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjgêh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj%êubjd)�”}”(hjgh]”hŒ*”…”�”}”(hjuêh²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchj%êubj )�”}”(hŒfence”h]”hŒfence”…”�”}”(hj‚êh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj%êubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj÷jøuh1j‘hj!êubah}”(h]”h ]”h"]”h$]”h&]”j÷jøuh1j‹hj®éh²hh³j¿éh´M|ubeh}”(h]”h ]”h"]”h$]”h&]”j÷jøj2 ˆuh1jåj3 j4 hjªéh²hh³j¿éh´M|ubah}”(h]”j¥éah ]”(j8 j9 eh"]”h$]”h&]”j= ˆj> )j? huh1jßh³j¿éh´M|hj§éh²hubjA )�”}”(hhh]”hÌ)�”}”(hŒAccess the driver name”h]”hŒAccess the driver name”…”�”}”(hj¬êh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´M|hj©êh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j@ hj§éh²hh³j¿éh´M|ubeh}”(h]”h ]”(jîŒfunction”eh"]”h$]”h&]”ja jîjb jÄêjc jÄêjd ‰je ‰jf ‰uh1jÚh²hhj�µh³Nh´Nubjh )�”}”(hXh**Parameters** ``struct dma_fence *fence`` the fence to query **Description** Returns a driver name backing the dma-fence implementation. IMPORTANT CONSIDERATION: Dma-fence contract stipulates that access to driver provided data (data not directly embedded into the object itself), such as the :c:type:`dma_fence.lock ` and memory potentially accessed by the :c:type:`dma_fence.ops ` functions, is forbidden after the fence has been signalled. Drivers are allowed to free that data, and some do. To allow safe access drivers are mandated to guarantee a RCU grace period between signalling the fence and freeing said data. As such access to the driver name is only valid inside a RCU locked section. The pointer MUST be both queried and USED ONLY WITHIN a SINGLE block guarded by the :c:type:`rcu_read_lock` and :c:type:`rcu_read_unlock` pair.”h]”(hÌ)�”}”(hŒ**Parameters**”h]”jr )�”}”(hjÎêh]”hŒ Parameters”…”�”}”(hjÐêh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hjÌêubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´M€hjÈêubj´ )�”}”(hhh]”j¹ )�”}”(hŒ/``struct dma_fence *fence`` the fence to query ”h]”(j¿ )�”}”(hŒ``struct dma_fence *fence``”h]”jâ)�”}”(hjíêh]”hŒstruct dma_fence *fence”…”�”}”(hjïêh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjëêubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´M}hjçêubjÙ )�”}”(hhh]”hÌ)�”}”(hŒthe fence to query”h]”hŒthe fence to query”…”�”}”(hjëh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jëh´M}hjëubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hjçêubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³jëh´M}hjäêubah}”(h]”h ]”h"]”h$]”h&]”uh1j³ hjÈêubhÌ)�”}”(hŒ**Description**”h]”jr )�”}”(hj(ëh]”hŒ Description”…”�”}”(hj*ëh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hj&ëubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´MhjÈêubhÌ)�”}”(hŒ;Returns a driver name backing the dma-fence implementation.”h]”hŒ;Returns a driver name backing the dma-fence implementation.”…”�”}”(hj>ëh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´M~hjÈêubhÌ)�”}”(hX{IMPORTANT CONSIDERATION: Dma-fence contract stipulates that access to driver provided data (data not directly embedded into the object itself), such as the :c:type:`dma_fence.lock ` and memory potentially accessed by the :c:type:`dma_fence.ops ` functions, is forbidden after the fence has been signalled. Drivers are allowed to free that data, and some do.”h]”(hŒœIMPORTANT CONSIDERATION: Dma-fence contract stipulates that access to driver provided data (data not directly embedded into the object itself), such as the ”…”�”}”(hjMëh²hh³Nh´Nubh)�”}”(hŒ$:c:type:`dma_fence.lock `”h]”jâ)�”}”(hjWëh]”hŒdma_fence.lock”…”�”}”(hjYëh²hh³Nh´Nubah}”(h]”h ]”(jíjîŒc-type”eh"]”h$]”h&]”uh1jáhjUëubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”júŒ refdomain”jîŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰j³j·jŒ dma_fence”uh1hh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´M€hjMëubhŒ( and memory potentially accessed by the ”…”�”}”(hjMëh²hh³Nh´Nubh)�”}”(hŒ#:c:type:`dma_fence.ops `”h]”jâ)�”}”(hj{ëh]”hŒ dma_fence.ops”…”�”}”(hj}ëh²hh³Nh´Nubah}”(h]”h ]”(jíjîŒc-type”eh"]”h$]”h&]”uh1jáhjyëubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”júŒ refdomain”jîŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰j³j·jŒ dma_fence”uh1hh³jtëh´M€hjMëubhŒp functions, is forbidden after the fence has been signalled. Drivers are allowed to free that data, and some do.”…”�”}”(hjMëh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jtëh´M€hjÈêubhÌ)�”}”(hŒ}To allow safe access drivers are mandated to guarantee a RCU grace period between signalling the fence and freeing said data.”h]”hŒ}To allow safe access drivers are mandated to guarantee a RCU grace period between signalling the fence and freeing said data.”…”�”}”(hj¢ëh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´M‡hjÈêubhÌ)�”}”(hŒÜAs such access to the driver name is only valid inside a RCU locked section. The pointer MUST be both queried and USED ONLY WITHIN a SINGLE block guarded by the :c:type:`rcu_read_lock` and :c:type:`rcu_read_unlock` pair.”h]”(hŒ¡As such access to the driver name is only valid inside a RCU locked section. The pointer MUST be both queried and USED ONLY WITHIN a SINGLE block guarded by the ”…”�”}”(hj±ëh²hh³Nh´Nubh)�”}”(hŒ:c:type:`rcu_read_lock`”h]”jâ)�”}”(hj»ëh]”hŒ rcu_read_lock”…”�”}”(hj½ëh²hh³Nh´Nubah}”(h]”h ]”(jíjîŒc-type”eh"]”h$]”h&]”uh1jáhj¹ëubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”júŒ refdomain”jîŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰j³j·jŒ rcu_read_lock”uh1hh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´MŠhj±ëubhŒ and ”…”�”}”(hj±ëh²hh³Nh´Nubh)�”}”(hŒ:c:type:`rcu_read_unlock`”h]”jâ)�”}”(hjßëh]”hŒrcu_read_unlock”…”�”}”(hjáëh²hh³Nh´Nubah}”(h]”h ]”(jíjîŒc-type”eh"]”h$]”h&]”uh1jáhjÝëubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”júŒ refdomain”jîŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰j³j·jŒrcu_read_unlock”uh1hh³jØëh´MŠhj±ëubhŒ pair.”…”�”}”(hj±ëh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jØëh´MŠhjÈêubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jg hj�µh²hh³Nh´NubjÉ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÕŒ$dma_fence_timeline_name (C function)”Œc.dma_fence_timeline_name”hNt”auh1jÈhj�µh²hh³Nh´NubjÛ)�”}”(hhh]”(jà)�”}”(hŒDconst char __rcu * dma_fence_timeline_name (struct dma_fence *fence)”h]”jæ)�”}”(hŒBconst char __rcu *dma_fence_timeline_name(struct dma_fence *fence)”h]”(jì)�”}”(hj™h]”hŒconst”…”�”}”(hj&ìh²hh³Nh´Nubah}”(h]”h ]”jøah"]”h$]”h&]”uh1jëhj"ìh²hh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´M¢ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj4ìh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj"ìh²hh³j3ìh´M¢ubjM)�”}”(hŒchar”h]”hŒchar”…”�”}”(hjBìh²hh³Nh´Nubah}”(h]”h ]”jYah"]”h$]”h&]”uh1jLhj"ìh²hh³j3ìh´M¢ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjPìh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj"ìh²hh³j3ìh´M¢ubhŒ__rcu”…”�”}”(hj"ìh²hh³Nh´Nubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjbìh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj"ìh²hh³j3ìh´M¢ubjd)�”}”(hjgh]”hŒ*”…”�”}”(hjpìh²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchj"ìh²hh³j3ìh´M¢ubj )�”}”(hŒdma_fence_timeline_name”h]”j )�”}”(hŒdma_fence_timeline_name”h]”hŒdma_fence_timeline_name”…”�”}”(hj�ìh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj}ìubah}”(h]”h ]”(j' j( eh"]”h$]”h&]”j÷jøuh1j hj"ìh²hh³j3ìh´M¢ubjŒ)�”}”(hŒ(struct dma_fence *fence)”h]”j’)�”}”(hŒstruct dma_fence *fence”h]”(jì)�”}”(hjïh]”hŒstruct”…”�”}”(hj�ìh²hh³Nh´Nubah}”(h]”h ]”jøah"]”h$]”h&]”uh1jëhj™ìubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjªìh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj™ìubh)�”}”(hhh]”j )�”}”(hŒ dma_fence”h]”hŒ dma_fence”…”�”}”(hj»ìh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj¸ìubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jîŒreftype”jGŒ reftarget”j½ìŒmodname”NŒ classname”Nj³j¶)�”}”j¹]”jO)�”}”jGjƒìsbŒc.dma_fence_timeline_name”†”asbuh1hhj™ìubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÛìh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj™ìubjd)�”}”(hjgh]”hŒ*”…”�”}”(hjéìh²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchj™ìubj )�”}”(hŒfence”h]”hŒfence”…”�”}”(hjöìh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj™ìubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj÷jøuh1j‘hj•ìubah}”(h]”h ]”h"]”h$]”h&]”j÷jøuh1j‹hj"ìh²hh³j3ìh´M¢ubeh}”(h]”h ]”h"]”h$]”h&]”j÷jøj2 ˆuh1jåj3 j4 hjìh²hh³j3ìh´M¢ubah}”(h]”jìah ]”(j8 j9 eh"]”h$]”h&]”j= ˆj> )j? huh1jßh³j3ìh´M¢hjìh²hubjA )�”}”(hhh]”hÌ)�”}”(hŒAccess the timeline name”h]”hŒAccess the timeline name”…”�”}”(hj íh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´M¢hjíh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j@ hjìh²hh³j3ìh´M¢ubeh}”(h]”h ]”(jîŒfunction”eh"]”h$]”h&]”ja jîjb j8íjc j8íjd ‰je ‰jf ‰uh1jÚh²hhj�µh³Nh´Nubjh )�”}”(hXn**Parameters** ``struct dma_fence *fence`` the fence to query **Description** Returns a timeline name provided by the dma-fence implementation. IMPORTANT CONSIDERATION: Dma-fence contract stipulates that access to driver provided data (data not directly embedded into the object itself), such as the :c:type:`dma_fence.lock ` and memory potentially accessed by the :c:type:`dma_fence.ops ` functions, is forbidden after the fence has been signalled. Drivers are allowed to free that data, and some do. To allow safe access drivers are mandated to guarantee a RCU grace period between signalling the fence and freeing said data. As such access to the driver name is only valid inside a RCU locked section. The pointer MUST be both queried and USED ONLY WITHIN a SINGLE block guarded by the :c:type:`rcu_read_lock` and :c:type:`rcu_read_unlock` pair.”h]”(hÌ)�”}”(hŒ**Parameters**”h]”jr )�”}”(hjBíh]”hŒ Parameters”…”�”}”(hjDíh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hj@íubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´M¦hj<íubj´ )�”}”(hhh]”j¹ )�”}”(hŒ/``struct dma_fence *fence`` the fence to query ”h]”(j¿ )�”}”(hŒ``struct dma_fence *fence``”h]”jâ)�”}”(hjaíh]”hŒstruct dma_fence *fence”…”�”}”(hjcíh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj_íubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´M£hj[íubjÙ )�”}”(hhh]”hÌ)�”}”(hŒthe fence to query”h]”hŒthe fence to query”…”�”}”(hjzíh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jvíh´M£hjwíubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hj[íubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³jvíh´M£hjXíubah}”(h]”h ]”h"]”h$]”h&]”uh1j³ hj<íubhÌ)�”}”(hŒ**Description**”h]”jr )�”}”(hjœíh]”hŒ Description”…”�”}”(hjžíh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hjšíubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´M¥hj<íubhÌ)�”}”(hŒAReturns a timeline name provided by the dma-fence implementation.”h]”hŒAReturns a timeline name provided by the dma-fence implementation.”…”�”}”(hj²íh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´M¤hj<íubhÌ)�”}”(hX{IMPORTANT CONSIDERATION: Dma-fence contract stipulates that access to driver provided data (data not directly embedded into the object itself), such as the :c:type:`dma_fence.lock ` and memory potentially accessed by the :c:type:`dma_fence.ops ` functions, is forbidden after the fence has been signalled. Drivers are allowed to free that data, and some do.”h]”(hŒœIMPORTANT CONSIDERATION: Dma-fence contract stipulates that access to driver provided data (data not directly embedded into the object itself), such as the ”…”�”}”(hjÁíh²hh³Nh´Nubh)�”}”(hŒ$:c:type:`dma_fence.lock `”h]”jâ)�”}”(hjËíh]”hŒdma_fence.lock”…”�”}”(hjÍíh²hh³Nh´Nubah}”(h]”h ]”(jíjîŒc-type”eh"]”h$]”h&]”uh1jáhjÉíubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”júŒ refdomain”jîŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰j³j·jŒ dma_fence”uh1hh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´M¦hjÁíubhŒ( and memory potentially accessed by the ”…”�”}”(hjÁíh²hh³Nh´Nubh)�”}”(hŒ#:c:type:`dma_fence.ops `”h]”jâ)�”}”(hjïíh]”hŒ dma_fence.ops”…”�”}”(hjñíh²hh³Nh´Nubah}”(h]”h ]”(jíjîŒc-type”eh"]”h$]”h&]”uh1jáhjííubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”júŒ refdomain”jîŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰j³j·jŒ dma_fence”uh1hh³jèíh´M¦hjÁíubhŒp functions, is forbidden after the fence has been signalled. Drivers are allowed to free that data, and some do.”…”�”}”(hjÁíh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jèíh´M¦hj<íubhÌ)�”}”(hŒ}To allow safe access drivers are mandated to guarantee a RCU grace period between signalling the fence and freeing said data.”h]”hŒ}To allow safe access drivers are mandated to guarantee a RCU grace period between signalling the fence and freeing said data.”…”�”}”(hjîh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´M­hj<íubhÌ)�”}”(hŒÜAs such access to the driver name is only valid inside a RCU locked section. The pointer MUST be both queried and USED ONLY WITHIN a SINGLE block guarded by the :c:type:`rcu_read_lock` and :c:type:`rcu_read_unlock` pair.”h]”(hŒ¡As such access to the driver name is only valid inside a RCU locked section. The pointer MUST be both queried and USED ONLY WITHIN a SINGLE block guarded by the ”…”�”}”(hj%îh²hh³Nh´Nubh)�”}”(hŒ:c:type:`rcu_read_lock`”h]”jâ)�”}”(hj/îh]”hŒ rcu_read_lock”…”�”}”(hj1îh²hh³Nh´Nubah}”(h]”h ]”(jíjîŒc-type”eh"]”h$]”h&]”uh1jáhj-îubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”júŒ refdomain”jîŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰j³j·jŒ rcu_read_lock”uh1hh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:187: ./drivers/dma-buf/dma-fence.c”h´M°hj%îubhŒ and ”…”�”}”(hj%îh²hh³Nh´Nubh)�”}”(hŒ:c:type:`rcu_read_unlock`”h]”jâ)�”}”(hjSîh]”hŒrcu_read_unlock”…”�”}”(hjUîh²hh³Nh´Nubah}”(h]”h ]”(jíjîŒc-type”eh"]”h$]”h&]”uh1jáhjQîubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”júŒ refdomain”jîŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰j³j·jŒrcu_read_unlock”uh1hh³jLîh´M°hj%îubhŒ pair.”…”�”}”(hj%îh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jLîh´M°hj<íubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jg hj�µh²hh³Nh´NubjÉ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÕŒdma_fence (C struct)”Œ c.dma_fence”hNt”auh1jÈhj�µh²hh³Nh´NubjÛ)�”}”(hhh]”(jà)�”}”(hŒ dma_fence”h]”jæ)�”}”(hŒstruct dma_fence”h]”(jì)�”}”(hjïh]”hŒstruct”…”�”}”(hjšîh²hh³Nh´Nubah}”(h]”h ]”jøah"]”h$]”h&]”uh1jëhj–îh²hh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´Kubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¨îh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj–îh²hh³j§îh´Kubj )�”}”(hŒ dma_fence”h]”j )�”}”(hj”îh]”hŒ dma_fence”…”�”}”(hjºîh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj¶îubah}”(h]”h ]”(j' j( eh"]”h$]”h&]”j÷jøuh1j hj–îh²hh³j§îh´Kubeh}”(h]”h ]”h"]”h$]”h&]”j÷jøj2 ˆuh1jåj3 j4 hj’îh²hh³j§îh´Kubah}”(h]”j�îah ]”(j8 j9 eh"]”h$]”h&]”j= ˆj> )j? huh1jßh³j§îh´Khj�îh²hubjA )�”}”(hhh]”hÌ)�”}”(hŒ"software synchronization primitive”h]”hŒ"software synchronization primitive”…”�”}”(hjÜîh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´K hjÙîh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j@ hj�îh²hh³j§îh´Kubeh}”(h]”h ]”(jîŒstruct”eh"]”h$]”h&]”ja jîjb jôîjc jôîjd ‰je ‰jf ‰uh1jÚh²hhj�µh³Nh´Nubjh )�”}”(hX**Definition**:: struct dma_fence { union { spinlock_t *extern_lock; spinlock_t inline_lock; }; const struct dma_fence_ops *ops; union { struct list_head cb_list; ktime_t timestamp; struct rcu_head rcu; }; u64 context; u64 seqno; unsigned long flags; struct kref refcount; int error; }; **Members** ``{unnamed_union}`` anonymous ``extern_lock`` external spin_lock_irqsave used for locking (deprecated) ``inline_lock`` alternative internal spin_lock_irqsave used for locking ``ops`` dma_fence_ops associated with this fence ``{unnamed_union}`` anonymous ``cb_list`` list of all callbacks to call ``timestamp`` Timestamp when the fence was signaled. ``rcu`` used for releasing fence with kfree_rcu ``context`` execution context this fence belongs to, returned by dma_fence_context_alloc() ``seqno`` the sequence number of this fence inside the execution context, can be compared to decide which fence would be signaled later. ``flags`` A mask of DMA_FENCE_FLAG_* defined below ``refcount`` refcount for this fence ``error`` Optional, only valid if < 0, must be set before calling dma_fence_signal, indicates that the fence has completed with an error.”h]”(hÌ)�”}”(hŒ**Definition**::”h]”(jr )�”}”(hŒ**Definition**”h]”hŒ Definition”…”�”}”(hjïh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hjüîubhŒ:”…”�”}”(hjüîh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´K$hjøîubjè)�”}”(hX]struct dma_fence { union { spinlock_t *extern_lock; spinlock_t inline_lock; }; const struct dma_fence_ops *ops; union { struct list_head cb_list; ktime_t timestamp; struct rcu_head rcu; }; u64 context; u64 seqno; unsigned long flags; struct kref refcount; int error; };”h]”hX]struct dma_fence { union { spinlock_t *extern_lock; spinlock_t inline_lock; }; const struct dma_fence_ops *ops; union { struct list_head cb_list; ktime_t timestamp; struct rcu_head rcu; }; u64 context; u64 seqno; unsigned long flags; struct kref refcount; int error; };”…”�”}”hjïsbah}”(h]”h ]”h"]”h$]”h&]”j÷jøuh1jçh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´K&hjøîubhÌ)�”}”(hŒ **Members**”h]”jr )�”}”(hj*ïh]”hŒMembers”…”�”}”(hj,ïh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hj(ïubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´K8hjøîubj´ )�”}”(hhh]”(j¹ )�”}”(hŒ``{unnamed_union}`` anonymous ”h]”(j¿ )�”}”(hŒ``{unnamed_union}``”h]”jâ)�”}”(hjIïh]”hŒ{unnamed_union}”…”�”}”(hjKïh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjGïubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´KhjCïubjÙ )�”}”(hhh]”hÌ)�”}”(hŒ anonymous”h]”hŒ anonymous”…”�”}”(hjbïh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j^ïh´Khj_ïubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hjCïubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³j^ïh´Khj@ïubj¹ )�”}”(hŒI``extern_lock`` external spin_lock_irqsave used for locking (deprecated) ”h]”(j¿ )�”}”(hŒ``extern_lock``”h]”jâ)�”}”(hj‚ïh]”hŒ extern_lock”…”�”}”(hj„ïh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj€ïubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´K&hj|ïubjÙ )�”}”(hhh]”hÌ)�”}”(hŒ8external spin_lock_irqsave used for locking (deprecated)”h]”hŒ8external spin_lock_irqsave used for locking (deprecated)”…”�”}”(hj›ïh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j—ïh´K&hj˜ïubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hj|ïubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³j—ïh´K&hj@ïubj¹ )�”}”(hŒH``inline_lock`` alternative internal spin_lock_irqsave used for locking ”h]”(j¿ )�”}”(hŒ``inline_lock``”h]”jâ)�”}”(hj»ïh]”hŒ inline_lock”…”�”}”(hj½ïh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj¹ïubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´K'hjµïubjÙ )�”}”(hhh]”hÌ)�”}”(hŒ7alternative internal spin_lock_irqsave used for locking”h]”hŒ7alternative internal spin_lock_irqsave used for locking”…”�”}”(hjÔïh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jÐïh´K'hjÑïubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hjµïubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³jÐïh´K'hj@ïubj¹ )�”}”(hŒ1``ops`` dma_fence_ops associated with this fence ”h]”(j¿ )�”}”(hŒ``ops``”h]”jâ)�”}”(hjôïh]”hŒops”…”�”}”(hjöïh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjòïubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´K#hjîïubjÙ )�”}”(hhh]”hÌ)�”}”(hŒ(dma_fence_ops associated with this fence”h]”hŒ(dma_fence_ops associated with this fence”…”�”}”(hj ðh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j ðh´K#hj ðubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hjîïubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³j ðh´K#hj@ïubj¹ )�”}”(hŒ``{unnamed_union}`` anonymous ”h]”(j¿ )�”}”(hŒ``{unnamed_union}``”h]”jâ)�”}”(hj-ðh]”hŒ{unnamed_union}”…”�”}”(hj/ðh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj+ðubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´Khj'ðubjÙ )�”}”(hhh]”hÌ)�”}”(hŒ anonymous”h]”hŒ anonymous”…”�”}”(hjFðh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jBðh´KhjCðubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hj'ðubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³jBðh´Khj@ïubj¹ )�”}”(hŒ*``cb_list`` list of all callbacks to call ”h]”(j¿ )�”}”(hŒ ``cb_list``”h]”jâ)�”}”(hjfðh]”hŒcb_list”…”�”}”(hjhðh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjdðubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´K%hj`ðubjÙ )�”}”(hhh]”hÌ)�”}”(hŒlist of all callbacks to call”h]”hŒlist of all callbacks to call”…”�”}”(hjðh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j{ðh´K%hj|ðubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hj`ðubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³j{ðh´K%hj@ïubj¹ )�”}”(hŒ5``timestamp`` Timestamp when the fence was signaled. ”h]”(j¿ )�”}”(hŒ ``timestamp``”h]”jâ)�”}”(hjŸðh]”hŒ timestamp”…”�”}”(hj¡ðh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj�ðubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´K-hj™ðubjÙ )�”}”(hhh]”hÌ)�”}”(hŒ&Timestamp when the fence was signaled.”h]”hŒ&Timestamp when the fence was signaled.”…”�”}”(hj¸ðh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j´ðh´K-hjµðubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hj™ðubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³j´ðh´K-hj@ïubj¹ )�”}”(hŒ0``rcu`` used for releasing fence with kfree_rcu ”h]”(j¿ )�”}”(hŒ``rcu``”h]”jâ)�”}”(hjØðh]”hŒrcu”…”�”}”(hjÚðh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjÖðubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´K$hjÒðubjÙ )�”}”(hhh]”hÌ)�”}”(hŒ'used for releasing fence with kfree_rcu”h]”hŒ'used for releasing fence with kfree_rcu”…”�”}”(hjñðh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jíðh´K$hjîðubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hjÒðubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³jíðh´K$hj@ïubj¹ )�”}”(hŒ[``context`` execution context this fence belongs to, returned by dma_fence_context_alloc() ”h]”(j¿ )�”}”(hŒ ``context``”h]”jâ)�”}”(hjñh]”hŒcontext”…”�”}”(hjñh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjñubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´K)hj ñubjÙ )�”}”(hhh]”hÌ)�”}”(hŒNexecution context this fence belongs to, returned by dma_fence_context_alloc()”h]”hŒNexecution context this fence belongs to, returned by dma_fence_context_alloc()”…”�”}”(hj*ñh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´K(hj'ñubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hj ñubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³j&ñh´K)hj@ïubj¹ )�”}”(hŒ‰``seqno`` the sequence number of this fence inside the execution context, can be compared to decide which fence would be signaled later. ”h]”(j¿ )�”}”(hŒ ``seqno``”h]”jâ)�”}”(hjKñh]”hŒseqno”…”�”}”(hjMñh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjIñubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´K+hjEñubjÙ )�”}”(hhh]”hÌ)�”}”(hŒ~the sequence number of this fence inside the execution context, can be compared to decide which fence would be signaled later.”h]”hŒ~the sequence number of this fence inside the execution context, can be compared to decide which fence would be signaled later.”…”�”}”(hjdñh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´K*hjañubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hjEñubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³j`ñh´K+hj@ïubj¹ )�”}”(hŒ3``flags`` A mask of DMA_FENCE_FLAG_* defined below ”h]”(j¿ )�”}”(hŒ ``flags``”h]”jâ)�”}”(hj…ñh]”hŒflags”…”�”}”(hj‡ñh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjƒñubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´K,hjñubjÙ )�”}”(hhh]”hÌ)�”}”(hŒ(A mask of DMA_FENCE_FLAG_* defined below”h]”hŒ(A mask of DMA_FENCE_FLAG_* defined below”…”�”}”(hjžñh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jšñh´K,hj›ñubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hjñubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³jšñh´K,hj@ïubj¹ )�”}”(hŒ%``refcount`` refcount for this fence ”h]”(j¿ )�”}”(hŒ ``refcount``”h]”jâ)�”}”(hj¾ñh]”hŒrefcount”…”�”}”(hjÀñh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj¼ñubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´K"hj¸ñubjÙ )�”}”(hhh]”hÌ)�”}”(hŒrefcount for this fence”h]”hŒrefcount for this fence”…”�”}”(hj×ñh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jÓñh´K"hjÔñubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hj¸ñubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³jÓñh´K"hj@ïubj¹ )�”}”(hŒ‰``error`` Optional, only valid if < 0, must be set before calling dma_fence_signal, indicates that the fence has completed with an error.”h]”(j¿ )�”}”(hŒ ``error``”h]”jâ)�”}”(hj÷ñh]”hŒerror”…”�”}”(hjùñh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjõñubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´K.hjññubjÙ )�”}”(hhh]”hÌ)�”}”(hŒOptional, only valid if < 0, must be set before calling dma_fence_signal, indicates that the fence has completed with an error.”h]”hŒOptional, only valid if < 0, must be set before calling dma_fence_signal, indicates that the fence has completed with an error.”…”�”}”(hjòh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j òh´K.hj òubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hjññubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³j òh´K.hj@ïubeh}”(h]”h ]”h"]”h$]”h&]”uh1j³ hjøîubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jg hj�µh²hh³Nh´NubhÌ)�”}”(hŒ**Description**”h]”jr )�”}”(hj9òh]”hŒ Description”…”�”}”(hj;òh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hj7òubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´K2hj�µh²hubhÌ)�”}”(hŒ“the flags member must be manipulated and read using the appropriate atomic ops (bit_*), so taking the spinlock will not be needed most of the time.”h]”hŒ“the flags member must be manipulated and read using the appropriate atomic ops (bit_*), so taking the spinlock will not be needed most of the time.”…”�”}”(hjOòh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´K/hj�µh²hubhÌ)�”}”(hXDMA_FENCE_FLAG_INITIALIZED_BIT - fence was initialized DMA_FENCE_FLAG_INLINE_LOCK_BIT - use inline spinlock instead of external one DMA_FENCE_FLAG_SIGNALED_BIT - fence is already signaled DMA_FENCE_FLAG_TIMESTAMP_BIT - timestamp recorded for fence signaling DMA_FENCE_FLAG_ENABLE_SIGNAL_BIT - enable_signaling might have been called DMA_FENCE_FLAG_USER_BITS - start of the unused bits, can be used by the implementer of the fence for its own purposes. Can be used in different ways by different fence implementers, so do not rely on this.”h]”hXDMA_FENCE_FLAG_INITIALIZED_BIT - fence was initialized DMA_FENCE_FLAG_INLINE_LOCK_BIT - use inline spinlock instead of external one DMA_FENCE_FLAG_SIGNALED_BIT - fence is already signaled DMA_FENCE_FLAG_TIMESTAMP_BIT - timestamp recorded for fence signaling DMA_FENCE_FLAG_ENABLE_SIGNAL_BIT - enable_signaling might have been called DMA_FENCE_FLAG_USER_BITS - start of the unused bits, can be used by the implementer of the fence for its own purposes. Can be used in different ways by different fence implementers, so do not rely on this.”…”�”}”(hj^òh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´K3hj�µh²hubhÌ)�”}”(hXSince atomic bitops are used, this is not guaranteed to be the case. Particularly, if the bit was set, but dma_fence_signal was called right before this bit was set, it would have been able to set the DMA_FENCE_FLAG_SIGNALED_BIT, before enable_signaling was called. Adding a check for DMA_FENCE_FLAG_SIGNALED_BIT after setting DMA_FENCE_FLAG_ENABLE_SIGNAL_BIT closes this race, and makes sure that after dma_fence_signal was called, any enable_signaling call will have either been completed, or never called at all.”h]”hXSince atomic bitops are used, this is not guaranteed to be the case. Particularly, if the bit was set, but dma_fence_signal was called right before this bit was set, it would have been able to set the DMA_FENCE_FLAG_SIGNALED_BIT, before enable_signaling was called. Adding a check for DMA_FENCE_FLAG_SIGNALED_BIT after setting DMA_FENCE_FLAG_ENABLE_SIGNAL_BIT closes this race, and makes sure that after dma_fence_signal was called, any enable_signaling call will have either been completed, or never called at all.”…”�”}”(hjmòh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´K )j? huh1jßh³j¢òh´KHhjŠòh²hubjA )�”}”(hhh]”hÌ)�”}”(hŒ%callback for dma_fence_add_callback()”h]”hŒ%callback for dma_fence_add_callback()”…”�”}”(hj×òh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´KxhjÔòh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j@ hjŠòh²hh³j¢òh´KHubeh}”(h]”h ]”(jîŒstruct”eh"]”h$]”h&]”ja jîjb jïòjc jïòjd ‰je ‰jf ‰uh1jÚh²hhj�µh³Nh´Nubjh )�”}”(hŒï**Definition**:: struct dma_fence_cb { struct list_head node; dma_fence_func_t func; }; **Members** ``node`` used by dma_fence_add_callback() to append this struct to fence::cb_list ``func`` dma_fence_func_t to call”h]”(hÌ)�”}”(hŒ**Definition**::”h]”(jr )�”}”(hŒ**Definition**”h]”hŒ Definition”…”�”}”(hjûòh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hj÷òubhŒ:”…”�”}”(hj÷òh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´K|hjóòubjè)�”}”(hŒNstruct dma_fence_cb { struct list_head node; dma_fence_func_t func; };”h]”hŒNstruct dma_fence_cb { struct list_head node; dma_fence_func_t func; };”…”�”}”hjósbah}”(h]”h ]”h"]”h$]”h&]”j÷jøuh1jçh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´K~hjóòubhÌ)�”}”(hŒ **Members**”h]”jr )�”}”(hj%óh]”hŒMembers”…”�”}”(hj'óh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hj#óubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´Kƒhjóòubj´ )�”}”(hhh]”(j¹ )�”}”(hŒR``node`` used by dma_fence_add_callback() to append this struct to fence::cb_list ”h]”(j¿ )�”}”(hŒ``node``”h]”jâ)�”}”(hjDóh]”hŒnode”…”�”}”(hjFóh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjBóubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´Kzhj>óubjÙ )�”}”(hhh]”hÌ)�”}”(hŒHused by dma_fence_add_callback() to append this struct to fence::cb_list”h]”hŒHused by dma_fence_add_callback() to append this struct to fence::cb_list”…”�”}”(hj]óh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jYóh´KzhjZóubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hj>óubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³jYóh´Kzhj;óubj¹ )�”}”(hŒ!``func`` dma_fence_func_t to call”h]”(j¿ )�”}”(hŒ``func``”h]”jâ)�”}”(hj}óh]”hŒfunc”…”�”}”(hjóh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj{óubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´KzhjwóubjÙ )�”}”(hhh]”hÌ)�”}”(hŒdma_fence_func_t to call”h]”hŒdma_fence_func_t to call”…”�”}”(hj–óh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´K{hj“óubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hjwóubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³j’óh´Kzhj;óubeh}”(h]”h ]”h"]”h$]”h&]”uh1j³ hjóòubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jg hj�µh²hh³Nh´NubhÌ)�”}”(hŒ**Description**”h]”jr )�”}”(hjÀóh]”hŒ Description”…”�”}”(hjÂóh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hj¾óubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´K~hj�µh²hubhÌ)�”}”(hŒ�This struct will be initialized by dma_fence_add_callback(), additional data can be passed along by embedding dma_fence_cb in another struct.”h]”hŒ�This struct will be initialized by dma_fence_add_callback(), additional data can be passed along by embedding dma_fence_cb in another struct.”…”�”}”(hjÖóh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´K{hj�µh²hubjÉ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÕŒdma_fence_ops (C struct)”Œc.dma_fence_ops”hNt”auh1jÈhj�µh²hh³Nh´NubjÛ)�”}”(hhh]”(jà)�”}”(hŒ dma_fence_ops”h]”jæ)�”}”(hŒstruct dma_fence_ops”h]”(jì)�”}”(hjïh]”hŒstruct”…”�”}”(hjþóh²hh³Nh´Nubah}”(h]”h ]”jøah"]”h$]”h&]”uh1jëhjúóh²hh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´K�ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj ôh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjúóh²hh³j ôh´K�ubj )�”}”(hŒ dma_fence_ops”h]”j )�”}”(hjøóh]”hŒ dma_fence_ops”…”�”}”(hjôh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjôubah}”(h]”h ]”(j' j( eh"]”h$]”h&]”j÷jøuh1j hjúóh²hh³j ôh´K�ubeh}”(h]”h ]”h"]”h$]”h&]”j÷jøj2 ˆuh1jåj3 j4 hjöóh²hh³j ôh´K�ubah}”(h]”jñóah ]”(j8 j9 eh"]”h$]”h&]”j= ˆj> )j? huh1jßh³j ôh´K�hjóóh²hubjA )�”}”(hhh]”hÌ)�”}”(hŒ operations implemented for fence”h]”hŒ operations implemented for fence”…”�”}”(hj@ôh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´K…hj=ôh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j@ hjóóh²hh³j ôh´K�ubeh}”(h]”h ]”(jîŒstruct”eh"]”h$]”h&]”ja jîjb jXôjc jXôjd ‰je ‰jf ‰uh1jÚh²hhj�µh³Nh´Nubjh )�”}”(hXê**Definition**:: struct dma_fence_ops { const char * (*get_driver_name)(struct dma_fence *fence); const char * (*get_timeline_name)(struct dma_fence *fence); bool (*enable_signaling)(struct dma_fence *fence); bool (*signaled)(struct dma_fence *fence); signed long (*wait)(struct dma_fence *fence, bool intr, signed long timeout); void (*release)(struct dma_fence *fence); void (*set_deadline)(struct dma_fence *fence, ktime_t deadline); }; **Members** ``get_driver_name`` Returns the driver name. This is a callback to allow drivers to compute the name at runtime, without having it to store permanently for each fence, or build a cache of some sort. The returned string is RCU protected and can be freed after the fence signaled and a RCU grace period passed. This callback is mandatory. ``get_timeline_name`` Return the name of the context this fence belongs to. This is a callback to allow drivers to compute the name at runtime, without having it to store permanently for each fence, or build a cache of some sort. The returned string is RCU protected and can be freed after the fence signaled and a RCU grace period passed. This callback is mandatory. ``enable_signaling`` Enable software signaling of fence. For fence implementations that have the capability for hw->hw signaling, they can implement this op to enable the necessary interrupts, or insert commands into cmdstream, etc, to avoid these costly operations for the common case where only hw->hw synchronization is required. This is called in the first dma_fence_wait() or dma_fence_add_callback() path to let the fence implementation know that there is another driver waiting on the signal (ie. hw->sw case). This is called with irq's disabled, so only spinlocks which disable IRQ's can be used in the code outside of this callback. A return value of false indicates the fence already passed, or some failure occurred that made it impossible to enable signaling. True indicates successful enabling. :c:type:`dma_fence.error ` may be set in enable_signaling, but only when false is returned. Since many implementations can call dma_fence_signal() even when before **enable_signaling** has been called there's a race window, where the dma_fence_signal() might result in the final fence reference being released and its memory freed. To avoid this, implementations of this callback should grab their own reference using dma_fence_get(), to be released when the fence is signalled (through e.g. the interrupt handler). This callback is optional. If this callback is not present, then the driver must always have signaling enabled. ``signaled`` Peek whether the fence is signaled, as a fastpath optimization for e.g. dma_fence_wait() or dma_fence_add_callback(). Note that this callback does not need to make any guarantees beyond that a fence once indicates as signalled must always return true from this callback. This callback may return false even if the fence has completed already, in this case information hasn't propogated throug the system yet. See also dma_fence_is_signaled(). May set :c:type:`dma_fence.error ` if returning true. This callback is optional. ``wait`` Custom wait implementation, defaults to dma_fence_default_wait() if not set. Deprecated and should not be used by new implementations. Only used by existing implementations which need special handling for their hardware reset procedure. Must return -ERESTARTSYS if the wait is intr = true and the wait was interrupted, and remaining jiffies if fence has signaled, or 0 if wait timed out. Can also return other error values on custom implementations, which should be treated as if the fence is signaled. For example a hardware lockup could be reported like that. Implementing this callback prevents the fence from detaching after signaling and so it is necessary for the module providing the dma_fence_ops to stay loaded as long as the dma_fence exists. ``release`` Called on destruction of fence to release additional resources. Can be called from irq context. This callback is optional. If it is NULL, then dma_fence_free() is instead called as the default implementation. Implementing this callback prevents the fence from detaching after signaling and so it is necessary for the module providing the dma_fence_ops to stay loaded as long as the dma_fence exists. If the callback is implemented the memory backing the dma_fence object must be freed RCU safe. ``set_deadline`` Callback to allow a fence waiter to inform the fence signaler of an upcoming deadline, such as vblank, by which point the waiter would prefer the fence to be signaled by. This is intended to give feedback to the fence signaler to aid in power management decisions, such as boosting GPU frequency. This is called without :c:type:`dma_fence.lock ` held, it can be called multiple times and from any context. Locking is up to the callee if it has some state to manage. If multiple deadlines are set, the expectation is to track the soonest one. If the deadline is before the current time, it should be interpreted as an immediate deadline. This callback is optional.”h]”(hÌ)�”}”(hŒ**Definition**::”h]”(jr )�”}”(hŒ**Definition**”h]”hŒ Definition”…”�”}”(hjdôh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hj`ôubhŒ:”…”�”}”(hj`ôh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´K‰hj\ôubjè)�”}”(hXÂstruct dma_fence_ops { const char * (*get_driver_name)(struct dma_fence *fence); const char * (*get_timeline_name)(struct dma_fence *fence); bool (*enable_signaling)(struct dma_fence *fence); bool (*signaled)(struct dma_fence *fence); signed long (*wait)(struct dma_fence *fence, bool intr, signed long timeout); void (*release)(struct dma_fence *fence); void (*set_deadline)(struct dma_fence *fence, ktime_t deadline); };”h]”hXÂstruct dma_fence_ops { const char * (*get_driver_name)(struct dma_fence *fence); const char * (*get_timeline_name)(struct dma_fence *fence); bool (*enable_signaling)(struct dma_fence *fence); bool (*signaled)(struct dma_fence *fence); signed long (*wait)(struct dma_fence *fence, bool intr, signed long timeout); void (*release)(struct dma_fence *fence); void (*set_deadline)(struct dma_fence *fence, ktime_t deadline); };”…”�”}”hj}ôsbah}”(h]”h ]”h"]”h$]”h&]”j÷jøuh1jçh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´K‹hj\ôubhÌ)�”}”(hŒ **Members**”h]”jr )�”}”(hjŽôh]”hŒMembers”…”�”}”(hj�ôh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hjŒôubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´K•hj\ôubj´ )�”}”(hhh]”(j¹ )�”}”(hXS``get_driver_name`` Returns the driver name. This is a callback to allow drivers to compute the name at runtime, without having it to store permanently for each fence, or build a cache of some sort. The returned string is RCU protected and can be freed after the fence signaled and a RCU grace period passed. This callback is mandatory. ”h]”(j¿ )�”}”(hŒ``get_driver_name``”h]”jâ)�”}”(hj­ôh]”hŒget_driver_name”…”�”}”(hj¯ôh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj«ôubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´K’hj§ôubjÙ )�”}”(hhh]”(hÌ)�”}”(hŒ²Returns the driver name. This is a callback to allow drivers to compute the name at runtime, without having it to store permanently for each fence, or build a cache of some sort.”h]”hŒ²Returns the driver name. This is a callback to allow drivers to compute the name at runtime, without having it to store permanently for each fence, or build a cache of some sort.”…”�”•}”(hjÆôh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´K‹hjÃôubhÌ)�”}”(hŒmThe returned string is RCU protected and can be freed after the fence signaled and a RCU grace period passed.”h]”hŒmThe returned string is RCU protected and can be freed after the fence signaled and a RCU grace period passed.”…”�”}”(hjÕôh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´K�hjÃôubhÌ)�”}”(hŒThis callback is mandatory.”h]”hŒThis callback is mandatory.”…”�”}”(hjäôh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jÂôh´K’hjÃôubeh}”(h]”h ]”h"]”h$]”h&]”uh1jØ hj§ôubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³jÂôh´K’hj¤ôubj¹ )�”}”(hXr``get_timeline_name`` Return the name of the context this fence belongs to. This is a callback to allow drivers to compute the name at runtime, without having it to store permanently for each fence, or build a cache of some sort. The returned string is RCU protected and can be freed after the fence signaled and a RCU grace period passed. This callback is mandatory. ”h]”(j¿ )�”}”(hŒ``get_timeline_name``”h]”jâ)�”}”(hjõh]”hŒget_timeline_name”…”�”}”(hjõh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjõubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´K¡hjþôubjÙ )�”}”(hhh]”(hÌ)�”}”(hŒÏReturn the name of the context this fence belongs to. This is a callback to allow drivers to compute the name at runtime, without having it to store permanently for each fence, or build a cache of some sort.”h]”hŒÏReturn the name of the context this fence belongs to. This is a callback to allow drivers to compute the name at runtime, without having it to store permanently for each fence, or build a cache of some sort.”…”�”}”(hjõh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´K™hjõubhÌ)�”}”(hŒmThe returned string is RCU protected and can be freed after the fence signaled and a RCU grace period passed.”h]”hŒmThe returned string is RCU protected and can be freed after the fence signaled and a RCU grace period passed.”…”�”}”(hj,õh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´KžhjõubhÌ)�”}”(hŒThis callback is mandatory.”h]”hŒThis callback is mandatory.”…”�”}”(hj;õh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jõh´K¡hjõubeh}”(h]”h ]”h"]”h$]”h&]”uh1jØ hjþôubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³jõh´K¡hj¤ôubj¹ )�”}”(hX®``enable_signaling`` Enable software signaling of fence. For fence implementations that have the capability for hw->hw signaling, they can implement this op to enable the necessary interrupts, or insert commands into cmdstream, etc, to avoid these costly operations for the common case where only hw->hw synchronization is required. This is called in the first dma_fence_wait() or dma_fence_add_callback() path to let the fence implementation know that there is another driver waiting on the signal (ie. hw->sw case). This is called with irq's disabled, so only spinlocks which disable IRQ's can be used in the code outside of this callback. A return value of false indicates the fence already passed, or some failure occurred that made it impossible to enable signaling. True indicates successful enabling. :c:type:`dma_fence.error ` may be set in enable_signaling, but only when false is returned. Since many implementations can call dma_fence_signal() even when before **enable_signaling** has been called there's a race window, where the dma_fence_signal() might result in the final fence reference being released and its memory freed. To avoid this, implementations of this callback should grab their own reference using dma_fence_get(), to be released when the fence is signalled (through e.g. the interrupt handler). This callback is optional. If this callback is not present, then the driver must always have signaling enabled. ”h]”(j¿ )�”}”(hŒ``enable_signaling``”h]”jâ)�”}”(hj[õh]”hŒenable_signaling”…”�”}”(hj]õh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjYõubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´KÆhjUõubjÙ )�”}”(hhh]”(hÌ)�”}”(hŒ#Enable software signaling of fence.”h]”hŒ#Enable software signaling of fence.”…”�”}”(hjtõh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´K¨hjqõubhÌ)�”}”(hXÍFor fence implementations that have the capability for hw->hw signaling, they can implement this op to enable the necessary interrupts, or insert commands into cmdstream, etc, to avoid these costly operations for the common case where only hw->hw synchronization is required. This is called in the first dma_fence_wait() or dma_fence_add_callback() path to let the fence implementation know that there is another driver waiting on the signal (ie. hw->sw case).”h]”hXÍFor fence implementations that have the capability for hw->hw signaling, they can implement this op to enable the necessary interrupts, or insert commands into cmdstream, etc, to avoid these costly operations for the common case where only hw->hw synchronization is required. This is called in the first dma_fence_wait() or dma_fence_add_callback() path to let the fence implementation know that there is another driver waiting on the signal (ie. hw->sw case).”…”�”}”(hjƒõh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´KªhjqõubhÌ)�”}”(hŒ{This is called with irq's disabled, so only spinlocks which disable IRQ's can be used in the code outside of this callback.”h]”hŒThis is called with irq’s disabled, so only spinlocks which disable IRQ’s can be used in the code outside of this callback.”…”�”}”(hj’õh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´K³hjqõubhÌ)�”}”(hŒ¥A return value of false indicates the fence already passed, or some failure occurred that made it impossible to enable signaling. True indicates successful enabling.”h]”hŒ¥A return value of false indicates the fence already passed, or some failure occurred that made it impossible to enable signaling. True indicates successful enabling.”…”�”}”(hj¡õh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´K¶hjqõubhÌ)�”}”(hŒf:c:type:`dma_fence.error ` may be set in enable_signaling, but only when false is returned.”h]”(h)�”}”(hŒ%:c:type:`dma_fence.error `”h]”jâ)�”}”(hj¶õh]”hŒdma_fence.error”…”�”}”(hj¸õh²hh³Nh´Nubah}”(h]”h ]”(jíjîŒc-type”eh"]”h$]”h&]”uh1jáhj´õubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”júŒ refdomain”jîŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰j³j·jŒ dma_fence”uh1hh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´Kºhj°õubhŒA may be set in enable_signaling, but only when false is returned.”…”�”}”(hj°õh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jÓõh´KºhjqõubhÌ)�”}”(hX§Since many implementations can call dma_fence_signal() even when before **enable_signaling** has been called there's a race window, where the dma_fence_signal() might result in the final fence reference being released and its memory freed. To avoid this, implementations of this callback should grab their own reference using dma_fence_get(), to be released when the fence is signalled (through e.g. the interrupt handler).”h]”(hŒHSince many implementations can call dma_fence_signal() even when before ”…”�”}”(hjÞõh²hh³Nh´Nubjr )�”}”(hŒ**enable_signaling**”h]”hŒenable_signaling”…”�”}”(hjæõh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hjÞõubhXM has been called there’s a race window, where the dma_fence_signal() might result in the final fence reference being released and its memory freed. To avoid this, implementations of this callback should grab their own reference using dma_fence_get(), to be released when the fence is signalled (through e.g. the interrupt handler).”…”�”}”(hjÞõh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´K½hjqõubhÌ)�”}”(hŒoThis callback is optional. If this callback is not present, then the driver must always have signaling enabled.”h]”hŒoThis callback is optional. If this callback is not present, then the driver must always have signaling enabled.”…”�”}”(hjÿõh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´KÅhjqõubeh}”(h]”h ]”h"]”h$]”h&]”uh1jØ hjUõubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³jpõh´KÆhj¤ôubj¹ )�”}”(hX&``signaled`` Peek whether the fence is signaled, as a fastpath optimization for e.g. dma_fence_wait() or dma_fence_add_callback(). Note that this callback does not need to make any guarantees beyond that a fence once indicates as signalled must always return true from this callback. This callback may return false even if the fence has completed already, in this case information hasn't propogated throug the system yet. See also dma_fence_is_signaled(). May set :c:type:`dma_fence.error ` if returning true. This callback is optional. ”h]”(j¿ )�”}”(hŒ ``signaled``”h]”jâ)�”}”(hj öh]”hŒsignaled”…”�”}”(hj"öh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjöubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´K×hjöubjÙ )�”}”(hhh]”(hÌ)�”}”(hXºPeek whether the fence is signaled, as a fastpath optimization for e.g. dma_fence_wait() or dma_fence_add_callback(). Note that this callback does not need to make any guarantees beyond that a fence once indicates as signalled must always return true from this callback. This callback may return false even if the fence has completed already, in this case information hasn't propogated throug the system yet. See also dma_fence_is_signaled().”h]”hX¼Peek whether the fence is signaled, as a fastpath optimization for e.g. dma_fence_wait() or dma_fence_add_callback(). Note that this callback does not need to make any guarantees beyond that a fence once indicates as signalled must always return true from this callback. This callback may return false even if the fence has completed already, in this case information hasn’t propogated throug the system yet. See also dma_fence_is_signaled().”…”�”}”(hj9öh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´KÍhj6öubhÌ)�”}”(hŒ@May set :c:type:`dma_fence.error ` if returning true.”h]”(hŒMay set ”…”�”}”(hjHöh²hh³Nh´Nubh)�”}”(hŒ%:c:type:`dma_fence.error `”h]”jâ)�”}”(hjRöh]”hŒdma_fence.error”…”�”}”(hjTöh²hh³Nh´Nubah}”(h]”h ]”(jíjîŒc-type”eh"]”h$]”h&]”uh1jáhjPöubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”júŒ refdomain”jîŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰j³j·jŒ dma_fence”uh1hh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´KÕhjHöubhŒ if returning true.”…”�”}”(hjHöh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³joöh´KÕhj6öubhÌ)�”}”(hŒThis callback is optional.”h]”hŒThis callback is optional.”…”�”}”(hjzöh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j5öh´K×hj6öubeh}”(h]”h ]”h"]”h$]”h&]”uh1jØ hjöubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³j5öh´K×hj¤ôubj¹ )�”}”(hXý``wait`` Custom wait implementation, defaults to dma_fence_default_wait() if not set. Deprecated and should not be used by new implementations. Only used by existing implementations which need special handling for their hardware reset procedure. Must return -ERESTARTSYS if the wait is intr = true and the wait was interrupted, and remaining jiffies if fence has signaled, or 0 if wait timed out. Can also return other error values on custom implementations, which should be treated as if the fence is signaled. For example a hardware lockup could be reported like that. Implementing this callback prevents the fence from detaching after signaling and so it is necessary for the module providing the dma_fence_ops to stay loaded as long as the dma_fence exists. ”h]”(j¿ )�”}”(hŒ``wait``”h]”jâ)�”}”(hjšöh]”hŒwait”…”�”}”(hjœöh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj˜öubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´Kíhj”öubjÙ )�”}”(hhh]”(hÌ)�”}”(hŒLCustom wait implementation, defaults to dma_fence_default_wait() if not set.”h]”hŒLCustom wait implementation, defaults to dma_fence_default_wait() if not set.”…”�”}”(hj³öh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´KÞhj°öubhÌ)�”}”(hŒŸDeprecated and should not be used by new implementations. Only used by existing implementations which need special handling for their hardware reset procedure.”h]”hŒŸDeprecated and should not be used by new implementations. Only used by existing implementations which need special handling for their hardware reset procedure.”…”�”}”(hjÂöh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´Káhj°öubhÌ)�”}”(hXDMust return -ERESTARTSYS if the wait is intr = true and the wait was interrupted, and remaining jiffies if fence has signaled, or 0 if wait timed out. Can also return other error values on custom implementations, which should be treated as if the fence is signaled. For example a hardware lockup could be reported like that.”h]”hXDMust return -ERESTARTSYS if the wait is intr = true and the wait was interrupted, and remaining jiffies if fence has signaled, or 0 if wait timed out. Can also return other error values on custom implementations, which should be treated as if the fence is signaled. For example a hardware lockup could be reported like that.”…”�”}”(hjÑöh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´Kåhj°öubhÌ)�”}”(hŒ¾Implementing this callback prevents the fence from detaching after signaling and so it is necessary for the module providing the dma_fence_ops to stay loaded as long as the dma_fence exists.”h]”hŒ¾Implementing this callback prevents the fence from detaching after signaling and so it is necessary for the module providing the dma_fence_ops to stay loaded as long as the dma_fence exists.”…”�”}”(hjàöh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´Këhj°öubeh}”(h]”h ]”h"]”h$]”h&]”uh1jØ hj”öubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³j¯öh´Kíhj¤ôubj¹ )�”}”(hXþ``release`` Called on destruction of fence to release additional resources. Can be called from irq context. This callback is optional. If it is NULL, then dma_fence_free() is instead called as the default implementation. Implementing this callback prevents the fence from detaching after signaling and so it is necessary for the module providing the dma_fence_ops to stay loaded as long as the dma_fence exists. If the callback is implemented the memory backing the dma_fence object must be freed RCU safe. ”h]”(j¿ )�”}”(hŒ ``release``”h]”jâ)�”}”(hj÷h]”hŒrelease”…”�”}”(hj÷h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjÿöubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´KÿhjûöubjÙ )�”}”(hhh]”(hÌ)�”}”(hŒÑCalled on destruction of fence to release additional resources. Can be called from irq context. This callback is optional. If it is NULL, then dma_fence_free() is instead called as the default implementation.”h]”hŒÑCalled on destruction of fence to release additional resources. Can be called from irq context. This callback is optional. If it is NULL, then dma_fence_free() is instead called as the default implementation.”…”�”}”(hj÷h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´Kõhj÷ubhÌ)�”}”(hŒ¾Implementing this callback prevents the fence from detaching after signaling and so it is necessary for the module providing the dma_fence_ops to stay loaded as long as the dma_fence exists.”h]”hŒ¾Implementing this callback prevents the fence from detaching after signaling and so it is necessary for the module providing the dma_fence_ops to stay loaded as long as the dma_fence exists.”…”�”}”(hj)÷h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´Kúhj÷ubhÌ)�”}”(hŒ^If the callback is implemented the memory backing the dma_fence object must be freed RCU safe.”h]”hŒ^If the callback is implemented the memory backing the dma_fence object must be freed RCU safe.”…”�”}”(hj8÷h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´Kþhj÷ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jØ hjûöubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³j÷h´Kÿhj¤ôubj¹ )�”}”(hX¹``set_deadline`` Callback to allow a fence waiter to inform the fence signaler of an upcoming deadline, such as vblank, by which point the waiter would prefer the fence to be signaled by. This is intended to give feedback to the fence signaler to aid in power management decisions, such as boosting GPU frequency. This is called without :c:type:`dma_fence.lock ` held, it can be called multiple times and from any context. Locking is up to the callee if it has some state to manage. If multiple deadlines are set, the expectation is to track the soonest one. If the deadline is before the current time, it should be interpreted as an immediate deadline. This callback is optional.”h]”(j¿ )�”}”(hŒ``set_deadline``”h]”jâ)�”}”(hjY÷h]”hŒ set_deadline”…”�”}”(hj[÷h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjW÷ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´MhjS÷ubjÙ )�”}”(hhh]”(hÌ)�”}”(hX)Callback to allow a fence waiter to inform the fence signaler of an upcoming deadline, such as vblank, by which point the waiter would prefer the fence to be signaled by. This is intended to give feedback to the fence signaler to aid in power management decisions, such as boosting GPU frequency.”h]”hX)Callback to allow a fence waiter to inform the fence signaler of an upcoming deadline, such as vblank, by which point the waiter would prefer the fence to be signaled by. This is intended to give feedback to the fence signaler to aid in power management decisions, such as boosting GPU frequency.”…”�”}”(hjr÷h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´Mhjo÷ubhÌ)�”}”(hXaThis is called without :c:type:`dma_fence.lock ` held, it can be called multiple times and from any context. Locking is up to the callee if it has some state to manage. If multiple deadlines are set, the expectation is to track the soonest one. If the deadline is before the current time, it should be interpreted as an immediate deadline.”h]”(hŒThis is called without ”…”�”}”(hj�÷h²hh³Nh´Nubh)�”}”(hŒ$:c:type:`dma_fence.lock `”h]”jâ)�”}”(hj‹÷h]”hŒdma_fence.lock”…”�”}”(hj�÷h²hh³Nh´Nubah}”(h]”h ]”(jíjîŒc-type”eh"]”h$]”h&]”uh1jáhj‰÷ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”júŒ refdomain”jîŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰j³j·jŒ dma_fence”uh1hh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´M hj�÷ubhX& held, it can be called multiple times and from any context. Locking is up to the callee if it has some state to manage. If multiple deadlines are set, the expectation is to track the soonest one. If the deadline is before the current time, it should be interpreted as an immediate deadline.”…”�”}”(hj�÷h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j¨÷h´M hjo÷ubhÌ)�”}”(hŒThis callback is optional.”h]”hŒThis callback is optional.”…”�”}”(hj³÷h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´Mhjo÷ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jØ hjS÷ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³jn÷h´Mhj¤ôubeh}”(h]”h ]”h"]”h$]”h&]”uh1j³ hj\ôubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jg hj�µh²hh³Nh´NubjÉ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÕŒ&dma_fence_was_initialized (C function)”Œc.dma_fence_was_initialized”hNt”auh1jÈhj�µh²hh³Nh´NubjÛ)�”}”(hhh]”(jà)�”}”(hŒ8bool dma_fence_was_initialized (struct dma_fence *fence)”h]”jæ)�”}”(hŒ7bool dma_fence_was_initialized(struct dma_fence *fence)”h]”(jM)�”}”(hji5h]”hŒbool”…”�”}”(hjô÷h²hh³Nh´Nubah}”(h]”h ]”jYah"]”h$]”h&]”uh1jLhjð÷h²hh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´M$ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjøh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjð÷h²hh³jøh´M$ubj )�”}”(hŒdma_fence_was_initialized”h]”j )�”}”(hŒdma_fence_was_initialized”h]”hŒdma_fence_was_initialized”…”�”}”(hjøh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjøubah}”(h]”h ]”(j' j( eh"]”h$]”h&]”j÷jøuh1j hjð÷h²hh³jøh´M$ubjŒ)�”}”(hŒ(struct dma_fence *fence)”h]”j’)�”}”(hŒstruct dma_fence *fence”h]”(jì)�”}”(hjïh]”hŒstruct”…”�”}”(hj0øh²hh³Nh´Nubah}”(h]”h ]”jøah"]”h$]”h&]”uh1jëhj,øubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj=øh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj,øubh)�”}”(hhh]”j )�”}”(hŒ dma_fence”h]”hŒ dma_fence”…”�”}”(hjNøh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjKøubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jîŒreftype”jGŒ reftarget”jPøŒmodname”NŒ classname”Nj³j¶)�”}”j¹]”jO)�”}”jGjøsbŒc.dma_fence_was_initialized”†”asbuh1hhj,øubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjnøh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj,øubjd)�”}”(hjgh]”hŒ*”…”�”}”(hj|øh²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchj,øubj )�”}”(hŒfence”h]”hŒfence”…”�”}”(hj‰øh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj,øubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj÷jøuh1j‘hj(øubah}”(h]”h ]”h"]”h$]”h&]”j÷jøuh1j‹hjð÷h²hh³jøh´M$ubeh}”(h]”h ]”h"]”h$]”h&]”j÷jøj2 ˆuh1jåj3 j4 hjì÷h²hh³jøh´M$ubah}”(h]”jç÷ah ]”(j8 j9 eh"]”h$]”h&]”j= ˆj> )j? huh1jßh³jøh´M$hjé÷h²hubjA )�”}”(hhh]”hÌ)�”}”(hŒtest if fence was initialized”h]”hŒtest if fence was initialized”…”�”}”(hj³øh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´M$hj°øh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j@ hjé÷h²hh³jøh´M$ubeh}”(h]”h ]”(jîŒfunction”eh"]”h$]”h&]”ja jîjb jËøjc jËøjd ‰je ‰jf ‰uh1jÚh²hhj�µh³Nh´Nubjh )�”}”(hŒÝ**Parameters** ``struct dma_fence *fence`` fence to test **Return** True if fence was ever initialized, false otherwise. Works correctly only when memory backing the fence structure is zero initialized on allocation.”h]”(hÌ)�”}”(hŒ**Parameters**”h]”jr )�”}”(hjÕøh]”hŒ Parameters”…”�”}”(hj×øh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hjÓøubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´M(hjÏøubj´ )�”}”(hhh]”j¹ )�”}”(hŒ*``struct dma_fence *fence`` fence to test ”h]”(j¿ )�”}”(hŒ``struct dma_fence *fence``”h]”jâ)�”}”(hjôøh]”hŒstruct dma_fence *fence”…”�”}”(hjöøh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjòøubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´M%hjîøubjÙ )�”}”(hhh]”hÌ)�”}”(hŒ fence to test”h]”hŒ fence to test”…”�”}”(hj ùh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j ùh´M%hj ùubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hjîøubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³j ùh´M%hjëøubah}”(h]”h ]”h"]”h$]”h&]”uh1j³ hjÏøubhÌ)�”}”(hŒ **Return**”h]”jr )�”}”(hj/ùh]”hŒReturn”…”�”}”(hj1ùh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hj-ùubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´M'hjÏøubhÌ)�”}”(hŒ”True if fence was ever initialized, false otherwise. Works correctly only when memory backing the fence structure is zero initialized on allocation.”h]”hŒ”True if fence was ever initialized, false otherwise. Works correctly only when memory backing the fence structure is zero initialized on allocation.”…”�”}”(hjEùh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´M'hjÏøubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jg hj�µh²hh³Nh´NubjÉ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÕŒdma_fence_put (C function)”Œc.dma_fence_put”hNt”auh1jÈhj�µh²hh³Nh´NubjÛ)�”}”(hhh]”(jà)�”}”(hŒ,void dma_fence_put (struct dma_fence *fence)”h]”jæ)�”}”(hŒ+void dma_fence_put(struct dma_fence *fence)”h]”(jM)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjtùh²hh³Nh´Nubah}”(h]”h ]”jYah"]”h$]”h&]”uh1jLhjpùh²hh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´M1ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjƒùh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjpùh²hh³j‚ùh´M1ubj )�”}”(hŒ dma_fence_put”h]”j )�”}”(hŒ dma_fence_put”h]”hŒ dma_fence_put”…”�”}”(hj•ùh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj‘ùubah}”(h]”h ]”(j' j( eh"]”h$]”h&]”j÷jøuh1j hjpùh²hh³j‚ùh´M1ubjŒ)�”}”(hŒ(struct dma_fence *fence)”h]”j’)�”}”(hŒstruct dma_fence *fence”h]”(jì)�”}”(hjïh]”hŒstruct”…”�”}”(hj±ùh²hh³Nh´Nubah}”(h]”h ]”jøah"]”h$]”h&]”uh1jëhj­ùubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¾ùh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj­ùubh)�”}”(hhh]”j )�”}”(hŒ dma_fence”h]”hŒ dma_fence”…”�”}”(hjÏùh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjÌùubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jîŒreftype”jGŒ reftarget”jÑùŒmodname”NŒ classname”Nj³j¶)�”}”j¹]”jO)�”}”jGj—ùsbŒc.dma_fence_put”†”asbuh1hhj­ùubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjïùh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj­ùubjd)�”}”(hjgh]”hŒ*”…”�”}”(hjýùh²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchj­ùubj )�”}”(hŒfence”h]”hŒfence”…”�”}”(hj úh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj­ùubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj÷jøuh1j‘hj©ùubah}”(h]”h ]”h"]”h$]”h&]”j÷jøuh1j‹hjpùh²hh³j‚ùh´M1ubeh}”(h]”h ]”h"]”h$]”h&]”j÷jøj2 ˆuh1jåj3 j4 hjlùh²hh³j‚ùh´M1ubah}”(h]”jgùah ]”(j8 j9 eh"]”h$]”h&]”j= ˆj> )j? huh1jßh³j‚ùh´M1hjiùh²hubjA )�”}”(hhh]”hÌ)�”}”(hŒdecreases refcount of the fence”h]”hŒdecreases refcount of the fence”…”�”}”(hj4úh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´M1hj1úh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j@ hjiùh²hh³j‚ùh´M1ubeh}”(h]”h ]”(jîŒfunction”eh"]”h$]”h&]”ja jîjb jLújc jLújd ‰je ‰jf ‰uh1jÚh²hhj�µh³Nh´Nubjh )�”}”(hŒI**Parameters** ``struct dma_fence *fence`` fence to reduce refcount of”h]”(hÌ)�”}”(hŒ**Parameters**”h]”jr )�”}”(hjVúh]”hŒ Parameters”…”�”}”(hjXúh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hjTúubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´M5hjPúubj´ )�”}”(hhh]”j¹ )�”}”(hŒ7``struct dma_fence *fence`` fence to reduce refcount of”h]”(j¿ )�”}”(hŒ``struct dma_fence *fence``”h]”jâ)�”}”(hjuúh]”hŒstruct dma_fence *fence”…”�”}”(hjwúh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjsúubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´M7hjoúubjÙ )�”}”(hhh]”hÌ)�”}”(hŒfence to reduce refcount of”h]”hŒfence to reduce refcount of”…”�”}”(hjŽúh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´M2hj‹úubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hjoúubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³jŠúh´M7hjlúubah}”(h]”h ]”h"]”h$]”h&]”uh1j³ hjPúubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jg hj�µh²hh³Nh´NubjÉ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÕŒdma_fence_get (C function)”Œc.dma_fence_get”hNt”auh1jÈhj�µh²hh³Nh´NubjÛ)�”}”(hhh]”(jà)�”}”(hŒ:struct dma_fence * dma_fence_get (struct dma_fence *fence)”h]”jæ)�”}”(hŒ8struct dma_fence *dma_fence_get(struct dma_fence *fence)”h]”(jì)�”}”(hjïh]”hŒstruct”…”�”}”(hjÏúh²hh³Nh´Nubah}”(h]”h ]”jøah"]”h$]”h&]”uh1jëhjËúh²hh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´M;ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÝúh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjËúh²hh³jÜúh´M;ubh)�”}”(hhh]”j )�”}”(hŒ dma_fence”h]”hŒ dma_fence”…”�”}”(hjîúh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjëúubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jîŒreftype”jGŒ reftarget”jðúŒmodname”NŒ classname”Nj³j¶)�”}”j¹]”jO)�”}”jGŒ dma_fence_get”sbŒc.dma_fence_get”†”asbuh1hhjËúh²hh³jÜúh´M;ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjûh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjËúh²hh³jÜúh´M;ubjd)�”}”(hjgh]”hŒ*”…”�”}”(hjûh²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchjËúh²hh³jÜúh´M;ubj )�”}”(hŒ dma_fence_get”h]”j )�”}”(hj ûh]”hŒ dma_fence_get”…”�”}”(hj.ûh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj*ûubah}”(h]”h ]”(j' j( eh"]”h$]”h&]”j÷jøuh1j hjËúh²hh³jÜúh´M;ubjŒ)�”}”(hŒ(struct dma_fence *fence)”h]”j’)�”}”(hŒstruct dma_fence *fence”h]”(jì)�”}”(hjïh]”hŒstruct”…”�”}”(hjIûh²hh³Nh´Nubah}”(h]”h ]”jøah"]”h$]”h&]”uh1jëhjEûubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjVûh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjEûubh)�”}”(hhh]”j )�”}”(hŒ dma_fence”h]”hŒ dma_fence”…”�”}”(hjgûh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjdûubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jîŒreftype”jGŒ reftarget”jiûŒmodname”NŒ classname”Nj³j¶)�”}”j¹]”j ûŒc.dma_fence_get”†”asbuh1hhjEûubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj…ûh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjEûubjd)�”}”(hjgh]”hŒ*”…”�”}”(hj“ûh²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchjEûubj )�”}”(hŒfence”h]”hŒfence”…”�”}”(hj ûh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjEûubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj÷jøuh1j‘hjAûubah}”(h]”h ]”h"]”h$]”h&]”j÷jøuh1j‹hjËúh²hh³jÜúh´M;ubeh}”(h]”h ]”h"]”h$]”h&]”j÷jøj2 ˆuh1jåj3 j4 hjÇúh²hh³jÜúh´M;ubah}”(h]”jÂúah ]”(j8 j9 eh"]”h$]”h&]”j= ˆj> )j? huh1jßh³jÜúh´M;hjÄúh²hubjA )�”}”(hhh]”hÌ)�”}”(hŒincreases refcount of the fence”h]”hŒincreases refcount of the fence”…”�”}”(hjÊûh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´M;hjÇûh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j@ hjÄúh²hh³jÜúh´M;ubeh}”(h]”h ]”(jîŒfunction”eh"]”h$]”h&]”ja jîjb jâûjc jâûjd ‰je ‰jf ‰uh1jÚh²hhj�µh³Nh´Nubjh )�”}”(hŒ“**Parameters** ``struct dma_fence *fence`` fence to increase refcount of **Description** Returns the same fence, with refcount increased by 1.”h]”(hÌ)�”}”(hŒ**Parameters**”h]”jr )�”}”(hjìûh]”hŒ Parameters”…”�”}”(hjîûh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hjêûubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´M?hjæûubj´ )�”}”(hhh]”j¹ )�”}”(hŒ:``struct dma_fence *fence`` fence to increase refcount of ”h]”(j¿ )�”}”(hŒ``struct dma_fence *fence``”h]”jâ)�”}”(hj üh]”hŒstruct dma_fence *fence”…”�”}”(hj üh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj üubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´M<hjüubjÙ )�”}”(hhh]”hÌ)�”}”(hŒfence to increase refcount of”h]”hŒfence to increase refcount of”…”�”}”(hj$üh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j üh´M<hj!üubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hjüubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³j üh´M<hjüubah}”(h]”h ]”h"]”h$]”h&]”uh1j³ hjæûubhÌ)�”}”(hŒ**Description**”h]”jr )�”}”(hjFüh]”hŒ Description”…”�”}”(hjHüh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hjDüubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´M>hjæûubhÌ)�”}”(hŒ5Returns the same fence, with refcount increased by 1.”h]”hŒ5Returns the same fence, with refcount increased by 1.”…”�”}”(hj\üh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´M=hjæûubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jg hj�µh²hh³Nh´NubjÉ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÕŒdma_fence_get_rcu (C function)”Œc.dma_fence_get_rcu”hNt”auh1jÈhj�µh²hh³Nh´NubjÛ)�”}”(hhh]”(jà)�”}”(hŒ>struct dma_fence * dma_fence_get_rcu (struct dma_fence *fence)”h]”jæ)�”}”(hŒ )j? huh1jßh³j˜üh´MHhj€üh²hubjA )�”}”(hhh]”hÌ)�”}”(hŒ3get a fence from a dma_resv_list with rcu read lock”h]”hŒ3get a fence from a dma_resv_list with rcu read lock”…”�”}”(hj†ýh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´MHhjƒýh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j@ hj€üh²hh³j˜üh´MHubeh}”(h]”h ]”(jîŒfunction”eh"]”h$]”h&]”ja jîjb jžýjc jžýjd ‰je ‰jf ‰uh1jÚh²hhj�µh³Nh´Nubjh )�”}”(hŒ£**Parameters** ``struct dma_fence *fence`` fence to increase refcount of **Description** Function returns NULL if no refcount could be obtained, or the fence.”h]”(hÌ)�”}”(hŒ**Parameters**”h]”jr )�”}”(hj¨ýh]”hŒ Parameters”…”�”}”(hjªýh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hj¦ýubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´MLhj¢ýubj´ )�”}”(hhh]”j¹ )�”}”(hŒ:``struct dma_fence *fence`` fence to increase refcount of ”h]”(j¿ )�”}”(hŒ``struct dma_fence *fence``”h]”jâ)�”}”(hjÇýh]”hŒstruct dma_fence *fence”…”�”}”(hjÉýh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjÅýubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´MJhjÁýubjÙ )�”}”(hhh]”hÌ)�”}”(hŒfence to increase refcount of”h]”hŒfence to increase refcount of”…”�”}”(hjàýh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jÜýh´MJhjÝýubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hjÁýubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³jÜýh´MJhj¾ýubah}”(h]”h ]”h"]”h$]”h&]”uh1j³ hj¢ýubhÌ)�”}”(hŒ**Description**”h]”jr )�”}”(hjþh]”hŒ Description”…”�”}”(hjþh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hjþubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´MLhj¢ýubhÌ)�”}”(hŒEFunction returns NULL if no refcount could be obtained, or the fence.”h]”hŒEFunction returns NULL if no refcount could be obtained, or the fence.”…”�”}”(hjþh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´MKhj¢ýubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jg hj�µh²hh³Nh´NubjÉ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÕŒ#dma_fence_get_rcu_safe (C function)”Œc.dma_fence_get_rcu_safe”hNt”auh1jÈhj�µh²hh³Nh´NubjÛ)�”}”(hhh]”(jà)�”}”(hŒKstruct dma_fence * dma_fence_get_rcu_safe (struct dma_fence __rcu **fencep)”h]”jæ)�”}”(hŒIstruct dma_fence *dma_fence_get_rcu_safe(struct dma_fence __rcu **fencep)”h]”(jì)�”}”(hjïh]”hŒstruct”…”�”}”(hjGþh²hh³Nh´Nubah}”(h]”h ]”jøah"]”h$]”h&]”uh1jëhjCþh²hh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´MWubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjUþh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjCþh²hh³jTþh´MWubh)�”}”(hhh]”j )�”}”(hŒ dma_fence”h]”hŒ dma_fence”…”�”}”(hjfþh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjcþubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jîŒreftype”jGŒ reftarget”jhþŒmodname”NŒ classname”Nj³j¶)�”}”j¹]”jO)�”}”jGŒdma_fence_get_rcu_safe”sbŒc.dma_fence_get_rcu_safe”†”asbuh1hhjCþh²hh³jTþh´MWubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‡þh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjCþh²hh³jTþh´MWubjd)�”}”(hjgh]”hŒ*”…”�”}”(hj•þh²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchjCþh²hh³jTþh´MWubj )�”}”(hŒdma_fence_get_rcu_safe”h]”j )�”}”(hj„þh]”hŒdma_fence_get_rcu_safe”…”�”}”(hj¦þh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj¢þubah}”(h]”h ]”(j' j( eh"]”h$]”h&]”j÷jøuh1j hjCþh²hh³jTþh´MWubjŒ)�”}”(hŒ!(struct dma_fence __rcu **fencep)”h]”j’)�”}”(hŒstruct dma_fence __rcu **fencep”h]”(jì)�”}”(hjïh]”hŒstruct”…”�”}”(hjÁþh²hh³Nh´Nubah}”(h]”h ]”jøah"]”h$]”h&]”uh1jëhj½þubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÎþh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj½þubh)�”}”(hhh]”j )�”}”(hŒ dma_fence”h]”hŒ dma_fence”…”�”}”(hjßþh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjÜþubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jîŒreftype”jGŒ reftarget”jáþŒmodname”NŒ classname”Nj³j¶)�”}”j¹]”j‚þŒc.dma_fence_get_rcu_safe”†”asbuh1hhj½þubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjýþh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj½þubhŒ__rcu”…”�”}”(hj½þh²hh³Nh´Nubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÿh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj½þubjd)�”}”(hjgh]”hŒ*”…”�”}”(hjÿh²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchj½þubjd)�”}”(hjgh]”hŒ*”…”�”}”(hj*ÿh²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchj½þubj )�”}”(hŒfencep”h]”hŒfencep”…”�”}”(hj7ÿh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj½þubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj÷jøuh1j‘hj¹þubah}”(h]”h ]”h"]”h$]”h&]”j÷jøuh1j‹hjCþh²hh³jTþh´MWubeh}”(h]”h ]”h"]”h$]”h&]”j÷jøj2 ˆuh1jåj3 j4 hj?þh²hh³jTþh´MWubah}”(h]”j:þah ]”(j8 j9 eh"]”h$]”h&]”j= ˆj> )j? huh1jßh³jTþh´MWhj<þh²hubjA )�”}”(hhh]”hÌ)�”}”(hŒ+acquire a reference to an RCU tracked fence”h]”hŒ+acquire a reference to an RCU tracked fence”…”�”}”(hjaÿh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´MWhj^ÿh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j@ hj<þh²hh³jTþh´MWubeh}”(h]”h ]”(jîŒfunction”eh"]”h$]”h&]”ja jîjb jyÿjc jyÿjd ‰je ‰jf ‰uh1jÚh²hhj�µh³Nh´Nubjh )�”}”(hX¨**Parameters** ``struct dma_fence __rcu **fencep`` pointer to fence to increase refcount of **Description** Function returns NULL if no refcount could be obtained, or the fence. This function handles acquiring a reference to a fence that may be reallocated within the RCU grace period (such as with SLAB_TYPESAFE_BY_RCU), so long as the caller is using RCU on the pointer to the fence. An alternative mechanism is to employ a seqlock to protect a bunch of fences, such as used by struct dma_resv. When using a seqlock, the seqlock must be taken before and checked after a reference to the fence is acquired (as shown here). The caller is required to hold the RCU read lock.”h]”(hÌ)�”}”(hŒ**Parameters**”h]”jr )�”}”(hjƒÿh]”hŒ Parameters”…”�”}”(hj…ÿh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hj�ÿubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´M[hj}ÿubj´ )�”}”(hhh]”j¹ )�”}”(hŒM``struct dma_fence __rcu **fencep`` pointer to fence to increase refcount of ”h]”(j¿ )�”}”(hŒ#``struct dma_fence __rcu **fencep``”h]”jâ)�”}”(hj¢ÿh]”hŒstruct dma_fence __rcu **fencep”…”�”}”(hj¤ÿh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj ÿubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´MXhjœÿubjÙ )�”}”(hhh]”hÌ)�”}”(hŒ(pointer to fence to increase refcount of”h]”hŒ(pointer to fence to increase refcount of”…”�”}”(hj»ÿh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j·ÿh´MXhj¸ÿubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hjœÿubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³j·ÿh´MXhj™ÿubah}”(h]”h ]”h"]”h$]”h&]”uh1j³ hj}ÿubhÌ)�”}”(hŒ**Description**”h]”jr )�”}”(hjÝÿh]”hŒ Description”…”�”}”(hjßÿh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hjÛÿubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´MZhj}ÿubhÌ)�”}”(hXFunction returns NULL if no refcount could be obtained, or the fence. This function handles acquiring a reference to a fence that may be reallocated within the RCU grace period (such as with SLAB_TYPESAFE_BY_RCU), so long as the caller is using RCU on the pointer to the fence.”h]”hXFunction returns NULL if no refcount could be obtained, or the fence. This function handles acquiring a reference to a fence that may be reallocated within the RCU grace period (such as with SLAB_TYPESAFE_BY_RCU), so long as the caller is using RCU on the pointer to the fence.”…”�”}”(hjóÿh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´MYhj}ÿubhÌ)�”}”(hŒíAn alternative mechanism is to employ a seqlock to protect a bunch of fences, such as used by struct dma_resv. When using a seqlock, the seqlock must be taken before and checked after a reference to the fence is acquired (as shown here).”h]”hŒíAn alternative mechanism is to employ a seqlock to protect a bunch of fences, such as used by struct dma_resv. When using a seqlock, the seqlock must be taken before and checked after a reference to the fence is acquired (as shown here).”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´M^hj}ÿubhÌ)�”}”(hŒ1The caller is required to hold the RCU read lock.”h]”hŒ1The caller is required to hold the RCU read lock.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´Mchj}ÿubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jg hj�µh²hh³Nh´NubjÉ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÕŒdma_fence_spinlock (C function)”Œc.dma_fence_spinlock”hNt”auh1jÈhj�µh²hh³Nh´NubjÛ)�”}”(hhh]”(jà)�”}”(hŒ9spinlock_t * dma_fence_spinlock (struct dma_fence *fence)”h]”jæ)�”}”(hŒ7spinlock_t *dma_fence_spinlock(struct dma_fence *fence)”h]”(h)�”}”(hhh]”j )�”}”(hŒ spinlock_t”h]”hŒ spinlock_t”…”�”}”(hjCh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj@ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jîŒreftype”jGŒ reftarget”jEŒmodname”NŒ classname”Nj³j¶)�”}”j¹]”jO)�”}”jGŒdma_fence_spinlock”sbŒc.dma_fence_spinlock”†”asbuh1hhj<h²hh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´M‰ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjeh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj<h²hh³jdh´M‰ubjd)�”}”(hjgh]”hŒ*”…”�”}”(hjsh²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchj<h²hh³jdh´M‰ubj )�”}”(hŒdma_fence_spinlock”h]”j )�”}”(hjah]”hŒdma_fence_spinlock”…”�”}”(hj„h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj€ubah}”(h]”h ]”(j' j( eh"]”h$]”h&]”j÷jøuh1j hj<h²hh³jdh´M‰ubjŒ)�”}”(hŒ(struct dma_fence *fence)”h]”j’)�”}”(hŒstruct dma_fence *fence”h]”(jì)�”}”(hjïh]”hŒstruct”…”�”}”(hjŸh²hh³Nh´Nubah}”(h]”h ]”jøah"]”h$]”h&]”uh1jëhj›ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¬h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj›ubh)�”}”(hhh]”j )�”}”(hŒ dma_fence”h]”hŒ dma_fence”…”�”}”(hj½h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjºubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jîŒreftype”jGŒ reftarget”j¿Œmodname”NŒ classname”Nj³j¶)�”}”j¹]”j_Œc.dma_fence_spinlock”†”asbuh1hhj›ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÛh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj›ubjd)�”}”(hjgh]”hŒ*”…”�”}”(hjéh²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchj›ubj )�”}”(hŒfence”h]”hŒfence”…”�”}”(hjöh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj›ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj÷jøuh1j‘hj—ubah}”(h]”h ]”h"]”h$]”h&]”j÷jøuh1j‹hj<h²hh³jdh´M‰ubeh}”(h]”h ]”h"]”h$]”h&]”j÷jøj2 ˆuh1jåj3 j4 hj8h²hh³jdh´M‰ubah}”(h]”j3ah ]”(j8 j9 eh"]”h$]”h&]”j= ˆj> )j? huh1jßh³jdh´M‰hj5h²hubjA )�”}”(hhh]”hÌ)�”}”(hŒ3return pointer to the spinlock protecting the fence”h]”hŒ3return pointer to the spinlock protecting the fence”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´M‰hjh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j@ hj5h²hh³jdh´M‰ubeh}”(h]”h ]”(jîŒfunction”eh"]”h$]”h&]”ja jîjb j8jc j8jd ‰je ‰jf ‰uh1jÚh²hhj�µh³Nh´Nubjh )�”}”(hŒ£**Parameters** ``struct dma_fence *fence`` the fence to get the lock from **Description** Return either the pointer to the embedded or the external spin lock.”h]”(hÌ)�”}”(hŒ**Parameters**”h]”jr )�”}”(hjBh]”hŒ Parameters”…”�”}”(hjDh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hj@ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´M�hj<ubj´ )�”}”(hhh]”j¹ )�”}”(hŒ;``struct dma_fence *fence`` the fence to get the lock from ”h]”(j¿ )�”}”(hŒ``struct dma_fence *fence``”h]”jâ)�”}”(hjah]”hŒstruct dma_fence *fence”…”�”}”(hjch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj_ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´MŠhj[ubjÙ )�”}”(hhh]”hÌ)�”}”(hŒthe fence to get the lock from”h]”hŒthe fence to get the lock from”…”�”}”(hjzh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jvh´MŠhjwubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hj[ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³jvh´MŠhjXubah}”(h]”h ]”h"]”h$]”h&]”uh1j³ hj<ubhÌ)�”}”(hŒ**Description**”h]”jr )�”}”(hjœh]”hŒ Description”…”�”}”(hjžh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hjšubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´MŒhj<ubhÌ)�”}”(hŒDReturn either the pointer to the embedded or the external spin lock.”h]”hŒDReturn either the pointer to the embedded or the external spin lock.”…”�”}”(hj²h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´M‹hj<ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jg hj�µh²hh³Nh´NubjÉ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÕŒ dma_fence_lock_irqsave (C macro)”Œc.dma_fence_lock_irqsave”hNt”auh1jÈhj�µh²hh³Nh´NubjÛ)�”}”(hhh]”(jà)�”}”(hŒdma_fence_lock_irqsave”h]”jæ)�”}”(hŒdma_fence_lock_irqsave”h]”j )�”}”(hŒdma_fence_lock_irqsave”h]”j )�”}”(hjÛh]”hŒdma_fence_lock_irqsave”…”�”}”(hjåh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjáubah}”(h]”h ]”(j' j( eh"]”h$]”h&]”j÷jøuh1j hjÝh²hh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´M•ubah}”(h]”h ]”h"]”h$]”h&]”j÷jøj2 ˆuh1jåj3 j4 hjÙh²hh³jøh´M•ubah}”(h]”jÔah ]”(j8 j9 eh"]”h$]”h&]”j= ˆj> )j? huh1jßh³jøh´M•hjÖh²hubjA )�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1j@ hjÖh²hh³jøh´M•ubeh}”(h]”h ]”(jîŒmacro”eh"]”h$]”h&]”ja jîjb jjc jjd ‰je ‰jf ‰uh1jÚh²hhj�µh³Nh´NubhÌ)�”}”(hŒ)``dma_fence_lock_irqsave (fence, flags)``”h]”jâ)�”}”(hjh]”hŒ%dma_fence_lock_irqsave (fence, flags)”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´M—hj�µh²hubhø)�”}”(hŒirqsave lock the fence ”h]”hÌ)�”}”(hŒirqsave lock the fence”h]”hŒirqsave lock the fence”…”�”}”(hj1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´M•hj-ubah}”(h]”h ]”h"]”h$]”h&]”uh1h÷h³j?h´M•hj�µh²hubjh )�”}”(hŒ­**Parameters** ``fence`` the fence to lock ``flags`` where to store the CPU flags. **Description** Lock the fence, preventing it from changing to the signaled state.”h]”(hÌ)�”}”(hŒ**Parameters**”h]”jr )�”}”(hjLh]”hŒ Parameters”…”�”}”(hjNh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hjJubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´M™hjFubj´ )�”}”(hhh]”(j¹ )�”}”(hŒ``fence`` the fence to lock ”h]”(j¿ )�”}”(hŒ ``fence``”h]”jâ)�”}”(hjkh]”hŒfence”…”�”}”(hjmh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjiubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´M–hjeubjÙ )�”}”(hhh]”hÌ)�”}”(hŒthe fence to lock”h]”hŒthe fence to lock”…”�”}”(hj„h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j€h´M–hj�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hjeubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³j€h´M–hjbubj¹ )�”}”(hŒ(``flags`` where to store the CPU flags. ”h]”(j¿ )�”}”(hŒ ``flags``”h]”jâ)�”}”(hj¤h]”hŒflags”…”�”}”(hj¦h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj¢ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´M—hjžubjÙ )�”}”(hhh]”hÌ)�”}”(hŒwhere to store the CPU flags.”h]”hŒwhere to store the CPU flags.”…”�”}”(hj½h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j¹h´M—hjºubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hjžubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³j¹h´M—hjbubeh}”(h]”h ]”h"]”h$]”h&]”uh1j³ hjFubhÌ)�”}”(hŒ**Description**”h]”jr )�”}”(hjßh]”hŒ Description”…”�”}”(hjáh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hjÝubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´M™hjFubhÌ)�”}”(hŒBLock the fence, preventing it from changing to the signaled state.”h]”hŒBLock the fence, preventing it from changing to the signaled state.”…”�”}”(hjõh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´M˜hjFubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jg hj�µh²hh³Nh´NubjÉ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÕŒ%dma_fence_unlock_irqrestore (C macro)”Œc.dma_fence_unlock_irqrestore”hNt”auh1jÈhj�µh²hh³Nh´NubjÛ)�”}”(hhh]”(jà)�”}”(hŒdma_fence_unlock_irqrestore”h]”jæ)�”}”(hŒdma_fence_unlock_irqrestore”h]”j )�”}”(hŒdma_fence_unlock_irqrestore”h]”j )�”}”(hjh]”hŒdma_fence_unlock_irqrestore”…”�”}”(hj(h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj$ubah}”(h]”h ]”(j' j( eh"]”h$]”h&]”j÷jøuh1j hj h²hh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´MŸubah}”(h]”h ]”h"]”h$]”h&]”j÷jøj2 ˆuh1jåj3 j4 hjh²hh³j;h´MŸubah}”(h]”jah ]”(j8 j9 eh"]”h$]”h&]”j= ˆj> )j? huh1jßh³j;h´MŸhjh²hubjA )�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1j@ hjh²hh³j;h´MŸubeh}”(h]”h ]”(jîŒmacro”eh"]”h$]”h&]”ja jîjb jTjc jTjd ‰je ‰jf ‰uh1jÚh²hhj�µh³Nh´NubhÌ)�”}”(hŒ.``dma_fence_unlock_irqrestore (fence, flags)``”h]”jâ)�”}”(hjZh]”hŒ*dma_fence_unlock_irqrestore (fence, flags)”…”�”}”(hj\h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjXubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´M¡hj�µh²hubhø)�”}”(hŒ unlock the fence and irqrestore ”h]”hÌ)�”}”(hŒunlock the fence and irqrestore”h]”hŒunlock the fence and irqrestore”…”�”}”(hjth²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´MŸhjpubah}”(h]”h ]”h"]”h$]”h&]”uh1h÷h³j‚h´MŸhj�µh²hubjh )�”}”(hŒ¬**Parameters** ``fence`` the fence to unlock ``flags`` the CPU flags to restore **Description** Unlock the fence, allowing it to change its state to signaled again.”h]”(hÌ)�”}”(hŒ**Parameters**”h]”jr )�”}”(hj�h]”hŒ Parameters”…”�”}”(hj‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hj�ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´M£hj‰ubj´ )�”}”(hhh]”(j¹ )�”}”(hŒ``fence`` the fence to unlock ”h]”(j¿ )�”}”(hŒ ``fence``”h]”jâ)�”}”(hj®h]”hŒfence”…”�”}”(hj°h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj¬ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´M hj¨ubjÙ )�”}”(hhh]”hÌ)�”}”(hŒthe fence to unlock”h]”hŒthe fence to unlock”…”�”}”(hjÇh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jÃh´M hjÄubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hj¨ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³jÃh´M hj¥ubj¹ )�”}”(hŒ#``flags`` the CPU flags to restore ”h]”(j¿ )�”}”(hŒ ``flags``”h]”jâ)�”}”(hjçh]”hŒflags”…”�”}”(hjéh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjåubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´M¡hjáubjÙ )�”}”(hhh]”hÌ)�”}”(hŒthe CPU flags to restore”h]”hŒthe CPU flags to restore”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jüh´M¡hjýubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hjáubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³jüh´M¡hj¥ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j³ hj‰ubhÌ)�”}”(hŒ**Description**”h]”jr )�”}”(hj"h]”hŒ Description”…”�”}”(hj$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hj ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´M£hj‰ubhÌ)�”}”(hŒDUnlock the fence, allowing it to change its state to signaled again.”h]”hŒDUnlock the fence, allowing it to change its state to signaled again.”…”�”}”(hj8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´M¢hj‰ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jg hj�µh²hh³Nh´NubjÉ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÕŒdma_fence_assert_held (C macro)”Œc.dma_fence_assert_held”hNt”auh1jÈhj�µh²hh³Nh´NubjÛ)�”}”(hhh]”(jà)�”}”(hŒdma_fence_assert_held”h]”jæ)�”}”(hŒdma_fence_assert_held”h]”j )�”}”(hŒdma_fence_assert_held”h]”j )�”}”(hjah]”hŒdma_fence_assert_held”…”�”}”(hjkh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjgubah}”(h]”h ]”(j' j( eh"]”h$]”h&]”j÷jøuh1j hjch²hh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´M©ubah}”(h]”h ]”h"]”h$]”h&]”j÷jøj2 ˆuh1jåj3 j4 hj_h²hh³j~h´M©ubah}”(h]”jZah ]”(j8 j9 eh"]”h$]”h&]”j= ˆj> )j? huh1jßh³j~h´M©hj\h²hubjA )�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1j@ hj\h²hh³j~h´M©ubeh}”(h]”h ]”(jîŒmacro”eh"]”h$]”h&]”ja jîjb j—jc j—jd ‰je ‰jf ‰uh1jÚh²hhj�µh³Nh´NubhÌ)�”}”(hŒ!``dma_fence_assert_held (fence)``”h]”jâ)�”}”(hj�h]”hŒdma_fence_assert_held (fence)”…”�”}”(hjŸh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj›ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´M«hj�µh²hubhø)�”}”(hŒ'lockdep assertion that fence is locked ”h]”hÌ)�”}”(hŒ&lockdep assertion that fence is locked”h]”hŒ&lockdep assertion that fence is locked”…”�”}”(hj·h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´M©hj³ubah}”(h]”h ]”h"]”h$]”h&]”uh1h÷h³jÅh´M©hj�µh²hubjh )�”}”(hŒ<**Parameters** ``fence`` the fence which should be locked”h]”(hÌ)�”}”(hŒ**Parameters**”h]”jr )�”}”(hjÒh]”hŒ Parameters”…”�”}”(hjÔh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hjÐubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´M­hjÌubj´ )�”}”(hhh]”j¹ )�”}”(hŒ*``fence`` the fence which should be locked”h]”(j¿ )�”}”(hŒ ``fence``”h]”jâ)�”}”(hjñh]”hŒfence”…”�”}”(hjóh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjïubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´M¯hjëubjÙ )�”}”(hhh]”hÌ)�”}”(hŒ the fence which should be locked”h]”hŒ the fence which should be locked”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´Mªhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hjëubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³jh´M¯hjèubah}”(h]”h ]”h"]”h$]”h&]”uh1j³ hjÌubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jg hj�µh²hh³Nh´NubjÉ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÕŒ)dma_fence_is_signaled_locked (C function)”Œc.dma_fence_is_signaled_locked”hNt”auh1jÈhj�µh²hh³Nh´NubjÛ)�”}”(hhh]”(jà)�”}”(hŒ;bool dma_fence_is_signaled_locked (struct dma_fence *fence)”h]”jæ)�”}”(hŒ:bool dma_fence_is_signaled_locked(struct dma_fence *fence)”h]”(jM)�”}”(hji5h]”hŒbool”…”�”}”(hjKh²hh³Nh´Nubah}”(h]”h ]”jYah"]”h$]”h&]”uh1jLhjGh²hh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´M÷ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjYh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjGh²hh³jXh´M÷ubj )�”}”(hŒdma_fence_is_signaled_locked”h]”j )�”}”(hŒdma_fence_is_signaled_locked”h]”hŒdma_fence_is_signaled_locked”…”�”}”(hjkh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjgubah}”(h]”h ]”(j' j( eh"]”h$]”h&]”j÷jøuh1j hjGh²hh³jXh´M÷ubjŒ)�”}”(hŒ(struct dma_fence *fence)”h]”j’)�”}”(hŒstruct dma_fence *fence”h]”(jì)�”}”(hjïh]”hŒstruct”…”�”}”(hj‡h²hh³Nh´Nubah}”(h]”h ]”jøah"]”h$]”h&]”uh1jëhjƒubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj”h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjƒubh)�”}”(hhh]”j )�”}”(hŒ dma_fence”h]”hŒ dma_fence”…”�”}”(hj¥h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj¢ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jîŒreftype”jGŒ reftarget”j§Œmodname”NŒ classname”Nj³j¶)�”}”j¹]”jO)�”}”jGjmsbŒc.dma_fence_is_signaled_locked”†”asbuh1hhjƒubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÅh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjƒubjd)�”}”(hjgh]”hŒ*”…”�”}”(hjÓh²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchjƒubj )�”}”(hŒfence”h]”hŒfence”…”�”}”(hjàh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjƒubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj÷jøuh1j‘hjubah}”(h]”h ]”h"]”h$]”h&]”j÷jøuh1j‹hjGh²hh³jXh´M÷ubeh}”(h]”h ]”h"]”h$]”h&]”j÷jøj2 ˆuh1jåj3 j4 hjCh²hh³jXh´M÷ubah}”(h]”j>ah ]”(j8 j9 eh"]”h$]”h&]”j= ˆj> )j? huh1•jßh³jXh´M÷hj@h²hubjA )�”}”(hhh]”hÌ)�”}”(hŒ2Return an indication if the fence is signaled yet.”h]”hŒ2Return an indication if the fence is signaled yet.”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´M÷hjh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j@ hj@h²hh³jXh´M÷ubeh}”(h]”h ]”(jîŒfunction”eh"]”h$]”h&]”ja jîjb j"jc j"jd ‰je ‰jf ‰uh1jÚh²hhj�µh³Nh´Nubjh )�”}”(hXÀ**Parameters** ``struct dma_fence *fence`` the fence to check **Description** Returns true if the fence was already signaled, false if not. Since this function doesn't enable signaling, it is not guaranteed to ever return true if dma_fence_add_callback(), dma_fence_wait() or dma_fence_enable_sw_signaling() haven't been called before. This function requires :c:type:`dma_fence.lock ` to be held. See also dma_fence_is_signaled().”h]”(hÌ)�”}”(hŒ**Parameters**”h]”jr )�”}”(hj,h]”hŒ Parameters”…”�”}”(hj.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hj*ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´Mûhj&ubj´ )�”}”(hhh]”j¹ )�”}”(hŒ/``struct dma_fence *fence`` the fence to check ”h]”(j¿ )�”}”(hŒ``struct dma_fence *fence``”h]”jâ)�”}”(hjKh]”hŒstruct dma_fence *fence”…”�”}”(hjMh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjIubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´MùhjEubjÙ )�”}”(hhh]”hÌ)�”}”(hŒthe fence to check”h]”hŒthe fence to check”…”�”}”(hjdh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j`h´Mùhjaubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hjEubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³j`h´MùhjBubah}”(h]”h ]”h"]”h$]”h&]”uh1j³ hj&ubhÌ)�”}”(hŒ**Description**”h]”jr )�”}”(hj†h]”hŒ Description”…”�”}”(hjˆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hj„ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´Mûhj&ubhÌ)�”}”(hXReturns true if the fence was already signaled, false if not. Since this function doesn't enable signaling, it is not guaranteed to ever return true if dma_fence_add_callback(), dma_fence_wait() or dma_fence_enable_sw_signaling() haven't been called before.”h]”hXReturns true if the fence was already signaled, false if not. Since this function doesn’t enable signaling, it is not guaranteed to ever return true if dma_fence_add_callback(), dma_fence_wait() or dma_fence_enable_sw_signaling() haven’t been called before.”…”�”}”(hjœh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´Múhj&ubhÌ)�”}”(hŒGThis function requires :c:type:`dma_fence.lock ` to be held.”h]”(hŒThis function requires ”…”�”}”(hj«h²hh³Nh´Nubh)�”}”(hŒ$:c:type:`dma_fence.lock `”h]”jâ)�”}”(hjµh]”hŒdma_fence.lock”…”�”}”(hj·h²hh³Nh´Nubah}”(h]”h ]”(jíjîŒc-type”eh"]”h$]”h&]”uh1jáhj³ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”júŒ refdomain”jîŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰j³j·jŒ dma_fence”uh1hh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´Mÿhj«ubhŒ to be held.”…”�”}”(hj«h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jÒh´Mÿhj&ubhÌ)�”}”(hŒ!See also dma_fence_is_signaled().”h]”hŒ!See also dma_fence_is_signaled().”…”�”}”(hjÝh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´Mhj&ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jg hj�µh²hh³Nh´NubjÉ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÕŒ"dma_fence_is_signaled (C function)”Œc.dma_fence_is_signaled”hNt”auh1jÈhj�µh²hh³Nh´NubjÛ)�”}”(hhh]”(jà)�”}”(hŒ4bool dma_fence_is_signaled (struct dma_fence *fence)”h]”jæ)�”}”(hŒ3bool dma_fence_is_signaled(struct dma_fence *fence)”h]”(jM)�”}”(hji5h]”hŒbool”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”jYah"]”h$]”h&]”uh1jLhjh²hh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´Mubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjh²hh³jh´Mubj )�”}”(hŒdma_fence_is_signaled”h]”j )�”}”(hŒdma_fence_is_signaled”h]”hŒdma_fence_is_signaled”…”�”}”(hj,h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj(ubah}”(h]”h ]”(j' j( eh"]”h$]”h&]”j÷jøuh1j hjh²hh³jh´MubjŒ)�”}”(hŒ(struct dma_fence *fence)”h]”j’)�”}”(hŒstruct dma_fence *fence”h]”(jì)�”}”(hjïh]”hŒstruct”…”�”}”(hjHh²hh³Nh´Nubah}”(h]”h ]”jøah"]”h$]”h&]”uh1jëhjDubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjUh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjDubh)�”}”(hhh]”j )�”}”(hŒ dma_fence”h]”hŒ dma_fence”…”�”}”(hjfh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjcubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jîŒreftype”jGŒ reftarget”jhŒmodname”NŒ classname”Nj³j¶)�”}”j¹]”jO)�”}”jGj.sbŒc.dma_fence_is_signaled”†”asbuh1hhjDubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj†h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjDubjd)�”}”(hjgh]”hŒ*”…”�”}”(hj”h²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchjDubj )�”}”(hŒfence”h]”hŒfence”…”�”}”(hj¡h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjDubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj÷jøuh1j‘hj@ubah}”(h]”h ]”h"]”h$]”h&]”j÷jøuh1j‹hjh²hh³jh´Mubeh}”(h]”h ]”h"]”h$]”h&]”j÷jøj2 ˆuh1jåj3 j4 hjh²hh³jh´Mubah}”(h]”jÿah ]”(j8 j9 eh"]”h$]”h&]”j= ˆj> )j? huh1jßh³jh´Mhjh²hubjA )�”}”(hhh]”hÌ)�”}”(hŒ2Return an indication if the fence is signaled yet.”h]”hŒ2Return an indication if the fence is signaled yet.”…”�”}”(hjËh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´MhjÈh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j@ hjh²hh³jh´Mubeh}”(h]”h ]”(jîŒfunction”eh"]”h$]”h&]”ja jîjb jãjc jãjd ‰je ‰jf ‰uh1jÚh²hhj�µh³Nh´Nubjh )�”}”(hX–**Parameters** ``struct dma_fence *fence`` the fence to check **Description** Returns true if the fence was already signaled, false if not. Since this function doesn't enable signaling, it is not guaranteed to ever return true if dma_fence_add_callback(), dma_fence_wait() or dma_fence_enable_signaling() haven't been called before. It's recommended for seqno fences to call dma_fence_signal when the operation is complete, it makes it possible to prevent issues from wraparound between time of issue and time of use by checking the return value of this function before calling hardware-specific wait instructions. See also dma_fence_is_signaled_locked().”h]”(hÌ)�”}”(hŒ**Parameters**”h]”jr )�”}”(hjíh]”hŒ Parameters”…”�”}”(hjïh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hjëubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´Mhjçubj´ )�”}”(hhh]”j¹ )�”}”(hŒ/``struct dma_fence *fence`` the fence to check ”h]”(j¿ )�”}”(hŒ``struct dma_fence *fence``”h]”jâ)�”}”(hj h]”hŒstruct dma_fence *fence”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´MhjubjÙ )�”}”(hhh]”hÌ)�”}”(hŒthe fence to check”h]”hŒthe fence to check”…”�”}”(hj%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j!h´Mhj"ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hjubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³j!h´Mhjubah}”(h]”h ]”h"]”h$]”h&]”uh1j³ hjçubhÌ)�”}”(hŒ**Description**”h]”jr )�”}”(hjGh]”hŒ Description”…”�”}”(hjIh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hjEubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´MhjçubhÌ)�”}”(hŒþReturns true if the fence was already signaled, false if not. Since this function doesn't enable signaling, it is not guaranteed to ever return true if dma_fence_add_callback(), dma_fence_wait() or dma_fence_enable_signaling() haven't been called before.”h]”hXReturns true if the fence was already signaled, false if not. Since this function doesn’t enable signaling, it is not guaranteed to ever return true if dma_fence_add_callback(), dma_fence_wait() or dma_fence_enable_signaling() haven’t been called before.”…”�”}”(hj]h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´MhjçubhÌ)�”}”(hXIt's recommended for seqno fences to call dma_fence_signal when the operation is complete, it makes it possible to prevent issues from wraparound between time of issue and time of use by checking the return value of this function before calling hardware-specific wait instructions.”h]”hXIt’s recommended for seqno fences to call dma_fence_signal when the operation is complete, it makes it possible to prevent issues from wraparound between time of issue and time of use by checking the return value of this function before calling hardware-specific wait instructions.”…”�”}”(hjlh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´M hjçubhÌ)�”}”(hŒ(See also dma_fence_is_signaled_locked().”h]”hŒ(See also dma_fence_is_signaled_locked().”…”�”}”(hj{h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´M%hjçubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jg hj�µh²hh³Nh´NubjÉ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÕŒ!__dma_fence_is_later (C function)”Œc.__dma_fence_is_later”hNt”auh1jÈhj�µh²hh³Nh´NubjÛ)�”}”(hhh]”(jà)�”}”(hŒCbool __dma_fence_is_later (struct dma_fence *fence, u64 f1, u64 f2)”h]”jæ)�”}”(hŒBbool __dma_fence_is_later(struct dma_fence *fence, u64 f1, u64 f2)”h]”(jM)�”}”(hji5h]”hŒbool”…”�”}”(hjªh²hh³Nh´Nubah}”(h]”h ]”jYah"]”h$]”h&]”uh1jLhj¦h²hh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´M=ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¸h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj¦h²hh³j·h´M=ubj )�”}”(hŒ__dma_fence_is_later”h]”j )�”}”(hŒ__dma_fence_is_later”h]”hŒ__dma_fence_is_later”…”�”}”(hjÊh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjÆubah}”(h]”h ]”(j' j( eh"]”h$]”h&]”j÷jøuh1j hj¦h²hh³j·h´M=ubjŒ)�”}”(hŒ)(struct dma_fence *fence, u64 f1, u64 f2)”h]”(j’)�”}”(hŒstruct dma_fence *fence”h]”(jì)�”}”(hjïh]”hŒstruct”…”�”}”(hjæh²hh³Nh´Nubah}”(h]”h ]”jøah"]”h$]”h&]”uh1jëhjâubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjóh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjâubh)�”}”(hhh]”j )�”}”(hŒ dma_fence”h]”hŒ dma_fence”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jîŒreftype”jGŒ reftarget”j Œmodname”NŒ classname”Nj³j¶)�”}”j¹]”jO)�”}”jGjÌsbŒc.__dma_fence_is_later”†”asbuh1hhjâubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj$ h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjâubjd)�”}”(hjgh]”hŒ*”…”�”}”(hj2 h²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchjâubj )�”}”(hŒfence”h]”hŒfence”…”�”}”(hj? h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjâubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj÷jøuh1j‘hjÞubj’)�”}”(hŒu64 f1”h]”(h)�”}”(hhh]”j )�”}”(hŒu64”h]”hŒu64”…”�”}”(hj[ h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjX ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jîŒreftype”jGŒ reftarget”j] Œmodname”NŒ classname”Nj³j¶)�”}”j¹]”j Œc.__dma_fence_is_later”†”asbuh1hhjT ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjy h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjT ubj )�”}”(hŒf1”h]”hŒf1”…”�”}”(hj‡ h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjT ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj÷jøuh1j‘hjÞubj’)�”}”(hŒu64 f2”h]”(h)�”}”(hhh]”j )�”}”(hŒu64”h]”hŒu64”…”�”}”(hj£ h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj  ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jîŒreftype”jGŒ reftarget”j¥ Œmodname”NŒ classname”Nj³j¶)�”}”j¹]”j Œc.__dma_fence_is_later”†”asbuh1hhjœ ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÁ h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjœ ubj )�”}”(hŒf2”h]”hŒf2”…”�”}”(hjÏ h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjœ ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj÷jøuh1j‘hjÞubeh}”(h]”h ]”h"]”h$]”h&]”j÷jøuh1j‹hj¦h²hh³j·h´M=ubeh}”(h]”h ]”h"]”h$]”h&]”j÷jøj2 ˆuh1jåj3 j4 hj¢h²hh³j·h´M=ubah}”(h]”j�ah ]”(j8 j9 eh"]”h$]”h&]”j= ˆj> )j? huh1jßh³j·h´M=hjŸh²hubjA )�”}”(hhh]”hÌ)�”}”(hŒ-return if f1 is chronologically later than f2”h]”hŒ-return if f1 is chronologically later than f2”…”�”}”(hjù h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´M=hjö h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j@ hjŸh²hh³j·h´M=ubeh}”(h]”h ]”(jîŒfunction”eh"]”h$]”h&]”ja jîjb j jc j jd ‰je ‰jf ‰uh1jÚh²hhj�µh³Nh´Nubjh )�”}”(hX[**Parameters** ``struct dma_fence *fence`` fence in whose context to do the comparison ``u64 f1`` the first fence's seqno ``u64 f2`` the second fence's seqno from the same context **Description** Returns true if f1 is chronologically later than f2. Both fences must be from the same context, since a seqno is not common across contexts.”h]”(hÌ)�”}”(hŒ**Parameters**”h]”jr )�”}”(hj h]”hŒ Parameters”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hj ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´MAhj ubj´ )�”}”(hhh]”(j¹ )�”}”(hŒH``struct dma_fence *fence`` fence in whose context to do the comparison ”h]”(j¿ )�”}”(hŒ``struct dma_fence *fence``”h]”jâ)�”}”(hj: h]”hŒstruct dma_fence *fence”…”�”}”(hj< h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj8 ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´M>hj4 ubjÙ )�”}”(hhh]”hÌ)�”}”(hŒ+fence in whose context to do the comparison”h]”hŒ+fence in whose context to do the comparison”…”�”}”(hjS h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jO h´M>hjP ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hj4 ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³jO h´M>hj1 ubj¹ )�”}”(hŒ#``u64 f1`` the first fence's seqno ”h]”(j¿ )�”}”(hŒ ``u64 f1``”h]”jâ)�”}”(hjs h]”hŒu64 f1”…”�”}”(hju h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjq ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´M?hjm ubjÙ )�”}”(hhh]”hÌ)�”}”(hŒthe first fence's seqno”h]”hŒthe first fence’s seqno”…”�”}”(hjŒ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jˆ h´M?hj‰ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hjm ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³jˆ h´M?hj1 ubj¹ )�”}”(hŒ:``u64 f2`` the second fence's seqno from the same context ”h]”(j¿ )�”}”(hŒ ``u64 f2``”h]”jâ)�”}”(hj¬ h]”hŒu64 f2”…”�”}”(hj® h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjª ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´M@hj¦ ubjÙ )�”}”(hhh]”hÌ)�”}”(hŒ.the second fence's seqno from the same context”h]”hŒ0the second fence’s seqno from the same context”…”�”}”(hjÅ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jÁ h´M@hj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hj¦ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³jÁ h´M@hj1 ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j³ hj ubhÌ)�”}”(hŒ**Description**”h]”jr )�”}”(hjç h]”hŒ Description”…”�”}”(hjé h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hjå ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´MBhj ubhÌ)�”}”(hŒŒReturns true if f1 is chronologically later than f2. Both fences must be from the same context, since a seqno is not common across contexts.”h]”hŒŒReturns true if f1 is chronologically later than f2. Both fences must be from the same context, since a seqno is not common across contexts.”…”�”}”(hjý h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´MAhj ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jg hj�µh²hh³Nh´NubjÉ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÕŒdma_fence_is_later (C function)”Œc.dma_fence_is_later”hNt”auh1jÈhj�µh²hh³Nh´NubjÛ)�”}”(hhh]”(jà)�”}”(hŒDbool dma_fence_is_later (struct dma_fence *f1, struct dma_fence *f2)”h]”jæ)�”}”(hŒCbool dma_fence_is_later(struct dma_fence *f1, struct dma_fence *f2)”h]”(jM)�”}”(hji5h]”hŒbool”…”�”}”(hj, h²hh³Nh´Nubah}”(h]”h ]”jYah"]”h$]”h&]”uh1jLhj( h²hh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´MRubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj: h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj( h²hh³j9 h´MRubj )�”}”(hŒdma_fence_is_later”h]”j )�”}”(hŒdma_fence_is_later”h]”hŒdma_fence_is_later”…”�”}”(hjL h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjH ubah}”(h]”h ]”(j' j( eh"]”h$]”h&]”j÷jøuh1j hj( h²hh³j9 h´MRubjŒ)�”}”(hŒ,(struct dma_fence *f1, struct dma_fence *f2)”h]”(j’)�”}”(hŒstruct dma_fence *f1”h]”(jì)�”}”(hjïh]”hŒstruct”…”�”}”(hjh h²hh³Nh´Nubah}”(h]”h ]”jøah"]”h$]”h&]”uh1jëhjd ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hju h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjd ubh)�”}”(hhh]”j )�”}”(hŒ dma_fence”h]”hŒ dma_fence”…”�”}”(hj† h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjƒ ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jîŒreftype”jGŒ reftarget”jˆ Œmodname”NŒ classname”Nj³j¶)�”}”j¹]”jO)�”}”jGjN sbŒc.dma_fence_is_later”†”asbuh1hhjd ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¦ h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjd ubjd)�”}”(hjgh]”hŒ*”…”�”}”(hj´ h²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchjd ubj )�”}”(hŒf1”h]”hŒf1”…”�”}”(hjÁ h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjd ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj÷jøuh1j‘hj` ubj’)�”}”(hŒstruct dma_fence *f2”h]”(jì)�”}”(hjïh]”hŒstruct”…”�”}”(hjÚ h²hh³Nh´Nubah}”(h]”h ]”jøah"]”h$]”h&]”uh1jëhjÖ ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjç h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjÖ ubh)�”}”(hhh]”j )�”}”(hŒ dma_fence”h]”hŒ dma_fence”…”�”}”(hjø h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjõ ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jîŒreftype”jGŒ reftarget”jú Œmodname”NŒ classname”Nj³j¶)�”}”j¹]”j¢ Œc.dma_fence_is_later”†”asbuh1hhjÖ ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjÖ ubjd)�”}”(hjgh]”hŒ*”…”�”}”(hj$ h²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchjÖ ubj )�”}”(hŒf2”h]”hŒf2”…”�”}”(hj1 h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjÖ ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj÷jøuh1j‘hj` ubeh}”(h]”h ]”h"]”h$]”h&]”j÷jøuh1j‹hj( h²hh³j9 h´MRubeh}”(h]”h ]”h"]”h$]”h&]”j÷jøj2 ˆuh1jåj3 j4 hj$ h²hh³j9 h´MRubah}”(h]”j ah ]”(j8 j9 eh"]”h$]”h&]”j= ˆj> )j? huh1jßh³j9 h´MRhj! h²hubjA )�”}”(hhh]”hÌ)�”}”(hŒ-return if f1 is chronologically later than f2”h]”hŒ-return if f1 is chronologically later than f2”…”�”}”(hj[ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´MRhjX h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j@ hj! h²hh³j9 h´MRubeh}”(h]”h ]”(jîŒfunction”eh"]”h$]”h&]”ja jîjb js jc js jd ‰je ‰jf ‰uh1jÚh²hhj�µh³Nh´Nubjh )�”}”(hX3**Parameters** ``struct dma_fence *f1`` the first fence from the same context ``struct dma_fence *f2`` the second fence from the same context **Description** Returns true if f1 is chronologically later than f2. Both fences must be from the same context, since a seqno is not re-used across contexts.”h]”(hÌ)�”}”(hŒ**Parameters**”h]”jr )�”}”(hj} h]”hŒ Parameters”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hj{ ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´MVhjw ubj´ )�”}”(hhh]”(j¹ )�”}”(hŒ?``struct dma_fence *f1`` the first fence from the same context ”h]”(j¿ )�”}”(hŒ``struct dma_fence *f1``”h]”jâ)�”}”(hjœ h]”hŒstruct dma_fence *f1”…”�”}”(hjž h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjš ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´MShj– ubjÙ )�”}”(hhh]”hÌ)�”}”(hŒ%the first fence from the same context”h]”hŒ%the first fence from the same context”…”�”}”(hjµ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j± h´MShj² ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hj– ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³j± h´MShj“ ubj¹ )�”}”(hŒ@``struct dma_fence *f2`` the second fence from the same context ”h]”(j¿ )�”}”(hŒ``struct dma_fence *f2``”h]”jâ)�”}”(hjÕ h]”hŒstruct dma_fence *f2”…”�”}”(hj× h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjÓ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´MThjÏ ubjÙ )�”}”(hhh]”hÌ)�”}”(hŒ&the second fence from the same context”h]”hŒ&the second fence from the same context”…”�”}”(hjî h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jê h´MThjë ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hjÏ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³jê h´MThj“ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j³ hjw ubhÌ)�”}”(hŒ**Description**”h]”jr )�”}”(hj h]”hŒ Description”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hj ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´MVhjw ubhÌ)�”}”(hŒ�Returns true if f1 is chronologically later than f2. Both fences must be from the same context, since a seqno is not re-used across contexts.”h]”hŒ�Returns true if f1 is chronologically later than f2. Both fences must be from the same context, since a seqno is not re-used across contexts.”…”�”}”(hj& h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´MUhjw ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jg hj�µh²hh³Nh´NubjÉ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÕŒ'dma_fence_is_later_or_same (C function)”Œc.dma_fence_is_later_or_same”hNt”auh1jÈhj�µh²hh³Nh´NubjÛ)�”}”(hhh]”(jà)�”}”(hŒLbool dma_fence_is_later_or_same (struct dma_fence *f1, struct dma_fence *f2)”h]”jæ)�”}”(hŒKbool dma_fence_is_later_or_same(struct dma_fence *f1, struct dma_fence *f2)”h]”(jM)�”}”(hji5h]”hŒbool”…”�”}”(hjU h²hh³Nh´Nubah}”(h]”h ]”jYah"]”h$]”h&]”uh1jLhjQ h²hh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´Mcubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjc h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjQ h²hh³jb h´Mcubj )�”}”(hŒdma_fence_is_later_or_same”h]”j )�”}”(hŒdma_fence_is_later_or_same”h]”hŒdma_fence_is_later_or_same”…”�”}”(hju h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjq ubah}”(h]”h ]”(j' j( eh"]”h$]”h&]”j÷jøuh1j hjQ h²hh³jb h´McubjŒ)�”}”(hŒ,(struct dma_fence *f1, struct dma_fence *f2)”h]”(j’)�”}”(hŒstruct dma_fence *f1”h]”(jì)�”}”(hjïh]”hŒstruct”…”�”}”(hj‘ h²hh³Nh´Nubah}”(h]”h ]”jøah"]”h$]”h&]”uh1jëhj� ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjž h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj� ubh)�”}”(hhh]”j )�”}”(hŒ dma_fence”h]”hŒ dma_fence”…”�”}”(hj¯ h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj¬ ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jîŒreftype”jGŒ reftarget”j± Œmodname”NŒ classname”Nj³j¶)�”}”j¹]”jO)�”}”jGjw sbŒc.dma_fence_is_later_or_same”†”asbuh1hhj� ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÏ h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj� ubjd)�”}”(hjgh]”hŒ*”…”�”}”(hjÝ h²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchj� ubj )�”}”(hŒf1”h]”hŒf1”…”�”}”(hjê h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj� ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj÷jøuh1j‘hj‰ ubj’)�”}”(hŒstruct dma_fence *f2”h]”(jì)�”}”(hjïh]”hŒstruct”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jøah"]”h$]”h&]”uh1jëhjÿ ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjÿ ubh)�”}”(hhh]”j )�”}”(hŒ dma_fence”h]”hŒ dma_fence”…”�”}”(hj!h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jîŒreftype”jGŒ reftarget”j#Œmodname”NŒ classname”Nj³j¶)�”}”j¹]”jË Œc.dma_fence_is_later_or_same”†”asbuh1hhjÿ ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj?h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjÿ ubjd)�”}”(hjgh]”hŒ*”…”�”}”(hjMh²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchjÿ ubj )�”}”(hŒf2”h]”hŒf2”…”�”}”(hjZh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjÿ ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj÷jøuh1j‘hj‰ ubeh}”(h]”h ]”h"]”h$]”h&]”j÷jøuh1j‹hjQ h²hh³jb h´Mcubeh}”(h]”h ]”h"]”h$]”h&]”j÷jøj2 ˆuh1jåj3 j4 hjM h²hh³jb h´Mcubah}”(h]”jH ah ]”(j8 j9 eh"]”h$]”h&]”j= ˆj> )j? huh1jßh³jb h´MchjJ h²hubjA )�”}”(hhh]”hÌ)�”}”(hŒ(return true if f1 is later or same as f2”h]”hŒ(return true if f1 is later or same as f2”…”�”}”(hj„h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´Mchj�h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j@ hjJ h²hh³jb h´Mcubeh}”(h]”h ]”(jîŒfunction”eh"]”h$]”h&]”ja jîjb jœjc jœjd ‰je ‰jf ‰uh1jÚh²hhj�µh³Nh´Nubjh )�”}”(hXE**Parameters** ``struct dma_fence *f1`` the first fence from the same context ``struct dma_fence *f2`` the second fence from the same context **Description** Returns true if f1 is chronologically later than f2 or the same fence. Both fences must be from the same context, since a seqno is not re-used across contexts.”h]”(hÌ)�”}”(hŒ**Parameters**”h]”jr )�”}”(hj¦h]”hŒ Parameters”…”�”}”(hj¨h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hj¤ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´Mghj ubj´ )�”}”(hhh]”(j¹ )�”}”(hŒ?``struct dma_fence *f1`` the first fence from the same context ”h]”(j¿ )�”}”(hŒ``struct dma_fence *f1``”h]”jâ)�”}”(hjÅh]”hŒstruct dma_fence *f1”…”�”}”(hjÇh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjÃubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´Mdhj¿ubjÙ )�”}”(hhh]”hÌ)�”}”(hŒ%the first fence from the same context”h]”hŒ%the first fence from the same context”…”�”}”(hjÞh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jÚh´MdhjÛubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hj¿ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³jÚh´Mdhj¼ubj¹ )�”}”(hŒ@``struct dma_fence *f2`` the second fence from the same context ”h]”(j¿ )�”}”(hŒ``struct dma_fence *f2``”h]”jâ)�”}”(hjþh]”hŒstruct dma_fence *f2”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjüubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´MehjøubjÙ )�”}”(hhh]”hÌ)�”}”(hŒ&the second fence from the same context”h]”hŒ&the second fence from the same context”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jh´Mehjubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hjøubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³jh´Mehj¼ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j³ hj ubhÌ)�”}”(hŒ**Description**”h]”jr )�”}”(hj9h]”hŒ Description”…”�”}”(hj;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hj7ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´Mghj ubhÌ)�”}”(hŒŸReturns true if f1 is chronologically later than f2 or the same fence. Both fences must be from the same context, since a seqno is not re-used across contexts.”h]”hŒŸReturns true if f1 is chronologically later than f2 or the same fence. Both fences must be from the same context, since a seqno is not re-used across contexts.”…”�”}”(hjOh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´Mfhj ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jg hj�µh²hh³Nh´NubjÉ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÕŒdma_fence_later (C function)”Œc.dma_fence_later”hNt”auh1jÈhj�µh²hh³Nh´NubjÛ)�”}”(hhh]”(jà)�”}”(hŒOstruct dma_fence * dma_fence_later (struct dma_fence *f1, struct dma_fence *f2)”h]”jæ)�”}”(hŒMstruct dma_fence *dma_fence_later(struct dma_fence *f1, struct dma_fence *f2)”h]”(jì)�”}”(hjïh]”hŒstruct”…”�”}”(hj~h²hh³Nh´Nubah}”(h]”h ]”jøah"]”h$]”h&]”uh1jëhjzh²hh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´Mrubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŒh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjzh²hh³j‹h´Mrubh)�”}”(hhh]”j )�”}”(hŒ dma_fence”h]”hŒ dma_fence”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjšubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jîŒreftype”jGŒ reftarget”jŸŒmodname”NŒ classname”Nj³j¶)�”}”j¹]”jO)�”}”jGŒdma_fence_later”sbŒc.dma_fence_later”†”asbuh1hhjzh²hh³j‹h´Mrubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¾h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjzh²hh³j‹h´Mrubjd)�”}”(hjgh]”hŒ*”…”�”}”(hjÌh²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchjzh²hh³j‹h´Mrubj )�”}”(hŒdma_fence_later”h]”j )�”}”(hj»h]”hŒdma_fence_later”…”�”}”(hjÝh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjÙubah}”(h]”h ]”(j' j( eh"]”h$]”h&]”j÷jøuh1j hjzh²hh³j‹h´MrubjŒ)�”}”(hŒ,(struct dma_fence *f1, struct dma_fence *f2)”h]”(j’)�”}”(hŒstruct dma_fence *f1”h]”(jì)�”}”(hjïh]”hŒstruct”…”�”}”(hjøh²hh³Nh´Nubah}”(h]”h ]”jøah"]”h$]”h&]”uh1jëhjôubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjôubh)�”}”(hhh]”j )�”}”(hŒ dma_fence”h]”hŒ dma_fence”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jîŒreftype”jGŒ reftarget”jŒmodname”NŒ classname”Nj³j¶)�”}”j¹]”j¹Œc.dma_fence_later”†”asbuh1hhjôubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj4h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjôubjd)�”}”(hjgh]”hŒ*”…”�”}”(hjBh²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchjôubj )�”}”(hŒf1”h]”hŒf1”…”�”}”(hjOh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjôubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj÷jøuh1j‘hjðubj’)�”}”(hŒstruct dma_fence *f2”h]”(jì)�”}”(hjïh]”hŒstruct”…”�”}”(hjhh²hh³Nh´Nubah}”(h]”h ]”jøah"]”h$]”h&]”uh1jëhjdubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjuh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjdubh)�”}”(hhh]”j )�”}”(hŒ dma_fence”h]”hŒ dma_fence”…”�”}”(hj†h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjƒubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jîŒreftype”jGŒ reftarget”jˆŒmodname”NŒ classname”Nj³j¶)�”}”j¹]”j¹Œc.dma_fence_later”†”asbuh1hhjdubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¤h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjdubjd)�”}”(hjgh]”hŒ*”…”�”}”(hj²h²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchjdubj )�”}”(hŒf2”h]”hŒf2”…”�”}”(hj¿h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjdubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj÷jøuh1j‘hjðubeh}”(h]”h ]”h"]”h$]”h&]”j÷jøuh1j‹hjzh²hh³j‹h´Mrubeh}”(h]”h ]”h"]”h$]”h&]”j÷jøj2 ˆuh1jåj3 j4 hjvh²hh³j‹h´Mrubah}”(h]”jqah ]”(j8 j9 eh"]”h$]”h&]”j= ˆj> )j? huh1jßh³j‹h´Mrhjsh²hubjA )�”}”(hhh]”hÌ)�”}”(hŒ&return the chronologically later fence”h]”hŒ&return the chronologically later fence”…”�”}”(hjéh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´Mrhjæh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j@ hjsh²hh³j‹h´Mrubeh}”(h]”h ]”(jîŒfunction”eh"]”h$]”h&]”ja jîjb jjc jjd ‰je ‰jf ‰uh1jÚh²hhj�µh³Nh´Nubjh )�”}”(hXY**Parameters** ``struct dma_fence *f1`` the first fence from the same context ``struct dma_fence *f2`` the second fence from the same context **Description** Returns NULL if both fences are signaled, otherwise the fence that would be signaled last. Both fences must be from the same context, since a seqno is not re-used across contexts.”h]”(hÌ)�”}”(hŒ**Parameters**”h]”jr )�”}”(hj h]”hŒ Parameters”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hj ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´Mvhjubj´ )�”}”(hhh]”(j¹ )�”}”(hŒ?``struct dma_fence *f1`` the first fence from the same context ”h]”(j¿ )�”}”(hŒ``struct dma_fence *f1``”h]”jâ)�”}”(hj*h]”hŒstruct dma_fence *f1”…”�”}”(hj,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj(ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´Mshj$ubjÙ )�”}”(hhh]”hÌ)�”}”(hŒ%the first fence from the same context”h]”hŒ%the first fence from the same context”…”�”}”(hjCh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j?h´Mshj@ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hj$ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³j?h´Mshj!ubj¹ )�”}”(hŒ@``struct dma_fence *f2`` the second fence from the same context ”h]”(j¿ )�”}”(hŒ``struct dma_fence *f2``”h]”jâ)�”}”(hjch]”hŒstruct dma_fence *f2”…”�”}”(hjeh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjaubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´Mthj]ubjÙ )�”}”(hhh]”hÌ)�”}”(hŒ&the second fence from the same context”h]”hŒ&the second fence from the same context”…”�”}”(hj|h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jxh´Mthjyubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hj]ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³jxh´Mthj!ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j³ hjubhÌ)�”}”(hŒ**Description**”h]”jr )�”}”(hjžh]”hŒ Description”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hjœubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´MvhjubhÌ)�”}”(hŒ³Returns NULL if both fences are signaled, otherwise the fence that would be signaled last. Both fences must be from the same context, since a seqno is not re-used across contexts.”h]”hŒ³Returns NULL if both fences are signaled, otherwise the fence that would be signaled last. Both fences must be from the same context, since a seqno is not re-used across contexts.”…”�”}”(hj´h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´Muhjubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jg hj�µh²hh³Nh´NubjÉ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÕŒ(dma_fence_get_status_locked (C function)”Œc.dma_fence_get_status_locked”hNt”auh1jÈhj�µh²hh³Nh´NubjÛ)�”}”(hhh]”(jà)�”}”(hŒ9int dma_fence_get_status_locked (struct dma_fence *fence)”h]”jæ)�”}”(hŒ8int dma_fence_get_status_locked(struct dma_fence *fence)”h]”(jM)�”}”(hŒint”h]”hŒint”…”�”}”(hjãh²hh³Nh´Nubah}”(h]”h ]”jYah"]”h$]”h&]”uh1jLhjßh²hh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´MŒubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjòh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjßh²hh³jñh´MŒubj )�”}”(hŒdma_fence_get_status_locked”h]”j )�”}”(hŒdma_fence_get_status_locked”h]”hŒdma_fence_get_status_locked”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjubah}”(h]”h ]”(j' j( eh"]”h$]”h&]”j÷jøuh1j hjßh²hh³jñh´MŒubjŒ)�”}”(hŒ(struct dma_fence *fence)”h]”j’)�”}”(hŒstruct dma_fence *fence”h]”(jì)�”}”(hjïh]”hŒstruct”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”jøah"]”h$]”h&]”uh1jëhjubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj-h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjubh)�”}”(hhh]”j )�”}”(hŒ dma_fence”h]”hŒ dma_fence”…”�”}”(hj>h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj;ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jîŒreftype”jGŒ reftarget”j@Œmodname”NŒ classname”Nj³j¶)�”}”j¹]”jO)�”}”jGjsbŒc.dma_fence_get_status_locked”†”asbuh1hhjubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj^h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjubjd)�”}”(hjgh]”hŒ*”…”�”}”(hjlh²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchjubj )�”}”(hŒfence”h]”hŒfence”…”�”}”(hjyh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj÷jøuh1j‘hjubah}”(h]”h ]”h"]”h$]”h&]”j÷jøuh1j‹hjßh²hh³jñh´MŒubeh}”(h]”h ]”h"]”h$]”h&]”j÷jøj2 ˆuh1jåj3 j4 hjÛh²hh³jñh´MŒubah}”(h]”jÖah ]”(j8 j9 eh"]”h$]”h&]”j= ˆj> )j? huh1jßh³jñh´MŒhjØh²hubjA )�”}”(hhh]”hÌ)�”}”(hŒ"returns the status upon completion”h]”hŒ"returns the status upon completion”…”�”}”(hj£h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´MŒhj h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j@ hjØh²hh³jñh´MŒubeh}”(h]”h ]”(jîŒfunction”eh"]”h$]”h&]”ja jîjb j»jc j»jd ‰je ‰jf ‰uh1jÚh²hhj�µh³Nh´Nubjh )�”}”(hX\**Parameters** ``struct dma_fence *fence`` the dma_fence to query **Description** Drivers can supply an optional error status condition before they signal the fence (to indicate whether the fence was completed due to an error rather than success). The value of the status condition is only valid if the fence has been signaled, dma_fence_get_status_locked() first checks the signal state before reporting the error status. Returns 0 if the fence has not yet been signaled, 1 if the fence has been signaled without an error condition, or a negative error code if the fence has been completed in err.”h]”(hÌ)�”}”(hŒ**Parameters**”h]”jr )�”}”(hjÅh]”hŒ Parameters”…”�”}”(hjÇh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hjÃubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´M�hj¿ubj´ )�”}”(hhh]”j¹ )�”}”(hŒ3``struct dma_fence *fence`` the dma_fence to query ”h]”(j¿ )�”}”(hŒ``struct dma_fence *fence``”h]”jâ)�”}”(hjäh]”hŒstruct dma_fence *fence”…”�”}”(hjæh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjâubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´M�hjÞubjÙ )�”}”(hhh]”hÌ)�”}”(hŒthe dma_fence to query”h]”hŒthe dma_fence to query”…”�”}”(hjýh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jùh´M�hjúubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hjÞubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³jùh´M�hjÛubah}”(h]”h ]”h"]”h$]”h&]”uh1j³ hj¿ubhÌ)�”}”(hŒ**Description**”h]”jr )�”}”(hjh]”hŒ Description”…”�”}”(hj!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hjubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´M�hj¿ubhÌ)�”}”(hXTDrivers can supply an optional error status condition before they signal the fence (to indicate whether the fence was completed due to an error rather than success). The value of the status condition is only valid if the fence has been signaled, dma_fence_get_status_locked() first checks the signal state before reporting the error status.”h]”hXTDrivers can supply an optional error status condition before they signal the fence (to indicate whether the fence was completed due to an error rather than success). The value of the status condition is only valid if the fence has been signaled, dma_fence_get_status_locked() first checks the signal state before reporting the error status.”…”�”}”(hj5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´MŽhj¿ubhÌ)�”}”(hŒ¯Returns 0 if the fence has not yet been signaled, 1 if the fence has been signaled without an error condition, or a negative error code if the fence has been completed in err.”h]”hŒ¯Returns 0 if the fence has not yet been signaled, 1 if the fence has been signaled without an error condition, or a negative error code if the fence has been completed in err.”…”�”}”(hjDh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´M”hj¿ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jg hj�µh²hh³Nh´NubjÉ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÕŒ dma_fence_set_error (C function)”Œc.dma_fence_set_error”hNt”auh1jÈhj�µh²hh³Nh´NubjÛ)�”}”(hhh]”(jà)�”}”(hŒ=void dma_fence_set_error (struct dma_fence *fence, int error)”h]”jæ)�”}”(hŒh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj÷jøuh1j‘hj¨ubeh}”(h]”h ]”h"]”h$]”h&]”j÷jøuh1j‹hjoh²hh³j�h´M¤ubeh}”(h]”h ]”h"]”h$]”h&]”j÷jøj2 ˆuh1jåj3 j4 hjkh²hh³j�h´M¤ubah}”(h]”jfah ]”(j8 j9 eh"]”h$]”h&]”j= ˆj> )j? huh1jßh³j�h´M¤hjhh²hubjA )�”}”(hhh]”hÌ)�”}”(hŒ$flag an error condition on the fence”h]”hŒ$flag an error condition on the fence”…”�”}”(hjhh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´M¤hjeh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j@ hjhh²hh³j�h´M¤ubeh}”(h]”h ]”(jîŒfunction”eh"]”h$]”h&]”ja jîjb j€jc j€jd ‰je ‰jf ‰uh1jÚh²hhj�µh³Nh´Nubjh )�”}”(hXë**Parameters** ``struct dma_fence *fence`` the dma_fence ``int error`` the error to store **Description** Drivers can supply an optional error status condition before they signal the fence, to indicate that the fence was completed due to an error rather than success. This must be set before signaling (so that the value is visible before any waiters on the signal callback are woken). This helper exists to help catching erroneous setting of #dma_fence.error. Examples of error codes which drivers should use: * ``-ENODATA`` This operation produced no data, no other operation affected. * ``-ECANCELED`` All operations from the same context have been canceled. * ``-ETIME`` Operation caused a timeout and potentially device reset.”h]”(hÌ)�”}”(hŒ**Parameters**”h]”jr )�”}”(hjŠh]”hŒ Parameters”…”�”}”(hjŒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hjˆubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´M¨hj„ubj´ )�”}”(hhh]”(j¹ )�”}”(hŒ*``struct dma_fence *fence`` the dma_fence ”h]”(j¿ )�”}”(hŒ``struct dma_fence *fence``”h]”jâ)�”}”(hj©h]”hŒstruct dma_fence *fence”…”�”}”(hj«h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj§ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´M¥hj£ubjÙ )�”}”(hhh]”hÌ)�”}”(hŒ the dma_fence”h]”hŒ the dma_fence”…”�”}”(hjÂh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j¾h´M¥hj¿ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hj£ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³j¾h´M¥hj ubj¹ )�”}”(hŒ!``int error`` the error to store ”h]”(j¿ )�”}”(hŒ ``int error``”h]”jâ)�”}”(hjâh]”hŒ int error”…”�”}”(hjäh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjàubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´M¦hjÜubjÙ )�”}”(hhh]”hÌ)�”}”(hŒthe error to store”h]”hŒthe error to store”…”�”}”(hjûh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j÷h´M¦hjøubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hjÜubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³j÷h´M¦hj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j³ hj„ubhÌ)�”}”(hŒ**Description**”h]”jr )�”}”(hjh]”hŒ Description”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hjubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´M¨hj„ubhÌ)�”}”(hXbDrivers can supply an optional error status condition before they signal the fence, to indicate that the fence was completed due to an error rather than success. This must be set before signaling (so that the value is visible before any waiters on the signal callback are woken). This helper exists to help catching erroneous setting of #dma_fence.error.”h]”hXbDrivers can supply an optional error status condition before they signal the fence, to indicate that the fence was completed due to an error rather than success. This must be set before signaling (so that the value is visible before any waiters on the signal callback are woken). This helper exists to help catching erroneous setting of #dma_fence.error.”…”�”}”(hj3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´M§hj„ubhÌ)�”}”(hŒ1Examples of error codes which drivers should use:”h]”hŒ1Examples of error codes which drivers should use:”…”�”}”(hjBh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´M­hj„ubhþ)�”}”(hhh]”(j)�”}”(hŒL``-ENODATA`` This operation produced no data, no other operation affected.”h]”hÌ)�”}”(hjVh]”(jâ)�”}”(hŒ ``-ENODATA``”h]”hŒ-ENODATA”…”�”}”(hj[h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjXubhŒ@ This operation produced no data, no other operation affected.”…”�”}”(hjXh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´M¯hjTubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjQubj)�”}”(hŒG``-ECANCELED`` All operations from the same context have been canceled.”h]”hÌ)�”}”(hj|h]”(jâ)�”}”(hŒ``-ECANCELED``”h]”hŒ -ECANCELED”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj~ubhŒ9 All operations from the same context have been canceled.”…”�”}”(hj~h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´M°hjzubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjQubj)�”}”(hŒG``-ETIME`` Operation caused a timeout and potentially device reset.”h]”hÌ)�”}”(hj¢h]”(jâ)�”}”(hŒ ``-ETIME``”h]”hŒ-ETIME”…”�”}”(hj§h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj¤ubhŒ= Operation caused a timeout and potentially device reset.”…”�”}”(hj¤h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´M±hj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjQubeh}”(h]”h ]”h"]”h$]”h&]”jRjguh1hýh³jsh´M¯hj„ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jg hj�µh²hh³Nh´NubjÉ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÕŒ dma_fence_timestamp (C function)”Œc.dma_fence_timestamp”hNt”auh1jÈhj�µh²hh³Nh´NubjÛ)�”}”(hhh]”(jà)�”}”(hŒ5ktime_t dma_fence_timestamp (struct dma_fence *fence)”h]”jæ)�”}”(hŒ4ktime_t dma_fence_timestamp(struct dma_fence *fence)”h]”(h)�”}”(hhh]”j )�”}”(hŒktime_t”h]”hŒktime_t”…”�”}”(hjïh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjìubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jîŒreftype”jGŒ reftarget”jñŒmodname”NŒ classname”Nj³j¶)�”}”j¹]”jO)�”}”jGŒdma_fence_timestamp”sbŒc.dma_fence_timestamp”†”asbuh1hhjèh²hh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´M¾ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjèh²hh³jh´M¾ubj )�”}”(hŒdma_fence_timestamp”h]”j )�”}”(hj h]”hŒdma_fence_timestamp”…”�”}”(hj#h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjubah}”(h]”h ]”(j' j( eh"]”h$]”h&]”j÷jøuh1j hjèh²hh³jh´M¾ubjŒ)�”}”(hŒ(struct dma_fence *fence)”h]”j’)�”}”(hŒstruct dma_fence *fence”h]”(jì)�”}”(hjïh]”hŒstruct”…”�”}”(hj>h²hh³Nh´Nubah}”(h]”h ]”jøah"]”h$]”h&]”uh1jëhj:ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjKh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj:ubh)�”}”(hhh]”j )�”}”(hŒ dma_fence”h]”hŒ dma_fence”…”�”}”(hj\h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjYubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jîŒreftype”jGŒ reftarget”j^Œmodname”NŒ classname”Nj³j¶)�”}”j¹]”j Œc.dma_fence_timestamp”†”asbuh1hhj:ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjzh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj:ubjd)�”}”(hjgh]”hŒ*”…”�”}”(hjˆh²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchj:ubj )�”}”(hŒfence”h]”hŒfence”…”�”}”(hj•h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj:ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj÷jøuh1j‘hj6ubah}”(h]”h ]”h"]”h$]”h&]”j÷jøuh1j‹hjèh²hh³jh´M¾ubeh}”(h]”h ]”h"]”h$]”h&]”j÷jøj2 ˆuh1jåj3 j4 hjäh²hh³jh´M¾ubah}”(h]”jßah ]”(j8 j9 eh"]”h$]”h&]”j= ˆj> )j? huh1jßh³jh´M¾hjáh²hubjA )�”}”(hhh]”hÌ)�”}”(hŒ1helper to get the completion timestamp of a fence”h]”hŒ1helper to get the completion timestamp of a fence”…”�”}”(hj¿h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´M¾hj¼h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j@ hjáh²hh³jh´M¾ubeh}”(h]”h ]”(jîŒfunction”eh"]”h$]”h&]”ja jîjb j×jc j×jd ‰je ‰jf ‰uh1jÚh²hhj�µh³Nh´Nubjh )�”}”(hX1**Parameters** ``struct dma_fence *fence`` fence to get the timestamp from. **Description** After a fence is signaled the timestamp is updated with the signaling time, but setting the timestamp can race with tasks waiting for the signaling. This helper busy waits for the correct timestamp to appear.”h]”(hÌ)�”}”(hŒ**Parameters**”h]”jr )�”}”(hjáh]”hŒ Parameters”…”�”}”(hjãh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hjßubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´MÂhjÛubj´ )�”}”(hhh]”j¹ )�”}”(hŒ=``struct dma_fence *fence`` fence to get the timestamp from. ”h]”(j¿ )�”}”(hŒ``struct dma_fence *fence``”h]”jâ)�”}”(hjh]”hŒstruct dma_fence *fence”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjþubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´M¿hjúubjÙ )�”}”(hhh]”hÌ)�”}”(hŒ fence to get the timestamp from.”h]”hŒ fence to get the timestamp from.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jh´M¿hjubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hjúubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³jh´M¿hj÷ubah}”(h]”h ]”h"]”h$]”h&]”uh1j³ hjÛubhÌ)�”}”(hŒ**Description**”h]”jr )�”}”(hj;h]”hŒ Description”…”�”}”(hj=h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hj9ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´MÁhjÛubhÌ)�”}”(hŒÐAfter a fence is signaled the timestamp is updated with the signaling time, but setting the timestamp can race with tasks waiting for the signaling. This helper busy waits for the correct timestamp to appear.”h]”hŒÐAfter a fence is signaled the timestamp is updated with the signaling time, but setting the timestamp can race with tasks waiting for the signaling. This helper busy waits for the correct timestamp to appear.”…”�”}”(hjQh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´MÀhjÛubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jg hj�µh²hh³Nh´NubjÉ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÕŒdma_fence_wait (C function)”Œc.dma_fence_wait”hNt”auh1jÈhj�µh²hh³Nh´NubjÛ)�”}”(hhh]”(jà)�”}”(hŒ?signed long dma_fence_wait (struct dma_fence *fence, bool intr)”h]”jæ)�”}”(hŒ>signed long dma_fence_wait(struct dma_fence *fence, bool intr)”h]”(jM)�”}”(hŒsigned”h]”hŒsigned”…”�”}”(hj€h²hh³Nh´Nubah}”(h]”h ]”jYah"]”h$]”h&]”uh1jLhj|h²hh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´MØubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj|h²hh³jŽh´MØubjM)�”}”(hŒlong”h]”hŒlong”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”jYah"]”h$]”h&]”uh1jLhj|h²hh³jŽh´MØubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj«h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj|h²hh³jŽh´MØubj )�”}”(hŒdma_fence_wait”h]”j )�”}”(hŒdma_fence_wait”h]”hŒdma_fence_wait”…”�”}”(hj½h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj¹ubah}”(h]”h ]”(j' j( eh"]”h$]”h&]”j÷jøuh1j hj|h²hh³jŽh´MØubjŒ)�”}”(hŒ$(struct dma_fence *fence, bool intr)”h]”(j’)�”}”(hŒstruct dma_fence *fence”h]”(jì)�”}”(hjïh]”hŒstruct”…”�”}”(hjÙh²hh³Nh´Nubah}”(h]”h ]”jøah"]”h$]”h&]”uh1jëhjÕubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjæh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjÕubh)�”}”(hhh]”j )�”}”(hŒ dma_fence”h]”hŒ dma_fence”…”�”}”(hj÷h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjôubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jîŒreftype”jGŒ reftarget”jùŒmodname”NŒ classname”Nj³j¶)�”}”j¹]”jO)�”}”jGj¿sbŒc.dma_fence_wait”†”asbuh1hhjÕubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjÕubjd)�”}”(hjgh]”hŒ*”…”�”}”(hj%h²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchjÕubj )�”}”(hŒfence”h]”hŒfence”…”�”}”(hj2h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjÕubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj÷jøuh1j‘hjÑubj’)�”}”(hŒ bool intr”h]”(jM)�”}”(hji5h]”hŒbool”…”�”}”(hjKh²hh³Nh´Nubah}”(h]”h ]”jYah"]”h$]”h&]”uh1jLhjGubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjXh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjGubj )�”}”(hŒintr”h]”hŒintr”…”�”}”(hjfh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjGubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj÷jøuh1j‘hjÑubeh}”(h]”h ]”h"]”h$]”h&]”j÷jøuh1j‹hj|h²hh³jŽh´MØubeh}”(h]”h ]”h"]”h$]”h&]”j÷jøj2 ˆuh1jåj3 j4 hjxh²hh³jŽh´MØubah}”(h]”jsah ]”(j8 j9 eh"]”h$]”h&]”j= ˆj> )j? huh1jßh³jŽh´MØhjuh²hubjA )�”}”(hhh]”hÌ)�”}”(hŒ#sleep until the fence gets signaled”h]”hŒ#sleep until the fence gets signaled”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´MØhj�h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j@ hjuh²hh³jŽh´MØubeh}”(h]”h ]”(jîŒfunction”eh"]”h$]”h&]”ja jîjb j¨jc j¨jd ‰je ‰jf ‰uh1jÚh²hhj�µh³Nh´Nubjh )�”}”(hX<**Parameters** ``struct dma_fence *fence`` the fence to wait on ``bool intr`` if true, do an interruptible wait **Description** This function will return -ERESTARTSYS if interrupted by a signal, or 0 if the fence was signaled. Other error values may be returned on custom implementations. Performs a synchronous wait on this fence. It is assumed the caller directly or indirectly holds a reference to the fence, otherwise the fence might be freed before return, resulting in undefined behavior. See also dma_fence_wait_timeout() and dma_fence_wait_any_timeout().”h]”(hÌ)�”}”(hŒ**Parameters**”h]”jr )�”}”(hj²h]”hŒ Parameters”…”�”}”(hj´h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hj°ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´MÜhj¬ubj´ )�”}”(hhh]”(j¹ )�”}”(hŒ1``struct dma_fence *fence`` the fence to wait on ”h]”(j¿ )�”}”(hŒ``struct dma_fence *fence``”h]”jâ)�”}”(hjÑh]”hŒstruct dma_fence *fence”…”�”}”(hjÓh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjÏubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´MÙhjËubjÙ )�”}”(hhh]”hÌ)�”}”(hŒthe fence to wait on”h]”hŒthe fence to wait on”…”�”}”(hjêh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jæh´MÙhjçubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hjËubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³jæh´MÙhjÈubj¹ )�”}”(hŒ0``bool intr`` if true, do an interruptible wait ”h]”(j¿ )�”}”(hŒ ``bool intr``”h]”jâ)�”}”(hj h]”hŒ bool intr”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´MÚhjubjÙ )�”}”(hhh]”hÌ)�”}”(hŒ!if true, do an interruptible wait”h]”hŒ!if true, do an interruptible wait”…”�”}”(hj#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jh´MÚhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hjubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³jh´MÚhjÈubeh}”(h]”h ]”h"]”h$]”h&]”uh1j³ hj¬ubhÌ)�”}”(hŒ**Description**”h]”jr )�”}”(hjEh]”hŒ Description”…”�”}”(hjGh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hjCubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´MÜhj¬ubhÌ)�”}”(hŒ This function will return -ERESTARTSYS if interrupted by a signal, or 0 if the fence was signaled. Other error values may be returned on custom implementations.”h]”hŒ This function will return -ERESTARTSYS if interrupted by a signal, or 0 if the fence was signaled. Other error values may be returned on custom implementations.”…”�”}”(hj[h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´MÛhj¬ubhÌ)�”}”(hŒÍPerforms a synchronous wait on this fence. It is assumed the caller directly or indirectly holds a reference to the fence, otherwise the fence might be freed before return, resulting in undefined behavior.”h]”hŒÍPerforms a synchronous wait on this fence. It is assumed the caller directly or indirectly holds a reference to the fence, otherwise the fence might be freed before return, resulting in undefined behavior.”…”�”}”(hjjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´Mßhj¬ubhÌ)�”}”(hŒCSee also dma_fence_wait_timeout() and dma_fence_wait_any_timeout().”h]”hŒCSee also dma_fence_wait_timeout() and dma_fence_wait_any_timeout().”…”�”}”(hjyh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´Mãhj¬ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jg hj�µh²hh³Nh´NubjÉ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÕŒdma_fence_is_array (C function)”Œc.dma_fence_is_array”hNt”auh1jÈhj�µh²hh³Nh´NubjÛ)�”}”(hhh]”(jà)�”}”(hŒ1bool dma_fence_is_array (struct dma_fence *fence)”h]”jæ)�”}”(hŒ0bool dma_fence_is_array(struct dma_fence *fence)”h]”(jM)�”}”(hji5h]”hŒbool”…”�”}”(hj¨h²hh³Nh´Nubah}”(h]”h ]”jYah"]”h$]”h&]”uh1jLhj¤h²hh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´Mýubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¶h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj¤h²hh³jµh´Mýubj •)�”}”(hŒdma_fence_is_array”h]”j )�”}”(hŒdma_fence_is_array”h]”hŒdma_fence_is_array”…”�”}”(hjÈh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjÄubah}”(h]”h ]”(j' j( eh"]”h$]”h&]”j÷jøuh1j hj¤h²hh³jµh´MýubjŒ)�”}”(hŒ(struct dma_fence *fence)”h]”j’)�”}”(hŒstruct dma_fence *fence”h]”(jì)�”}”(hjïh]”hŒstruct”…”�”}”(hjäh²hh³Nh´Nubah}”(h]”h ]”jøah"]”h$]”h&]”uh1jëhjàubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjñh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjàubh)�”}”(hhh]”j )�”}”(hŒ dma_fence”h]”hŒ dma_fence”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjÿubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jîŒreftype”jGŒ reftarget”jŒmodname”NŒ classname”Nj³j¶)�”}”j¹]”jO)�”}”jGjÊsbŒc.dma_fence_is_array”†”asbuh1hhjàubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj"h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjàubjd)�”}”(hjgh]”hŒ*”…”�”}”(hj0h²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchjàubj )�”}”(hŒfence”h]”hŒfence”…”�”}”(hj=h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjàubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj÷jøuh1j‘hjÜubah}”(h]”h ]”h"]”h$]”h&]”j÷jøuh1j‹hj¤h²hh³jµh´Mýubeh}”(h]”h ]”h"]”h$]”h&]”j÷jøj2 ˆuh1jåj3 j4 hj h²hh³jµh´Mýubah}”(h]”j›ah ]”(j8 j9 eh"]”h$]”h&]”j= ˆj> )j? huh1jßh³jµh´Mýhj�h²hubjA )�”}”(hhh]”hÌ)�”}”(hŒ+check if a fence is from the array subclass”h]”hŒ+check if a fence is from the array subclass”…”�”}”(hjgh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´Mýhjdh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j@ hj�h²hh³jµh´Mýubeh}”(h]”h ]”(jîŒfunction”eh"]”h$]”h&]”ja jîjb jjc jjd ‰je ‰jf ‰uh1jÚh²hhj�µh³Nh´Nubjh )�”}”(hŒ�**Parameters** ``struct dma_fence *fence`` the fence to test **Description** Return true if it is a dma_fence_array and false otherwise.”h]”(hÌ)�”}”(hŒ**Parameters**”h]”jr )�”}”(hj‰h]”hŒ Parameters”…”�”}”(hj‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hj‡ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´Mhjƒubj´ )�”}”(hhh]”j¹ )�”}”(hŒ.``struct dma_fence *fence`` the fence to test ”h]”(j¿ )�”}”(hŒ``struct dma_fence *fence``”h]”jâ)�”}”(hj¨h]”hŒstruct dma_fence *fence”…”�”}”(hjªh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj¦ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´Mþhj¢ubjÙ )�”}”(hhh]”hÌ)�”}”(hŒthe fence to test”h]”hŒthe fence to test”…”�”}”(hjÁh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j½h´Mþhj¾ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hj¢ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³j½h´MþhjŸubah}”(h]”h ]”h"]”h$]”h&]”uh1j³ hjƒubhÌ)�”}”(hŒ**Description**”h]”jr )�”}”(hjãh]”hŒ Description”…”�”}”(hjåh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hjáubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´MhjƒubhÌ)�”}”(hŒ;Return true if it is a dma_fence_array and false otherwise.”h]”hŒ;Return true if it is a dma_fence_array and false otherwise.”…”�”}”(hjùh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´Mÿhjƒubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jg hj�µh²hh³Nh´NubjÉ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÕŒdma_fence_is_chain (C function)”Œc.dma_fence_is_chain”hNt”auh1jÈhj�µh²hh³Nh´NubjÛ)�”}”(hhh]”(jà)�”}”(hŒ1bool dma_fence_is_chain (struct dma_fence *fence)”h]”jæ)�”}”(hŒ0bool dma_fence_is_chain(struct dma_fence *fence)”h]”(jM)�”}”(hji5h]”hŒbool”…”�”}”(hj(h²hh³Nh´Nubah}”(h]”h ]”jYah"]”h$]”h&]”uh1jLhj$h²hh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´Mubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj6h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj$h²hh³j5h´Mubj )�”}”(hŒdma_fence_is_chain”h]”j )�”}”(hŒdma_fence_is_chain”h]”hŒdma_fence_is_chain”…”�”}”(hjHh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjDubah}”(h]”h ]”(j' j( eh"]”h$]”h&]”j÷jøuh1j hj$h²hh³j5h´MubjŒ)�”}”(hŒ(struct dma_fence *fence)”h]”j’)�”}”(hŒstruct dma_fence *fence”h]”(jì)�”}”(hjïh]”hŒstruct”…”�”}”(hjdh²hh³Nh´Nubah}”(h]”h ]”jøah"]”h$]”h&]”uh1jëhj`ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjqh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj`ubh)�”}”(hhh]”j )�”}”(hŒ dma_fence”h]”hŒ dma_fence”…”�”}”(hj‚h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jîŒreftype”jGŒ reftarget”j„Œmodname”NŒ classname”Nj³j¶)�”}”j¹]”jO)�”}”jGjJsbŒc.dma_fence_is_chain”†”asbuh1hhj`ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¢h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj`ubjd)�”}”(hjgh]”hŒ*”…”�”}”(hj°h²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchj`ubj )�”}”(hŒfence”h]”hŒfence”…”�”}”(hj½h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj`ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj÷jøuh1j‘hj\ubah}”(h]”h ]”h"]”h$]”h&]”j÷jøuh1j‹hj$h²hh³j5h´Mubeh}”(h]”h ]”h"]”h$]”h&]”j÷jøj2 ˆuh1jåj3 j4 hj h²hh³j5h´Mubah}”(h]”jah ]”(j8 j9 eh"]”h$]”h&]”j= ˆj> )j? huh1jßh³j5h´Mhjh²hubjA )�”}”(hhh]”hÌ)�”}”(hŒ+check if a fence is from the chain subclass”h]”hŒ+check if a fence is from the chain subclass”…”�”}”(hjçh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´Mhjäh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j@ hjh²hh³j5h´Mubeh}”(h]”h ]”(jîŒfunction”eh"]”h$]”h&]”ja jîjb jÿjc jÿjd ‰je ‰jf ‰uh1jÚh²hhj�µh³Nh´Nubjh )�”}”(hŒ�**Parameters** ``struct dma_fence *fence`` the fence to test **Description** Return true if it is a dma_fence_chain and false otherwise.”h]”(hÌ)�”}”(hŒ**Parameters**”h]”jr )�”}”(hj h]”hŒ Parameters”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hjubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´M hjubj´ )�”}”(hhh]”j¹ )�”}”(hŒ.``struct dma_fence *fence`` the fence to test ”h]”(j¿ )�”}”(hŒ``struct dma_fence *fence``”h]”jâ)�”}”(hj(h]”hŒstruct dma_fence *fence”…”�”}”(hj*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj&ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´M hj"ubjÙ )�”}”(hhh]”hÌ)�”}”(hŒthe fence to test”h]”hŒthe fence to test”…”�”}”(hjAh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j=h´M hj>ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hj"ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³j=h´M hjubah}”(h]”h ]”h"]”h$]”h&]”uh1j³ hjubhÌ)�”}”(hŒ**Description**”h]”jr )�”}”(hjch]”hŒ Description”…”�”}”(hjeh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hjaubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´M hjubhÌ)�”}”(hŒ;Return true if it is a dma_fence_chain and false otherwise.”h]”hŒ;Return true if it is a dma_fence_chain and false otherwise.”…”�”}”(hjyh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´M hjubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jg hj�µh²hh³Nh´NubjÉ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÕŒ#dma_fence_is_container (C function)”Œc.dma_fence_is_container”hNt”auh1jÈhj�µh²hh³Nh´NubjÛ)�”}”(hhh]”(jà)�”}”(hŒ5bool dma_fence_is_container (struct dma_fence *fence)”h]”jæ)�”}”(hŒ4bool dma_fence_is_container(struct dma_fence *fence)”h]”(jM)�”}”(hji5h]”hŒbool”…”�”}”(hj¨h²hh³Nh´Nubah}”(h]”h ]”jYah"]”h$]”h&]”uh1jLhj¤h²hh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´Mubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¶h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj¤h²hh³jµh´Mubj )�”}”(hŒdma_fence_is_container”h]”j )�”}”(hŒdma_fence_is_container”h]”hŒdma_fence_is_container”…”�”}”(hjÈh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjÄubah}”(h]”h ]”(j' j( eh"]”h$]”h&]”j÷jøuh1j hj¤h²hh³jµh´MubjŒ)�”}”(hŒ(struct dma_fence *fence)”h]”j’)�”}”(hŒstruct dma_fence *fence”h]”(jì)�”}”(hjïh]”hŒstruct”…”�”}”(hjäh²hh³Nh´Nubah}”(h]”h ]”jøah"]”h$]”h&]”uh1jëhjàubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjñh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjàubh)�”}”(hhh]”j )�”}”(hŒ dma_fence”h]”hŒ dma_fence”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjÿubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jîŒreftype”jGŒ reftarget”jŒmodname”NŒ classname”Nj³j¶)�”}”j¹]”jO)�”}”jGjÊsbŒc.dma_fence_is_container”†”asbuh1hhjàubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj"h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjàubjd)�”}”(hjgh]”hŒ*”…”�”}”(hj0h²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchjàubj )�”}”(hŒfence”h]”hŒfence”…”�”}”(hj=h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjàubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj÷jøuh1j‘hjÜubah}”(h]”h ]”h"]”h$]”h&]”j÷jøuh1j‹hj¤h²hh³jµh´Mubeh}”(h]”h ]”h"]”h$]”h&]”j÷jøj2 ˆuh1jåj3 j4 hj h²hh³jµh´Mubah}”(h]”j›ah ]”(j8 j9 eh"]”h$]”h&]”j= ˆj> )j? huh1jßh³jµh´Mhj�h²hubjA )�”}”(hhh]”hÌ)�”}”(hŒ0check if a fence is a container for other fences”h]”hŒ0check if a fence is a container for other fences”…”�”}”(hjgh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´Mhjdh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j@ hj�h²hh³jµh´Mubeh}”(h]”h ]”(jîŒfunction”eh"]”h$]”h&]”ja jîjb jjc jjd ‰je ‰jf ‰uh1jÚh²hhj�µh³Nh´Nubjh )�”}”(hX"**Parameters** ``struct dma_fence *fence`` the fence to test **Description** Return true if this fence is a container for other fences, false otherwise. This is important since we can't build up large fence structure or otherwise we run into recursion during operation on those fences.”h]”(hÌ)�”}”(hŒ**Parameters**”h]”jr )�”}”(hj‰h]”hŒ Parameters”…”�”}”(hj‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hj‡ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´Mhjƒubj´ )�”}”(hhh]”j¹ )�”}”(hŒ.``struct dma_fence *fence`` the fence to test ”h]”(j¿ )�”}”(hŒ``struct dma_fence *fence``”h]”jâ)�”}”(hj¨h]”hŒstruct dma_fence *fence”…”�”}”(hjªh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj¦ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´Mhj¢ubjÙ )�”}”(hhh]”hÌ)�”}”(hŒthe fence to test”h]”hŒthe fence to test”…”�”}”(hjÁh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j½h´Mhj¾ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hj¢ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³j½h´MhjŸubah}”(h]”h ]”h"]”h$]”h&]”uh1j³ hjƒubhÌ)�”}”(hŒ**Description**”h]”jr )�”}”(hjãh]”hŒ Description”…”�”}”(hjåh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hjáubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´MhjƒubhÌ)�”}”(hŒÐReturn true if this fence is a container for other fences, false otherwise. This is important since we can't build up large fence structure or otherwise we run into recursion during operation on those fences.”h]”hŒÒReturn true if this fence is a container for other fences, false otherwise. This is important since we can’t build up large fence structure or otherwise we run into recursion during operation on those fences.”…”�”}”(hjùh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:190: ./include/linux/dma-fence.h”h´Mhjƒubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jg hj�µh²hh³Nh´Nubeh}”(h]”Œdma-fences-functions-reference”ah ]”h"]”Œdma fences functions reference”ah$]”h&]”uh1hµhjš­h²hh³hÊh´K¹ubh¶)�”}”(hhh]”(h»)�”}”(hŒDMA Fence Array”h]”hŒDMA Fence Array”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjh²hh³hÊh´KÂubjÉ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÕŒ"dma_fence_array_alloc (C function)”Œc.dma_fence_array_alloc”hNt”auh1jÈhjh²hh³Nh´NubjÛ)�”}”(hhh]”(jà)�”}”(hŒ?struct dma_fence_array * dma_fence_array_alloc (int num_fences)”h]”jæ)�”}”(hŒ=struct dma_fence_array *dma_fence_array_alloc(int num_fences)”h]”(jì)�”}”(hjïh]”hŒstruct”…”�”}”(hjAh²hh³Nh´Nubah}”(h]”h ]”jøah"]”h$]”h&]”uh1jëhj=h²hh³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:196: ./drivers/dma-buf/dma-fence-array.c”h´K­ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjOh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj=h²hh³jNh´K­ubh)�”}”(hhh]”j )�”}”(hŒdma_fence_array”h]”hŒdma_fence_array”…”�”}”(hj`h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj]ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jîŒreftype”jGŒ reftarget”jbŒmodname”NŒ classname”Nj³j¶)�”}”j¹]”jO)�”}”jGŒdma_fence_array_alloc”sbŒc.dma_fence_array_alloc”†”asbuh1hhj=h²hh³jNh´K­ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj=h²hh³jNh´K­ubjd)�”}”(hjgh]”hŒ*”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchj=h²hh³jNh´K­ubj )�”}”(hŒdma_fence_array_alloc”h]”j )�”}”(hj~h]”hŒdma_fence_array_alloc”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjœubah}”(h]”h ]”(j' j( eh"]”h$]”h&]”j÷jøuh1j hj=h²hh³jNh´K­ubjŒ)�”}”(hŒ(int num_fences)”h]”j’)�”}”(hŒint num_fences”h]”(jM)�”}”(hŒint”h]”hŒint”…”�”}”(hj»h²hh³Nh´Nubah}”(h]”h ]”jYah"]”h$]”h&]”uh1jLhj·ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÉh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj·ubj )�”}”(hŒ num_fences”h]”hŒ num_fences”…”�”}”(hj×h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj·ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj÷jøuh1j‘hj³ubah}”(h]”h ]”h"]”h$]”h&]”j÷jøuh1j‹hj=h²hh³jNh´K­ubeh}”(h]”h ]”h"]”h$]”h&]”j÷jøj2 ˆuh1jåj3 j4 hj9h²hh³jNh´K­ubah}”(h]”j4ah ]”(j8 j9 eh"]”h$]”h&]”j= ˆj> )j? huh1jßh³jNh´K­hj6h²hubjA )�”}”(hhh]”hÌ)�”}”(hŒAllocate a custom fence array”h]”hŒAllocate a custom fence array”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:196: ./drivers/dma-buf/dma-fence-array.c”h´K­hjþh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j@ hj6h²hh³jNh´K­ubeh}”(h]”h ]”(jîŒfunction”eh"]”h$]”h&]”ja jîjb jjc jjd ‰je ‰jf ‰uh1jÚh²hhjh³Nh´Nubjh )�”}”(hŒ–**Parameters** ``int num_fences`` [in] number of fences to add in the array **Description** Return dma fence array on success, NULL on failure”h]”(hÌ)�”}”(hŒ**Parameters**”h]”jr )�”}”(hj#h]”hŒ Parameters”…”�”}”(hj%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hj!ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:196: ./drivers/dma-buf/dma-fence-array.c”h´K±hjubj´ )�”}”(hhh]”j¹ )�”}”(hŒ@``int num_fences`` [in] number of fences to add in the array ”h]”(j¿ )�”}”(hŒ``int num_fences``”h]”jâ)�”}”(hjBh]”hŒint num_fences”…”�”}”(hjDh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj@ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:196: ./drivers/dma-buf/dma-fence-array.c”h´K®hj<ubjÙ )�”}”(hhh]”hÌ)�”}”(hŒ,[in] number of fences to add in the array”h]”hŒ,[in] number of fences to add in the array”…”�”}”(hj[h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jWh´K®hjXubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hj<ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³jWh´K®hj9ubah}”(h]”h ]”h"]”h$]”h&]”uh1j³ hjubhÌ)�”}”(hŒ**Description**”h]”jr )�”}”(hj}h]”hŒ Description”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hj{ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:196: ./drivers/dma-buf/dma-fence-array.c”h´K°hjubhÌ)�”}”(hŒ2Return dma fence array on success, NULL on failure”h]”hŒ2Return dma fence array on success, NULL on failure”…”�”}”(hj“h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:196: ./drivers/dma-buf/dma-fence-array.c”h´K¯hjubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jg hjh²hh³Nh´NubjÉ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÕŒ!dma_fence_array_init (C function)”Œc.dma_fence_array_init”hNt”auh1jÈhjh²hh³Nh´NubjÛ)�”}”(hhh]”(jà)�”}”(hŒ�void dma_fence_array_init (struct dma_fence_array *array, int num_fences, struct dma_fence **fences, u64 context, unsigned seqno)”h]”jæ)�”}”(hŒ€void dma_fence_array_init(struct dma_fence_array *array, int num_fences, struct dma_fence **fences, u64 context, unsigned seqno)”h]”(jM)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjÂh²hh³Nh´Nubah}”(h]”h ]”jYah"]”h$]”h&]”uh1jLhj¾h²hh³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:196: ./drivers/dma-buf/dma-fence-array.c”h´K»ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÑh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj¾h²hh³jÐh´K»ubj )�”}”(hŒdma_fence_array_init”h]”j )�”}”(hŒdma_fence_array_init”h]”hŒdma_fence_array_init”…”�”}”(hjãh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjßubah}”(h]”h ]”(j' j( eh"]”h$]”h&]”j÷jøuh1j hj¾h²hh³jÐh´K»ubjŒ)�”}”(hŒg(struct dma_fence_array *array, int num_fences, struct dma_fence **fences, u64 context, unsigned seqno)”h]”(j’)�”}”(hŒstruct dma_fence_array *array”h]”(jì)�”}”(hjïh]”hŒstruct”…”�”}”(hjÿh²hh³Nh´Nubah}”(h]”h ]”jøah"]”h$]”h&]”uh1jëhjûubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjûubh)�”}”(hhh]”j )�”}”(hŒdma_fence_array”h]”hŒdma_fence_array”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jîŒreftype”jGŒ reftarget”j Œmodname”NŒ classname”Nj³j¶)�”}”j¹]”jO)�”}”jGjåsbŒc.dma_fence_array_init”†”asbuh1hhjûubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj= h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjûubjd)�”}”(hjgh]”hŒ*”…”�”}”(hjK h²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchjûubj )�”}”(hŒarray”h]”hŒarray”…”�”}”(hjX h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjûubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj÷jøuh1j‘hj÷ubj’)�”}”(hŒint num_fences”h]”(jM)�”}”(hŒint”h]”hŒint”…”�”}”(hjq h²hh³Nh´Nubah}”(h]”h ]”jYah"]”h$]”h&]”uh1jLhjm ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjm ubj )�”}”(hŒ num_fences”h]”hŒ num_fences”…”�”}”(hj� h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjm ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj÷jøuh1j‘hj÷ubj’)�”}”(hŒstruct dma_fence **fences”h]”(jì)�”}”(hjïh]”hŒstruct”…”�”}”(hj¦ h²hh³Nh´Nubah}”(h]”h ]”jøah"]”h$]”h&]”uh1jëhj¢ ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj³ h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj¢ ubh)�”}”(hhh]”j )�”}”(hŒ dma_fence”h]”hŒ dma_fence”…”�”}”(hjÄ h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjÁ ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jîŒreftype”jGŒ reftarget”jÆ Œmodname”NŒ classname”Nj³j¶)�”}”j¹]”j9 Œc.dma_fence_array_init”†”asbuh1hhj¢ ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjâ h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj¢ ubjd)�”}”(hjgh]”hŒ*”…”�”}”(hjð h²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchj¢ ubjd)�”}”(hjgh]”hŒ*”…”�”}”(hjý h²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchj¢ ubj )�”}”(hŒfences”h]”hŒfences”…”�”}”(hj !h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj¢ ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj÷jøuh1j‘hj÷ubj’)�”}”(hŒ u64 context”h]”(h)�”}”(hhh]”j )�”}”(hŒu64”h]”hŒu64”…”�”}”(hj&!h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj#!ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jîŒreftype”jGŒ reftarget”j(!Œmodname”NŒ classname”Nj³j¶)�”}”j¹]”j9 Œc.dma_fence_array_init”†”asbuh1hhj!ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjD!h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj!ubj )�”}”(hŒcontext”h]”hŒcontext”…”�”}”(hjR!h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj!ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj÷jøuh1j‘hj÷ubj’)�”}”(hŒunsigned seqno”h]”(jM)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjk!h²hh³Nh´Nubah}”(h]”h ]”jYah"]”h$]”h&]”uh1jLhjg!ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjy!h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjg!ubj )�”}”(hŒseqno”h]”hŒseqno”…”�”}”(hj‡!h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjg!ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj÷jøuh1j‘hj÷ubeh}”(h]”h ]”h"]”h$]”h&]”j÷jøuh1j‹hj¾h²hh³jÐh´K»ubeh}”(h]”h ]”h"]”h$]”h&]”j÷jøj2 ˆuh1jåj3 j4 hjºh²hh³jÐh´K»ubah}”(h]”jµah ]”(j8 j9 eh"]”h$]”h&]”j= ˆj> )j? huh1jßh³jÐh´K»hj·h²hubjA )�”}”(hhh]”hÌ)�”}”(hŒInit a custom fence array”h]”hŒInit a custom fence array”…”�”}”(hj±!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:196: ./drivers/dma-buf/dma-fence-array.c”h´K»hj®!h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j@ hj·h²hh³jÐh´K»ubeh}”(h]”h ]”(jîŒfunction”eh"]”h$]”h&]”ja jîjb jÉ!jc jÉ!jd ‰je ‰jf ‰uh1jÚh²hhjh³Nh´Nubjh )�”}”(hXï**Parameters** ``struct dma_fence_array *array`` [in] dma fence array to arm ``int num_fences`` [in] number of fences to add in the array ``struct dma_fence **fences`` [in] array containing the fences ``u64 context`` [in] fence context to use ``unsigned seqno`` [in] sequence number to use **Description** Implementation of **dma_fence_array_create** without allocation. Useful to init a preallocated dma fence array in the path of reclaim or dma fence signaling.”h]”(hÌ)�”}”(hŒ**Parameters**”h]”jr )�”}”(hjÓ!h]”hŒ Parameters”…”�”}”(hjÕ!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hjÑ!ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:196: ./drivers/dma-buf/dma-fence-array.c”h´K¿hjÍ!ubj´ )�”}”(hhh]”(j¹ )�”}”(hŒA``struct dma_fence_array *array`` [in] dma fence array to arm ”h]”(j¿ )�”}”(hŒ!``struct dma_fence_array *array``”h]”jâ)�”}”(hjò!h]”hŒstruct dma_fence_array *array”…”�”}”(hjô!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjð!ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:196: ./drivers/dma-buf/dma-fence-array.c”h´K¼hjì!ubjÙ )�”}”(hhh]”hÌ)�”}”(hŒ[in] dma fence array to arm”h]”hŒ[in] dma fence array to arm”…”�”}”(hj "h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j"h´K¼hj"ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hjì!ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³j"h´K¼hjé!ubj¹ )�”}”(hŒ@``int num_fences`` [in] number of fences to add in the array ”h]”(j¿ )�”}”(hŒ``int num_fences``”h]”jâ)�”}”(hj+"h]”hŒint num_fences”…”�”}”(hj-"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj)"ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:196: ./drivers/dma-buf/dma-fence-array.c”h´K½hj%"ubjÙ )�”}”(hhh]”hÌ)�”}”(hŒ,[in] number of fences to add in the array”h]”hŒ,[in] number of fences to add in the array”…”�”}”(hjD"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j@"h´K½hjA"ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hj%"ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³j@"h´K½hjé!ubj¹ )�”}”(hŒB``struct dma_fence **fences`` [in] array containing the fences ”h]”(j¿ )�”}”(hŒ``struct dma_fence **fences``”h]”jâ)�”}”(hjd"h]”hŒstruct dma_fence **fences”…”�”}”(hjf"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjb"ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:196: ./drivers/dma-buf/dma-fence-array.c”h´K¾hj^"ubjÙ )�”}”(hhh]”hÌ)�”}”(hŒ#[in] array containing the fences”h]”hŒ#[in] array containing the fences”…”�”}”(hj}"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jy"h´K¾hjz"ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hj^"ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³jy"h´K¾hjé!ubj¹ )�”}”(hŒ-``u64 context`` [in] fence context to use ”h]”(j¿ )�”}”(hŒ``u64 context``”h]”jâ)�”}”(hj�"h]”hŒ u64 context”…”�”}”(hjŸ"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj›"ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:196: ./drivers/dma-buf/dma-fence-array.c”h´K¿hj—"ubjÙ )�”}”(hhh]”hÌ)�”}”(hŒ[in] fence context to use”h]”hŒ[in] fence context to use”…”�”}”(hj¶"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j²"h´K¿hj³"ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hj—"ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³j²"h´K¿hjé!ubj¹ )�”}”(hŒ2``unsigned seqno`` [in] sequence number to use ”h]”(j¿ )�”}”(hŒ``unsigned seqno``”h]”jâ)�”}”(hjÖ"h]”hŒunsigned seqno”…”�”}”(hjØ"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjÔ"ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:196: ./drivers/dma-buf/dma-fence-array.c”h´KÀhjÐ"ubjÙ )�”}”(hhh]”hÌ)�”}”(hŒ[in] sequence number to use”h]”hŒ[in] sequence number to use”…”�”}”(hjï"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jë"h´KÀhjì"ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hjÐ"ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³jë"h´KÀhjé!ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j³ hjÍ!ubhÌ)�”}”(hŒ**Description**”h]”jr )�”}”(hj#h]”hŒ Description”…”�”}”(hj#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hj#ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:196: ./drivers/dma-buf/dma-fence-array.c”h´KÂhjÍ!ubhÌ)�”}”(hŒ�Implementation of **dma_fence_array_create** without allocation. Useful to init a preallocated dma fence array in the path of reclaim or dma fence signaling.”h]”(hŒImplementation of ”…”�”}”(hj'#h²hh³Nh´Nubjr )�”}”(hŒ**dma_fence_array_create**”h]”hŒdma_fence_array_create”…”�”}”(hj/#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hj'#ubhŒq without allocation. Useful to init a preallocated dma fence array in the path of reclaim or dma fence signaling.”…”�”}”(hj'#h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:196: ./drivers/dma-buf/dma-fence-array.c”h´KÁhjÍ!ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jg hjh²hh³Nh´NubjÉ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÕŒ#dma_fence_array_create (C function)”Œc.dma_fence_array_create”hNt”auh1jÈhjh²hh³Nh´NubjÛ)�”}”(hhh]”(jà)�”}”(hŒxstruct dma_fence_array * dma_fence_array_create (int num_fences, struct dma_fence **fences, u64 context, unsigned seqno)”h]”jæ)�”}”(hŒvstruct dma_fence_array *dma_fence_array_create(int num_fences, struct dma_fence **fences, u64 context, unsigned seqno)”h]”(jì)�”}”(hjïh]”hŒstruct”…”�”}”(hjh#h²hh³Nh´Nubah}”(h]”h ]”jøah"]”h$]”h&]”uh1jëhjd#h²hh³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:196: ./drivers/dma-buf/dma-fence-array.c”h´Kõubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjv#h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjd#h²hh³ju#h´Kõubh)�”}”(hhh]”j )�”}”(hŒdma_fence_array”h]”hŒdma_fence_array”…”�”}”(hj‡#h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj„#ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jîŒreftype”jGŒ reftarget”j‰#Œmodname”NŒ classname”Nj³j¶)�”}”j¹]”jO)�”}”jGŒdma_fence_array_create”sbŒc.dma_fence_array_create”†”asbuh1hhjd#h²hh³ju#h´Kõubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¨#h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjd#h²hh³ju#h´Kõubjd)�”}”(hjgh]”hŒ*”…”�”}”(hj¶#h²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchjd#h²hh³ju#h´Kõubj )�”}”(hŒdma_fence_array_create”h]”j )�”}”(hj¥#h]”hŒdma_fence_array_create”…”�”}”(hjÇ#h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjÃ#ubah}”(h]”h ]”(j' j( eh"]”h$]”h&]”j÷jøuh1j hjd#h²hh³ju#h´KõubjŒ)�”}”(hŒH(int num_fences, struct dma_fence **fences, u64 context, unsigned seqno)”h]”(j’)�”}”(hŒint num_fences”h]”(jM)�”}”(hŒint”h]”hŒint”…”�”}”(hjâ#h²hh³Nh´Nubah}”(h]”h ]”jYah"]”h$]”h&]”uh1jLhjÞ#ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjð#h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjÞ#ubj )�”}”(hŒ num_fences”h]”hŒ num_fences”…”�”}”(hjþ#h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjÞ#ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj÷jøuh1j‘hjÚ#ubj’)�”}”(hŒstruct dma_fence **fences”h]”(jì)�”}”(hjïh]”hŒstruct”…”�”}”(hj$h²hh³Nh´Nubah}”(h]”h ]”jøah"]”h$]”h&]”uh1jëhj$ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj$$h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj$ubh)�”}”(hhh]”j )�”}”(hŒ dma_fence”h]”hŒ dma_fence”…”�”}”(hj5$h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj2$ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jîŒreftype”jGŒ reftarget”j7$Œmodname”NŒ classname”Nj³j¶)�”}”j¹]”j£#Œc.dma_fence_array_create”†”asbuh1hhj$ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjS$h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj$ubjd)�”}”(hjgh]”hŒ*”…”�”}”(hja$h²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchj$ubjd)�”}”(hjgh]”hŒ*”…”�”}”(hjn$h²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchj$ubj )�”}”(hŒfences”h]”hŒfences”…”�”}”(hj{$h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj$ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj÷jøuh1j‘hjÚ#ubj’)�”}”(hŒ u64 context”h]”(h)�”}”(hhh]”j )�”}”(hŒu64”h]”hŒu64”…”�”}”(hj—$h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj”$ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jîŒreftype”jGŒ reftarget”j™$Œmodname”NŒ classname”Nj³j¶)�”}”j¹]”j£#Œc.dma_fence_array_create”†”asbuh1hhj�$ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjµ$h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj�$ubj )�”}”(hŒcontext”h]”hŒcontext”…”�”}”(hjÃ$h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj�$ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj÷jøuh1j‘hjÚ#ubj’)�”}”(hŒunsigned seqno”h]”(jM)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjÜ$h²hh³Nh´Nubah}”(h]”h ]”jYah"]”h$]”h&]”uh1jLhjØ$ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjê$h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjØ$ubj )�”}”(hŒseqno”h]”hŒseqno”…”�”}”(hjø$h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjØ$ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj÷jøuh1j‘hjÚ#ubeh}”(h]”h ]”h"]”h$]”h&]”j÷jøuh1j‹hjd#h²hh³ju#h´Kõubeh}”(h]”h ]”h"]”h$]”h&]”j÷jøj2 ˆuh1jåj3 j4 hj`#h²hh³ju#h´Kõubah}”(h]”j[#ah ]”(j8 j9 eh"]”h$]”h&]”j= ˆj> )j? huh1jßh³ju#h´Kõhj]#h²hubjA )�”}”(hhh]”hÌ)�”}”(hŒCreate a custom fence array”h]”hŒCreate a custom fence array”…”�”}”(hj"%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:196: ./drivers/dma-buf/dma-fence-array.c”h´Kõhj%h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j@ hj]#h²hh³ju#h´Kõubeh}”(h]”h ]”(jîŒfunction”eh"]”h$]”h&]”ja jîjb j:%jc j:%jd ‰je ‰jf ‰uh1jÚh²hhjh³Nh´Nubjh )�”}”(hXí**Parameters** ``int num_fences`` [in] number of fences to add in the array ``struct dma_fence **fences`` [in] array containing the fences ``u64 context`` [in] fence context to use ``unsigned seqno`` [in] sequence number to use **Description** Allocate a dma_fence_array object and initialize the base fence with dma_fence_init(). In case of error it returns NULL. The caller should allocate the fences array with num_fences size and fill it with the fences it wants to add to the object. Ownership of this array is taken and dma_fence_put() is used on each fence on release. If **signal_on_any** is true the fence array signals if any fence in the array signals, otherwise it signals when all fences in the array signal.”h]”(hÌ)�”}”(hŒ**Parameters**”h]”jr )�”}”(hjD%h]”hŒ Parameters”…”�”}”(hjF%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hjB%ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:196: ./drivers/dma-buf/dma-fence-array.c”h´Kùhj>%ubj´ )�”}”(hhh]”(j¹ )�”}”(hŒ@``int num_fences`` [in] number of fences to add in the array ”h]”(j¿ )�”}”(hŒ``int num_fences``”h]”jâ)�”}”(hjc%h]”hŒint num_fences”…”�”}”(hje%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhja%ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:196: ./drivers/dma-buf/dma-fence-array.c”h´Köhj]%ubjÙ )�”}”(hhh]”hÌ)�”}”(hŒ,[in] number of fences to add in the array”h]”hŒ,[in] number of fences to add in the array”…”�”}”(hj|%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jx%h´Köhjy%ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hj]%ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³jx%h´KöhjZ%ubj¹ )�”}”(hŒB``struct dma_fence **fences`` [in] array containing the fences ”h]”(j¿ )�”}”(hŒ``struct dma_fence **fences``”h]”jâ)�”}”(hjœ%h]”hŒstruct dma_fence **fences”…”�”}”(hjž%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjš%ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:196: ./drivers/dma-buf/dma-fence-array.c”h´K÷hj–%ubjÙ )�”}”(hhh]”hÌ)�”}”(hŒ#[in] array containing the fences”h]”hŒ#[in] array containing the fences”…”�”}”(hjµ%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j±%h´K÷hj²%ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hj–%ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³j±%h´K÷hjZ%ubj¹ )�”}”(hŒ-``u64 context`` [in] fence context to use ”h]”(j¿ )�”}”(hŒ``u64 context``”h]”jâ)�”}”(hjÕ%h]”hŒ u64 context”…”�”}”(hj×%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjÓ%ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:196: ./drivers/dma-buf/dma-fence-array.c”h´KøhjÏ%ubjÙ )�”}”(hhh]”hÌ)�”}”(hŒ[in] fence context to use”h]”hŒ[in] fence context to use”…”�”}”(hjî%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jê%h´Køhjë%ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hjÏ%ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³jê%h´KøhjZ%ubj¹ )�”}”(hŒ2``unsigned seqno`` [in] sequence number to use ”h]”(j¿ )�”}”(hŒ``unsigned seqno``”h]”jâ)�”}”(hj&h]”hŒunsigned seqno”…”�”}”(hj&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj &ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:196: ./drivers/dma-buf/dma-fence-array.c”h´Kùhj&ubjÙ )�”}”(hhh]”hÌ)�”}”(hŒ[in] sequence number to use”h]”hŒ[in] sequence number to use”…”�”}”(hj'&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j#&h´Kùhj$&ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hj&ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³j#&h´KùhjZ%ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j³ hj>%ubhÌ)�”}”(hŒ**Description**”h]”jr )�”}”(hjI&h]”hŒ Description”…”�”}”(hjK&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hjG&ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:196: ./drivers/dma-buf/dma-fence-array.c”h´Kûhj>%ubhÌ)�”}”(hŒxAllocate a dma_fence_array object and initialize the base fence with dma_fence_init(). In case of error it returns NULL.”h]”hŒxAllocate a dma_fence_array object and initialize the base fence with dma_fence_init(). In case of error it returns NULL.”…”�”}”(hj_&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:196: ./drivers/dma-buf/dma-fence-array.c”h´Kúhj>%ubhÌ)�”}”(hŒÒThe caller should allocate the fences array with num_fences size and fill it with the fences it wants to add to the object. Ownership of this array is taken and dma_fence_put() is used on each fence on release.”h]”hŒÒThe caller should allocate the fences array with num_fences size and fill it with the fences it wants to add to the object. Ownership of this array is taken and dma_fence_put() is used on each fence on release.”…”�”}”(hjn&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:196: ./drivers/dma-buf/dma-fence-array.c”h´Kþhj>%ubhÌ)�”}”(hŒ‘If **signal_on_any** is true the fence array signals if any fence in the array signals, otherwise it signals when all fences in the array signal.”h]”(hŒIf ”…”�”}”(hj}&h²hh³Nh´Nubjr )�”}”(hŒ**signal_on_any**”h]”hŒ signal_on_any”…”�”}”(hj…&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hj}&ubhŒ} is true the fence array signals if any fence in the array signals, otherwise it signals when all fences in the array signal.”…”�”}”(hj}&h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:196: ./drivers/dma-buf/dma-fence-array.c”h´Mhj>%ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jg hjh²hh³Nh´NubjÉ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÕŒ$dma_fence_match_context (C function)”Œc.dma_fence_match_context”hNt”auh1jÈhjh²hh³Nh´NubjÛ)�”}”(hhh]”(jà)�”}”(hŒCbool dma_fence_match_context (struct dma_fence *fence, u64 context)”h]”jæ)�”}”(hŒBbool dma_fence_match_context(struct dma_fence *fence, u64 context)”h]”(jM)�”}”(hji5h]”hŒbool”…”�”}”(hj¾&h²hh³Nh´Nubah}”(h]”h ]”jYah"]”h$]”h&]”uh1jLhjº&h²hh³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:196: ./drivers/dma-buf/dma-fence-array.c”h´Mubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÌ&h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjº&h²hh³jË&h´Mubj )�”}”(hŒdma_fence_match_context”h]”j )�”}”(hŒdma_fence_match_context”h]”hŒdma_fence_match_context”…”�”}”(hjÞ&h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjÚ&ubah}”(h]”h ]”(j' j( eh"]”h$]”h&]”j÷jøuh1j hjº&h²hh³jË&h´MubjŒ)�”}”(hŒ&(struct dma_fence *fence, u64 context)”h]”(j’)�”}”(hŒstruct dma_fence *fence”h]”(jì)�”}”(hjïh]”hŒstruct”…”�”}”(hjú&h²hh³Nh´Nubah}”(h]”h ]”jøah"]”h$]”h&]”uh1jëhjö&ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj'h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjö&ubh)�”}”(hhh]”j )�”}”(hŒ dma_fence”h]”hŒ dma_fence”…”�”}”(hj'h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj'ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jîŒreftype”jGŒ reftarget”j'Œmodname”NŒ classname”Nj³j¶)�”}”j¹]”jO)�”}”jGjà&sbŒc.dma_fence_match_context”†”asbuh1hhjö&ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj8'h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjö&ubjd)�”}”(hjgh]”hŒ*”…”�”}”(hjF'h²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchjö&ubj )�”}”(hŒfence”h]”hŒfence”…”�”}”(hjS'h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjö&ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj÷jøuh1j‘hjò&ubj’)�”}”(hŒ u64 context”h]”(h)�”}”(hhh]”j )�”}”(hŒu64”h]”hŒu64”…”�”}”(hjo'h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjl'ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jîŒreftype”jGŒ reftarget”jq'Œmodname”NŒ classname”Nj³j¶)�”}”j¹]”j4'Œc.dma_fence_match_context”†”asbuh1hhjh'ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�'h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjh'ubj )�”}”(hŒcontext”h]”hŒcontext”…”�”}”(hj›'h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjh'ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj÷jøuh1j‘hjò&ubeh}”(h]”h ]”h"]”h$]”h&]”j÷jøuh1j‹hjº&h²hh³jË&h´Mubeh}”(h]”h ]”h"]”h$]”h&]”j÷jøj2 ˆuh1jåj3 j4 hj¶&h²hh³jË&h´Mubah}”(h]”j±&ah ]”(j8 j9 eh"]”h$]”h&]”j= ˆj> )j? huh1jßh³jË&h´Mhj³&h²hubjA )�”}”(hhh]”hÌ)�”}”(hŒ.Check if all fences are from the given context”h]”hŒ.Check if all fences are from the given context”…”�”}”(hjÅ'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:196: ./drivers/dma-buf/dma-fence-array.c”h´MhjÂ'h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j@ hj³&h²hh³jË&h´Mubeh}”(h]”h ]”(jîŒfunction”eh"]”h$]”h&]”ja jîjb jÝ'jc jÝ'jd ‰je ‰jf ‰uh1jÚh²hhjh³Nh´Nubjh )�”}”(hX=**Parameters** ``struct dma_fence *fence`` [in] fence or fence array ``u64 context`` [in] fence context to check all fences against **Description** Checks the provided fence or, for a fence array, all fences in the array against the given context. Returns false if any fence is from a different context.”h]”(hÌ)�”}”(hŒ**Parameters**”h]”jr )�”}”(hjç'h]”hŒ Parameters”…”�”}”(hjé'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hjå'ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:196: ./drivers/dma-buf/dma-fence-array.c”h´Mhjá'ubj´ )�”}”(hhh]”(j¹ )�”}”(hŒ9``struct dma_fence *fence`` [in] fence or fence array ”h]”(j¿ )�”}”(hŒ``struct dma_fence *fence``”h]”jâ)�”}”(hj(h]”hŒstruct dma_fence *fence”…”�”}”(hj(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj(ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:196: ./drivers/dma-buf/dma-fence-array.c”h´Mhj(ubjÙ )�”}”(hhh]”hÌ)�”}”(hŒ[in] fence or fence array”h]”hŒ[in] fence or fence array”…”�”}”(hj(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j(h´Mhj(ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hj(ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³j(h´Mhjý'ubj¹ )�”}”(hŒB``u64 context`` [in] fence context to check all fences against ”h]”(j¿ )�”}”(hŒ``u64 context``”h]”jâ)�”}”(hj?(h]”hŒ u64 context”…”�”}”(hjA(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj=(ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:196: ./drivers/dma-buf/dma-fence-array.c”h´Mhj9(ubjÙ )�”}”(hhh]”hÌ)�”}”(hŒ1[in] fence context to check all fences against”h]”hŒ1[in] fence context to check all fences against”…”�”}”(hjX(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jT(h´MhjU(ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hj9(ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³jT(h´Mhjý'ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j³ hjá'ubhÌ)�”}”(hŒ**Description**”h]”jr )�”}”(hjz(h]”hŒ Description”…”�”}”(hj|(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hjx(ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:196: ./drivers/dma-buf/dma-fence-array.c”h´Mhjá'ubhÌ)�”}”(hŒ›Checks the provided fence or, for a fence array, all fences in the array against the given context. Returns false if any fence is from a different context.”h]”hŒ›Checks the provided fence or, for a fence array, all fences in the array against the given context. Returns false if any fence is from a different context.”…”�”}”(hj�(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:196: ./drivers/dma-buf/dma-fence-array.c”h´Mhjá'ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jg hjh²hh³Nh´NubjÉ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÕŒdma_fence_array_cb (C struct)”Œc.dma_fence_array_cb”hNt”auh1jÈhjh²hh³Nh´NubjÛ)�”}”(hhh]”(jà)�”}”(hŒdma_fence_array_cb”h]”jæ)�”}”(hŒstruct dma_fence_array_cb”h]”(jì)�”}”(hjïh]”hŒstruct”…”�”}”(hj¿(h²hh³Nh´Nubah}”(h]”h ]”jøah"]”h$]”h&]”uh1jëhj»(h²hh³Œc/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:199: ./include/linux/dma-fence-array.h”h´Kubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÍ(h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj»(h²hh³jÌ(h´Kubj )�”}”(hŒdma_fence_array_cb”h]”j )�”}”(hj¹(h]”hŒdma_fence_array_cb”…”�”}”(hjß(h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjÛ(ubah}”(h]”h ]”(j' j( eh"]”h$]”h&]”j÷jøuh1j hj»(h²hh³jÌ(h´Kubeh}”(h]”h ]”h"]”h$]”h&]”j÷jøj2 ˆuh1jåj3 j4 hj·(h²hh³jÌ(h´Kubah}”(h]”j²(ah ]”(j8 j9 eh"]”h$]”h&]”j= ˆj> )j? huh1jßh³jÌ(h´Khj´(h²hubjA )�”}”(hhh]”hÌ)�”}”(hŒcallback helper for fence array”h]”hŒcallback helper for fence array”…”�”}”(hj)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œc/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:199: ./include/linux/dma-fence-array.h”h´Khjþ(h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j@ hj´(h²hh³jÌ(h´Kubeh}”(h]”h ]”(jîŒstruct”eh"]”h$]”h&]”ja jîjb j)jc j)jd ‰je ‰jf ‰uh1jÚh²hhjh³Nh´Nubjh )�”}”(hŒí**Definition**:: struct dma_fence_array_cb { struct dma_fence_cb cb; struct dma_fence_array *array; }; **Members** ``cb`` fence callback structure for signaling ``array`` reference to the parent fence array object”h]”(hÌ)�”}”(hŒ**Definition**::”h]”(jr )�”}”(hŒ**Definition**”h]”hŒ Definition”…”�”}”(hj%)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hj!)ubhŒ:”…”�”}”(hj!)h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œc/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:199: ./include/linux/dma-fence-array.h”h´Khj)ubjè)�”}”(hŒ]struct dma_fence_array_cb { struct dma_fence_cb cb; struct dma_fence_array *array; };”h]”hŒ]struct dma_fence_array_cb { struct dma_fence_cb cb; struct dma_fence_array *array; };”…”�”}”hj>)sbah}”(h]”h ]”h"]”h$]”h&]”j÷jøuh1jçh³Œc/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:199: ./include/linux/dma-fence-array.h”h´Khj)ubhÌ)�”}”(hŒ **Members**”h]”jr )�”}”(hjO)h]”hŒMembers”…”�”}”(hjQ)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hjM)ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œc/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:199: ./include/linux/dma-fence-array.h”h´Khj)ubj´ )�”}”(hhh]”(j¹ )�”}”(hŒ.``cb`` fence callback structure for signaling ”h]”(j¿ )�”}”(hŒ``cb``”h]”jâ)�”}”(hjn)h]”hŒcb”…”�”}”(hjp)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjl)ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œc/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:199: ./include/linux/dma-fence-array.h”h´Khjh)ubjÙ )�”}”(hhh]”hÌ)�”}”(hŒ&fence callback structure for signaling”h]”hŒ&fence callback structure for signaling”…”�”}”(hj‡)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jƒ)h´Khj„)ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hjh)ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³jƒ)h´Khje)ubj¹ )�”}”(hŒ4``array`` reference to the parent fence array object”h]”(j¿ )�”}”(hŒ ``array``”h]”jâ)�”}”(hj§)h]”hŒarray”…”�”}”(hj©)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj¥)ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œc/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:199: ./include/linux/dma-fence-array.h”h´Khj¡)ubjÙ )�”}”(hhh]”hÌ)�”}”(hŒ*reference to the parent fence array object”h]”hŒ*reference to the parent fence array object”…”�”}”(hjÀ)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œc/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:199: ./include/linux/dma-fence-array.h”h´Khj½)ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hj¡)ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³j¼)h´Khje)ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j³ hj)ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jg hjh²hh³Nh´NubjÉ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÕŒdma_fence_array (C struct)”Œc.dma_fence_array”hNt”auh1jÈhjh²hh³Nh´NubjÛ)�”}”(hhh]”(jà)�”}”(hŒdma_fence_array”h]”jæ)�”}”(hŒstruct dma_fence_array”h]”(jì)�”}”(hjïh]”hŒstruct”…”�”}”(hj*h²hh³Nh´Nubah}”(h]”h ]”jøah"]”h$]”h&]”uh1jëhjý)h²hh³Œc/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:199: ./include/linux/dma-fence-array.h”h´Kubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj*h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjý)h²hh³j*h´Kubj )�”}”(hŒdma_fence_array”h]”j )�”}”(hjû)h]”hŒdma_fence_array”…”�”}”(hj!*h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj*ubah}”(h]”h ]”(j' j( eh"]”h$]”h&]”j÷jøuh1j hjý)h²hh³j*h´Kubeh}”(h]”h ]”h"]”h$]”h&]”j÷jøj2 ˆuh1jåj3 j4 hjù)h²hh³j*h´Kubah}”(h]”jô)ah ]”(j8 j9 eh"]”h$]”h&]”j= ˆj> )j? huh1jßh³j*h´Khjö)h²hubjA )�”}”(hhh]”hÌ)�”}”(hŒ%fence to represent an array of fences”h]”hŒ%fence to represent an array of fences”…”�”}”(hjC*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œc/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:199: ./include/linux/dma-fence-array.h”h´Khj@*h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j@ hjö)h²hh³j*h´Kubeh}”(h]”h ]”(jîŒstruct”eh"]”h$]”h&]”ja jîjb j[*jc j[*jd ‰je ‰jf ‰uh1jÚh²hhjh³Nh´Nubjh )�”}”(hXò**Definition**:: struct dma_fence_array { struct dma_fence base; unsigned num_fences; atomic_t num_pending; struct dma_fence **fences; struct irq_work work; struct dma_fence_array_cb callbacks[]; }; **Members** ``base`` fence base class ``num_fences`` number of fences in the array ``num_pending`` fences in the array still pending ``fences`` array of the fences ``work`` internal irq_work function ``callbacks`` array of callback helpers”h]”(hÌ)�”}”(hŒ**Definition**::”h]”(jr )�”}”(hŒ**Definition**”h]”hŒ Definition”…”�”}”(hjg*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hjc*ubhŒ:”…”�”}”(hjc*h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œc/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:199: ./include/linux/dma-fence-array.h”h´K!hj_*ubjè)�”}”(hŒÍstruct dma_fence_array { struct dma_fence base; unsigned num_fences; atomic_t num_pending; struct dma_fence **fences; struct irq_work work; struct dma_fence_array_cb callbacks[]; };”h]”hŒÍstruct dma_fence_array { struct dma_fence base; unsigned num_fences; atomic_t num_pending; struct dma_fence **fences; struct irq_work work; struct dma_fence_array_cb callbacks[]; };”…”�”}”hj€*sbah}”(h]”h ]”h"]”h$]”h&]”j÷jøuh1jçh³Œc/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:199: ./include/linux/dma-fence-array.h”h´K#hj_*ubhÌ)�”}”(hŒ **Members**”h]”jr )�”}”(hj‘*h]”hŒMembers”…”�”}”(hj“*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hj�*ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œc/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:199: ./include/linux/dma-fence-array.h”h´K,hj_*ubj´ )�”}”(hhh]”(j¹ )�”}”(hŒ``base`` fence base class ”h]”(j¿ )�”}”(hŒ``base``”h]”jâ)�”}”(hj°*h]”hŒbase”…”�”}”(hj²*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj®*ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œc/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:199: ./include/linux/dma-fence-array.h”h´Khjª*ubjÙ )�”}”(hhh]”hÌ)�”}”(hŒfence base class”h]”hŒfence base class”…”�”}”(hjÉ*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jÅ*h´KhjÆ*ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hjª*ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³jÅ*h´Khj§*ubj¹ )�”}”(hŒ-``num_fences`` number of fences in the array ”h]”(j¿ )�”}”(hŒ``num_fences``”h]”jâ)�”}”(hjé*h]”hŒ num_fences”…”�”}”(hjë*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjç*ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œc/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:199: ./include/linux/dma-fence-array.h”h´K hjã*ubjÙ )�”}”(hhh]”hÌ)�”}”(hŒnumber of fences in the array”h]”hŒnumber of fences in the array”…”�”}”(hj+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jþ*h´K hjÿ*ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hjã*ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³jþ*h´K hj§*ubj¹ )�”}”(hŒ2``num_pending`` fences in the array still pending ”h]”(j¿ )�”}”(hŒ``num_pending``”h]”jâ)�”}”(hj"+h]”hŒ num_pending”…”�”}”(hj$+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj +ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œc/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:199: ./include/linux/dma-fence-array.h”h´K!hj+ubjÙ )�”}”(hhh]”hÌ)�”}”(hŒ!fences in the array still pending”h]”hŒ!fences in the array still pending”…”�”}”(hj;+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j7+h´K!hj8+ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hj+ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³j7+h´K!hj§*ubj¹ )�”}”(hŒ``fences`` array of the fences ”h]”(j¿ )�”}”(hŒ ``fences``”h]”jâ)�”}”(hj[+h]”hŒfences”…”�”}”(hj]+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjY+ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œc/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:199: ./include/linux/dma-fence-array.h”h´K"hjU+ubjÙ )�”}”(hhh]”hÌ)�”}”(hŒarray of the fences”h]”hŒarray of the fences”…”�”}”(hjt+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jp+h´K"hjq+ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hjU+ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³jp+h´K"hj§*ubj¹ )�”}”(hŒ$``work`` internal irq_work function ”h]”(j¿ )�”}”(hŒ``work``”h]”jâ)�”}”(hj”+h]”hŒwork”…”�”}”(hj–+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj’+ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œc/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:199: ./include/linux/dma-fence-array.h”h´K#hjŽ+ubjÙ )�”}”(hhh]”hÌ)�”}”(hŒinternal irq_work function”h]”hŒinternal irq_work function”…”�”}”(hj­+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j©+h´K#hjª+ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hjŽ+ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³j©+h´K#hj§*ubj¹ )�”}”(hŒ'``callbacks`` array of callback helpers”h]”(j¿ )�”}”(hŒ ``callbacks``”h]”jâ)�”}”(hjÍ+h]”hŒ callbacks”…”�”}”(hjÏ+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjË+ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œc/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:199: ./include/linux/dma-fence-array.h”h´K#hjÇ+ubjÙ )�”}”(hhh]”hÌ)�”}”(hŒarray of callback helpers”h]”hŒarray of callback helpers”…”�”}”(hjæ+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œc/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:199: ./include/linux/dma-fence-array.h”h´K$hjã+ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hjÇ+ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³jâ+h´K#hj§*ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j³ hj_*ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jg hjh²hh³Nh´NubjÉ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÕŒto_dma_fence_array (C function)”Œc.to_dma_fence_array”hNt”auh1jÈhjh²hh³Nh´NubjÛ)�”}”(hhh]”(jà)�”}”(hŒEstruct dma_fence_array * to_dma_fence_array (struct dma_fence *fence)”h]”jæ)�”}”(hŒCstruct dma_fence_array *to_dma_fence_array(struct dma_fence *fence)”h]”(jì)�”}”(hjïh]”hŒstruct”…”�”}”(hj',h²hh³Nh´Nubah}”(h]”h ]”jøah"]”h$]”h&]”uh1jëhj#,h²hh³Œc/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:199: ./include/linux/dma-fence-array.h”h´K2ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj5,h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj#,h²hh³j4,h´K2ubh)�”}”(hhh]”j )�”}”(hŒdma_fence_array”h]”hŒdma_fence_array”…”�”}”(hjF,h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjC,ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jîŒreftype”jGŒ reftarget”jH,Œmodname”NŒ classname”Nj³j¶)�”}”j¹]”jO)�”}”jGŒto_dma_fence_array”sbŒc.to_dma_fence_array”†”asbuh1hhj#,h²hh³j4,h´K2ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjg,h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj#,h²hh³j4,h´K2ubjd)�”}”(hjgh]”hŒ*”…”�”}”(hju,h²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchj#,h²hh³j4,h´K2ubj )�”}”(hŒto_dma_fence_array”h]”j )�”}”(hjd,h]”hŒto_dma_fence_array”…”�”}”(hj†,h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj‚,ubah}”(h]”h ]”(j' j( eh"]”h$]”h&]”j÷jøuh1j hj#,h²hh³j4,h´K2ubjŒ)�”}”(hŒ(struct dma_fence *fence)”h]”j’)�”}”(hŒstruct dma_fence *fence”h]”(jì)�”}”(hjïh]”hŒstruct”…”�”}”(hj¡,h²hh³Nh´Nubah}”(h]”h ]”jøah"]”h$]”h&]”uh1jëhj�,ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj®,h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj�,ubh)�”}”(hhh]”j )�”}”(hŒ dma_fence”h]”hŒ dma_fence”…”�”}”(hj¿,h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj¼,ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jîŒreftype”jGŒ reftarget”jÁ,Œmodname”NŒ classname”Nj³j¶)�”}”j¹]”jb,Œc.to_dma_fence_array”†”asbuh1hhj�,ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÝ,h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj�,ubjd)�”}”(hjgh]”hŒ*”…”�”}”(hjë,h²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchj�,ubj )�”}”(hŒfence”h]”hŒfence”…”�”}”(hjø,h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj�,ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj÷jøuh1j‘hj™,ubah}”(h]”h ]”h"]”h$]”h&]”j÷jøuh1j‹hj#,h²hh³j4,h´K2ubeh}”(h]”h ]”h"]”h$]”h&]”j÷jøj2 ˆuh1jåj3 j4 hj,h²hh³j4,h´K2ubah}”(h]”j,ah ]”(j8 j9 eh"]”h$]”h&]”j= ˆj> )j? huh1jßh³j4,h´K2hj,h²hubjA )�”}”(hhh]”hÌ)�”}”(hŒ!cast a fence to a dma_fence_array”h]”hŒ!cast a fence to a dma_fence_array”…”�”}”(hj"-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œc/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:199: ./include/linux/dma-fence-array.h”h´K2hj-h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j@ hj,h²hh³j4,h´K2ubeh}”(h]”h ]”(jîŒfunction”eh"]”h$]”h&]”ja jîjb j:-jc j:-jd ‰je ‰jf ‰uh1jÚh²hhjh³Nh´Nubjh )�”}”(hŒ¸**Parameters** ``struct dma_fence *fence`` fence to cast to a dma_fence_array **Description** Returns NULL if the fence is not a dma_fence_array, or the dma_fence_array otherwise.”h]”(hÌ)�”}”(hŒ**Parameters**”h]”jr )�”}”(hjD-h]”hŒ Parameters”…”�”}”(hjF-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hjB-ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œc/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:199: ./include/linux/dma-fence-array.h”h´K6hj>-ubj´ )�”}”(hhh]”j¹ )�”}”(hŒ?``struct dma_fence *fence`` fence to cast to a dma_fence_array ”h]”(j¿ )�”}”(hŒ``struct dma_fence *fence``”h]”jâ)�”}”(hjc-h]”hŒstruct dma_fence *fence”…”�”}”(hje-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhja-ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œc/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:199: ./include/linux/dma-fence-array.h”h´K3hj]-ubjÙ )�”}”(hhh]”hÌ)�”}”(hŒ"fence to cast to a dma_fence_array”h]”hŒ"fence to cast to a dma_fence_array”…”�”}”(hj|-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jx-h´K3hjy-ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hj]-ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³jx-h´K3hjZ-ubah}”(h]”h ]”h"]”h$]”h&]”uh1j³ hj>-ubhÌ)�”}”(hŒ**Description**”h]”jr )�”}”(hjž-h]”hŒ Description”…”�”}”(hj -h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hjœ-ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œc/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:199: ./include/linux/dma-fence-array.h”h´K5hj>-ubhÌ)�”}”(hŒUReturns NULL if the fence is not a dma_fence_array, or the dma_fence_array otherwise.”h]”hŒUReturns NULL if the fence is not a dma_fence_array, or the dma_fence_array otherwise.”…”�”}”(hj´-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œc/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:199: ./include/linux/dma-fence-array.h”h´K4hj>-ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jg hjh²hh³Nh´NubjÉ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÕŒ"dma_fence_array_for_each (C macro)”Œc.dma_fence_array_for_each”hNt”auh1jÈhjh²hh³Nh´NubjÛ)�”}”(hhh]”(jà)�”}”(hŒdma_fence_array_for_each”h]”jæ)�”}”(hŒdma_fence_array_for_each”h]”j )�”}”(hŒdma_fence_array_for_each”h]”j )�”}”(hjÝ-h]”hŒdma_fence_array_for_each”…”�”}”(hjç-h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjã-ubah}”(h]”h ]”(j' j( eh"]”h$]”h&]”j÷jøuh1j hjß-h²hh³Œc/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:199: ./include/linux/dma-fence-array.h”h´KBubah}”(h]”h ]”h"]”h$]”h&]”j÷jøj2 ˆuh1jåj3 j4 hjÛ-h²hh³jú-h´KBubah}”(h]”jÖ-ah ]”(j8 j9 eh"]”h$]”h&]”j= ˆj> )j? huh1jßh³jú-h´KBhjØ-h²hubjA )�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1j@ hjØ-h²hh³jú-h´KBubeh}”(h]”h ]”(jîŒmacro”eh"]”h$]”h&]”ja jîjb j.jc j.jd ‰je ‰jf ‰uh1jÚh²hhjh³Nh´NubhÌ)�”}”(hŒ1``dma_fence_array_for_each (fence, index, head)``”h]”jâ)�”}”(hj.h]”hŒ-dma_fence_array_for_each (fence, index, head)”…”�”}”(hj.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj.ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œc/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:199: ./include/linux/dma-fence-array.h”h´KDhjh²hubhø)�”}”(hŒ!iterate over all fences in array ”h]”hÌ)�”}”(hŒ iterate over all fences in array”h]”hŒ iterate over all fences in array”…”�”}”(hj3.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œc/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:199: ./include/linux/dma-fence-array.h”h´KBhj/.ubah}”(h]”h ]”h"]”h$]”h&]”uh1h÷h³jA.h´KBhjh²hubjh )�”}”(hX\**Parameters** ``fence`` current fence ``index`` index into the array ``head`` potential dma_fence_array object **Description** Test if **array** is a dma_fence_array object and if yes iterate over all fences in the array. If not just iterate over the fence in **array** itself. For a deep dive iterator see dma_fence_unwrap_for_each().”h]”(hÌ)�”}”(hŒ**Parameters**”h]”jr )�”}”(hjN.h]”hŒ Parameters”…”�”}”(hjP.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hjL.ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œc/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:199: ./include/linux/dma-fence-array.h”h´KFhjH.ubj´ )�”}”(hhh]”(j¹ )�”}”(hŒ``fence`` current fence ”h]”(j¿ )�”}”(hŒ ``fence``”h]”jâ)�”}”(hjm.h]”hŒfence”…”�”}”(hjo.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjk.ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œc/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:199: ./include/linux/dma-fence-array.h”h´KChjg.ubjÙ )�”}”(hhh]”hÌ)�”}”(hŒ current fence”h]”hŒ current fence”…”�”}”(hj†.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j‚.h´KChjƒ.ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hjg.ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³j‚.h´KChjd.ubj¹ )�”}”(hŒ``index`` index into the array ”h]”(j¿ )�”}”(hŒ ``index``”h]”jâ)�”}”(hj¦.h]”hŒindex”…”�”}”(hj¨.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj¤.ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œc/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:199: ./include/linux/dma-fence-array.h”h´KDhj .ubjÙ )�”}”(hhh]”hÌ)�”}”(hŒindex into the array”h]”hŒindex into the array”…”�”}”(hj¿.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j».h´KDhj¼.ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hj .ubeh}”(h]”h ]”• h"]”h$]”h&]”uh1j¸ h³j».h´KDhjd.ubj¹ )�”}”(hŒ*``head`` potential dma_fence_array object ”h]”(j¿ )�”}”(hŒ``head``”h]”jâ)�”}”(hjß.h]”hŒhead”…”�”}”(hjá.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjÝ.ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œc/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:199: ./include/linux/dma-fence-array.h”h´KEhjÙ.ubjÙ )�”}”(hhh]”hÌ)�”}”(hŒ potential dma_fence_array object”h]”hŒ potential dma_fence_array object”…”�”}”(hjø.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jô.h´KEhjõ.ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hjÙ.ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³jô.h´KEhjd.ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j³ hjH.ubhÌ)�”}”(hŒ**Description**”h]”jr )�”}”(hj/h]”hŒ Description”…”�”}”(hj/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hj/ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œc/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:199: ./include/linux/dma-fence-array.h”h´KGhjH.ubhÌ)�”}”(hŒ–Test if **array** is a dma_fence_array object and if yes iterate over all fences in the array. If not just iterate over the fence in **array** itself.”h]”(hŒTest if ”…”�”}”(hj0/h²hh³Nh´Nubjr )�”}”(hŒ **array**”h]”hŒarray”…”�”}”(hj8/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hj0/ubhŒt is a dma_fence_array object and if yes iterate over all fences in the array. If not just iterate over the fence in ”…”�”}”(hj0/h²hh³Nh´Nubjr )�”}”(hŒ **array**”h]”hŒarray”…”�”}”(hjJ/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hj0/ubhŒ itself.”…”�”}”(hj0/h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œc/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:199: ./include/linux/dma-fence-array.h”h´KFhjH.ubhÌ)�”}”(hŒ9For a deep dive iterator see dma_fence_unwrap_for_each().”h]”hŒ9For a deep dive iterator see dma_fence_unwrap_for_each().”…”�”}”(hjc/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œc/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:199: ./include/linux/dma-fence-array.h”h´KIhjH.ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jg hjh²hh³Nh´Nubeh}”(h]”Œdma-fence-array”ah ]”h"]”Œdma fence array”ah$]”h&]”uh1hµhjš­h²hh³hÊh´KÂubh¶)�”}”(hhh]”(h»)�”}”(hŒDMA Fence Chain”h]”hŒDMA Fence Chain”…”�”}”(hj„/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj�/h²hh³hÊh´KËubjÉ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÕŒ!dma_fence_chain_walk (C function)”Œc.dma_fence_chain_walk”hNt”auh1jÈhj�/h²hh³Nh´NubjÛ)�”}”(hhh]”(jà)�”}”(hŒAstruct dma_fence * dma_fence_chain_walk (struct dma_fence *fence)”h]”jæ)�”}”(hŒ?struct dma_fence *dma_fence_chain_walk(struct dma_fence *fence)”h]”(jì)�”}”(hjïh]”hŒstruct”…”�”}”(hj«/h²hh³Nh´Nubah}”(h]”h ]”jøah"]”h$]”h&]”uh1jëhj§/h²hh³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:205: ./drivers/dma-buf/dma-fence-chain.c”h´K ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¹/h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj§/h²hh³j¸/h´K ubh)�”}”(hhh]”j )�”}”(hŒ dma_fence”h]”hŒ dma_fence”…”�”}”(hjÊ/h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjÇ/ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jîŒreftype”jGŒ reftarget”jÌ/Œmodname”NŒ classname”Nj³j¶)�”}”j¹]”jO)�”}”jGŒdma_fence_chain_walk”sbŒc.dma_fence_chain_walk”†”asbuh1hhj§/h²hh³j¸/h´K ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjë/h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj§/h²hh³j¸/h´K ubjd)�”}”(hjgh]”hŒ*”…”�”}”(hjù/h²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchj§/h²hh³j¸/h´K ubj )�”}”(hŒdma_fence_chain_walk”h]”j )�”}”(hjè/h]”hŒdma_fence_chain_walk”…”�”}”(hj 0h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj0ubah}”(h]”h ]”(j' j( eh"]”h$]”h&]”j÷jøuh1j hj§/h²hh³j¸/h´K ubjŒ)�”}”(hŒ(struct dma_fence *fence)”h]”j’)�”}”(hŒstruct dma_fence *fence”h]”(jì)�”}”(hjïh]”hŒstruct”…”�”}”(hj%0h²hh³Nh´Nubah}”(h]”h ]”jøah"]”h$]”h&]”uh1jëhj!0ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj20h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj!0ubh)�”}”(hhh]”j )�”}”(hŒ dma_fence”h]”hŒ dma_fence”…”�”}”(hjC0h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj@0ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jîŒreftype”jGŒ reftarget”jE0Œmodname”NŒ classname”Nj³j¶)�”}”j¹]”jæ/Œc.dma_fence_chain_walk”†”asbuh1hhj!0ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hja0h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj!0ubjd)�”}”(hjgh]”hŒ*”…”�”}”(hjo0h²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchj!0ubj )�”}”(hŒfence”h]”hŒfence”…”�”}”(hj|0h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj!0ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj÷jøuh1j‘hj0ubah}”(h]”h ]”h"]”h$]”h&]”j÷jøuh1j‹hj§/h²hh³j¸/h´K ubeh}”(h]”h ]”h"]”h$]”h&]”j÷jøj2 ˆuh1jåj3 j4 hj£/h²hh³j¸/h´K ubah}”(h]”jž/ah ]”(j8 j9 eh"]”h$]”h&]”j= ˆj> )j? huh1jßh³j¸/h´K hj /h²hubjA )�”}”(hhh]”hÌ)�”}”(hŒchain walking function”h]”hŒchain walking function”…”�”}”(hj¦0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:205: ./drivers/dma-buf/dma-fence-chain.c”h´K hj£0h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j@ hj /h²hh³j¸/h´K ubeh}”(h]”h ]”(jîŒfunction”eh"]”h$]”h&]”ja jîjb j¾0jc j¾0jd ‰je ‰jf ‰uh1jÚh²hhj�/h³Nh´Nubjh )�”}”(hŒî**Parameters** ``struct dma_fence *fence`` current chain node **Description** Walk the chain to the next node. Returns the next fence or NULL if we are at the end of the chain. Garbage collects chain nodes which are already signaled.”h]”(hÌ)�”}”(hŒ**Parameters**”h]”jr )�”}”(hjÈ0h]”hŒ Parameters”…”�”}”(hjÊ0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hjÆ0ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:205: ./drivers/dma-buf/dma-fence-chain.c”h´K$hjÂ0ubj´ )�”}”(hhh]”j¹ )�”}”(hŒ/``struct dma_fence *fence`` current chain node ”h]”(j¿ )�”}”(hŒ``struct dma_fence *fence``”h]”jâ)�”}”(hjç0h]”hŒstruct dma_fence *fence”…”�”}”(hjé0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjå0ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:205: ./drivers/dma-buf/dma-fence-chain.c”h´K!hjá0ubjÙ )�”}”(hhh]”hÌ)�”}”(hŒcurrent chain node”h]”hŒcurrent chain node”…”�”}”(hj1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jü0h´K!hjý0ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hjá0ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³jü0h´K!hjÞ0ubah}”(h]”h ]”h"]”h$]”h&]”uh1j³ hjÂ0ubhÌ)�”}”(hŒ**Description**”h]”jr )�”}”(hj"1h]”hŒ Description”…”�”}”(hj$1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hj 1ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:205: ./drivers/dma-buf/dma-fence-chain.c”h´K#hjÂ0ubhÌ)�”}”(hŒ›Walk the chain to the next node. Returns the next fence or NULL if we are at the end of the chain. Garbage collects chain nodes which are already signaled.”h]”hŒ›Walk the chain to the next node. Returns the next fence or NULL if we are at the end of the chain. Garbage collects chain nodes which are already signaled.”…”�”}”(hj81h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:205: ./drivers/dma-buf/dma-fence-chain.c”h´K"hjÂ0ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jg hj�/h²hh³Nh´NubjÉ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÕŒ'dma_fence_chain_find_seqno (C function)”Œc.dma_fence_chain_find_seqno”hNt”auh1jÈhj�/h²hh³Nh´NubjÛ)�”}”(hhh]”(jà)�”}”(hŒJint dma_fence_chain_find_seqno (struct dma_fence **pfence, uint64_t seqno)”h]”jæ)�”}”(hŒIint dma_fence_chain_find_seqno(struct dma_fence **pfence, uint64_t seqno)”h]”(jM)�”}”(hŒint”h]”hŒint”…”�”}”(hjg1h²hh³Nh´Nubah}”(h]”h ]”jYah"]”h$]”h&]”uh1jLhjc1h²hh³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:205: ./drivers/dma-buf/dma-fence-chain.c”h´KPubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjv1h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjc1h²hh³ju1h´KPubj )�”}”(hŒdma_fence_chain_find_seqno”h]”j )�”}”(hŒdma_fence_chain_find_seqno”h]”hŒdma_fence_chain_find_seqno”…”�”}”(hjˆ1h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj„1ubah}”(h]”h ]”(j' j( eh"]”h$]”h&]”j÷jøuh1j hjc1h²hh³ju1h´KPubjŒ)�”}”(hŒ+(struct dma_fence **pfence, uint64_t seqno)”h]”(j’)�”}”(hŒstruct dma_fence **pfence”h]”(jì)�”}”(hjïh]”hŒstruct”…”�”}”(hj¤1h²hh³Nh´Nubah}”(h]”h ]”jøah"]”h$]”h&]”uh1jëhj 1ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj±1h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj 1ubh)�”}”(hhh]”j )�”}”(hŒ dma_fence”h]”hŒ dma_fence”…”�”}”(hjÂ1h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj¿1ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jîŒreftype”jGŒ reftarget”jÄ1Œmodname”NŒ classname”Nj³j¶)�”}”j¹]”jO)�”}”jGjŠ1sbŒc.dma_fence_chain_find_seqno”†”asbuh1hhj 1ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjâ1h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj 1ubjd)�”}”(hjgh]”hŒ*”…”�”}”(hjð1h²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchj 1ubjd)�”}”(hjgh]”hŒ*”…”�”}”(hjý1h²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchj 1ubj )�”}”(hŒpfence”h]”hŒpfence”…”�”}”(hj 2h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj 1ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj÷jøuh1j‘hjœ1ubj’)�”}”(hŒuint64_t seqno”h]”(h)�”}”(hhh]”j )�”}”(hŒuint64_t”h]”hŒuint64_t”…”�”}”(hj&2h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj#2ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jîŒreftype”jGŒ reftarget”j(2Œmodname”NŒ classname”Nj³j¶)�”}”j¹]”jÞ1Œc.dma_fence_chain_find_seqno”†”asbuh1hhj2ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjD2h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj2ubj )�”}”(hŒseqno”h]”hŒseqno”…”�”}”(hjR2h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj2ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj÷jøuh1j‘hjœ1ubeh}”(h]”h ]”h"]”h$]”h&]”j÷jøuh1j‹hjc1h²hh³ju1h´KPubeh}”(h]”h ]”h"]”h$]”h&]”j÷jøj2 ˆuh1jåj3 j4 hj_1h²hh³ju1h´KPubah}”(h]”jZ1ah ]”(j8 j9 eh"]”h$]”h&]”j= ˆj> )j? huh1jßh³ju1h´KPhj\1h²hubjA )�”}”(hhh]”hÌ)�”}”(hŒfind fence chain node by seqno”h]”hŒfind fence chain node by seqno”…”�”}”(hj|2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:205: ./drivers/dma-buf/dma-fence-chain.c”h´KPhjy2h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j@ hj\1h²hh³ju1h´KPubeh}”(h]”h ]”(jîŒfunction”eh"]”h$]”h&]”ja jîjb j”2jc j”2jd ‰je ‰jf ‰uh1jÚh²hhj�/h³Nh´Nubjh )�”}”(hX—**Parameters** ``struct dma_fence **pfence`` pointer to the chain node where to start ``uint64_t seqno`` the sequence number to search for **Description** Advance the fence pointer to the chain node which will signal this sequence number. If no sequence number is provided then this is a no-op. Returns EINVAL if the fence is not a chain node or the sequence number has not yet advanced far enough.”h]”(hÌ)�”}”(hŒ**Parameters**”h]”jr )�”}”(hjž2h]”hŒ Parameters”…”�”}”(hj 2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hjœ2ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:205: ./drivers/dma-buf/dma-fence-chain.c”h´KThj˜2ubj´ )�”}”(hhh]”(j¹ )�”}”(hŒG``struct dma_fence **pfence`` pointer to the chain node where to start ”h]”(j¿ )�”}”(hŒ``struct dma_fence **pfence``”h]”jâ)�”}”(hj½2h]”hŒstruct dma_fence **pfence”…”�”}”(hj¿2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj»2ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:205: ./drivers/dma-buf/dma-fence-chain.c”h´KQhj·2ubjÙ )�”}”(hhh]”hÌ)�”}”(hŒ(pointer to the chain node where to start”h]”hŒ(pointer to the chain node where to start”…”�”}”(hjÖ2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jÒ2h´KQhjÓ2ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hj·2ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³jÒ2h´KQhj´2ubj¹ )�”}”(hŒ5``uint64_t seqno`` the sequence number to search for ”h]”(j¿ )�”}”(hŒ``uint64_t seqno``”h]”jâ)�”}”(hjö2h]”hŒuint64_t seqno”…”�”}”(hjø2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjô2ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:205: ./drivers/dma-buf/dma-fence-chain.c”h´KRhjð2ubjÙ )�”}”(hhh]”hÌ)�”}”(hŒ!the sequence number to search for”h]”hŒ!the sequence number to search for”…”�”}”(hj3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j 3h´KRhj 3ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hjð2ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³j 3h´KRhj´2ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j³ hj˜2ubhÌ)�”}”(hŒ**Description**”h]”jr )�”}”(hj13h]”hŒ Description”…”�”}”(hj33h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hj/3ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:205: ./drivers/dma-buf/dma-fence-chain.c”h´KThj˜2ubhÌ)�”}”(hŒ‹Advance the fence pointer to the chain node which will signal this sequence number. If no sequence number is provided then this is a no-op.”h]”hŒ‹Advance the fence pointer to the chain node which will signal this sequence number. If no sequence number is provided then this is a no-op.”…”�”}”(hjG3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:205: ./drivers/dma-buf/dma-fence-chain.c”h´KShj˜2ubhÌ)�”}”(hŒgReturns EINVAL if the fence is not a chain node or the sequence number has not yet advanced far enough.”h]”hŒgReturns EINVAL if the fence is not a chain node or the sequence number has not yet advanced far enough.”…”�”}”(hjV3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:205: ./drivers/dma-buf/dma-fence-chain.c”h´KVhj˜2ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jg hj�/h²hh³Nh´NubjÉ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÕŒ!dma_fence_chain_init (C function)”Œc.dma_fence_chain_init”hNt”auh1jÈhj�/h²hh³Nh´NubjÛ)�”}”(hhh]”(jà)�”}”(hŒzvoid dma_fence_chain_init (struct dma_fence_chain *chain, struct dma_fence *prev, struct dma_fence *fence, uint64_t seqno)”h]”jæ)�”}”(hŒyvoid dma_fence_chain_init(struct dma_fence_chain *chain, struct dma_fence *prev, struct dma_fence *fence, uint64_t seqno)”h]”(jM)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj…3h²hh³Nh´Nubah}”(h]”h ]”jYah"]”h$]”h&]”uh1jLhj�3h²hh³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:205: ./drivers/dma-buf/dma-fence-chain.c”h´Kçubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj”3h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj�3h²hh³j“3h´Kçubj )�”}”(hŒdma_fence_chain_init”h]”j )�”}”(hŒdma_fence_chain_init”h]”hŒdma_fence_chain_init”…”�”}”(hj¦3h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj¢3ubah}”(h]”h ]”(j' j( eh"]”h$]”h&]”j÷jøuh1j hj�3h²hh³j“3h´KçubjŒ)�”}”(hŒ`(struct dma_fence_chain *chain, struct dma_fence *prev, struct dma_fence *fence, uint64_t seqno)”h]”(j’)�”}”(hŒstruct dma_fence_chain *chain”h]”(jì)�”}”(hjïh]”hŒstruct”…”�”}”(hjÂ3h²hh³Nh´Nubah}”(h]”h ]”jøah"]”h$]”h&]”uh1jëhj¾3ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÏ3h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj¾3ubh)�”}”(hhh]”j )�”}”(hŒdma_fence_chain”h]”hŒdma_fence_chain”…”�”}”(hjà3h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjÝ3ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jîŒreftype”jGŒ reftarget”jâ3Œmodname”NŒ classname”Nj³j¶)�”}”j¹]”jO)�”}”jGj¨3sbŒc.dma_fence_chain_init”†”asbuh1hhj¾3ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj4h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj¾3ubjd)�”}”(hjgh]”hŒ*”…”�”}”(hj4h²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchj¾3ubj )�”}”(hŒchain”h]”hŒchain”…”�”}”(hj4h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj¾3ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj÷jøuh1j‘hjº3ubj’)�”}”(hŒstruct dma_fence *prev”h]”(jì)�”}”(hjïh]”hŒstruct”…”�”}”(hj44h²hh³Nh´Nubah}”(h]”h ]”jøah"]”h$]”h&]”uh1jëhj04ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjA4h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj04ubh)�”}”(hhh]”j )�”}”(hŒ dma_fence”h]”hŒ dma_fence”…”�”}”(hjR4h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjO4ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jîŒreftype”jGŒ reftarget”jT4Œmodname”NŒ classname”Nj³j¶)�”}”j¹]”jü3Œc.dma_fence_chain_init”†”asbuh1hhj04ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjp4h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj04ubjd)�”}”(hjgh]”hŒ*”…”�”}”(hj~4h²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchj04ubj )�”}”(hŒprev”h]”hŒprev”…”�”}”(hj‹4h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj04ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj÷jøuh1j‘hjº3ubj’)�”}”(hŒstruct dma_fence *fence”h]”(jì)�”}”(hjïh]”hŒstruct”…”�”}”(hj¤4h²hh³Nh´Nubah}”(h]”h ]”jøah"]”h$]”h&]”uh1jëhj 4ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj±4h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj 4ubh)�”}”(hhh]”j )�”}”(hŒ dma_fence”h]”hŒ dma_fence”…”�”}”(hjÂ4h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj¿4ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jîŒreftype”jGŒ reftarget”jÄ4Œmodname”NŒ classname”Nj³j¶)�”}”j¹]”jü3Œc.dma_fence_chain_init”†”asbuh1hhj 4ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjà4h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj 4ubjd)�”}”(hjgh]”hŒ*”…”�”}”(hjî4h²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchj 4ubj )�”}”(hŒfence”h]”hŒfence”…”�”}”(hjû4h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj 4ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj÷jøuh1j‘hjº3ubj’)�”}”(hŒuint64_t seqno”h]”(h)�”}”(hhh]”j )�”}”(hŒuint64_t”h]”hŒuint64_t”…”�”}”(hj5h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj5ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jîŒreftype”jGŒ reftarget”j5Œmodname”NŒ classname”Nj³j¶)�”}”j¹]”jü3Œc.dma_fence_chain_init”†”asbuh1hhj5ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj55h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj5ubj )�”}”(hŒseqno”h]”hŒseqno”…”�”}”(hjC5h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj5ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj÷jøuh1j‘hjº3ubeh}”(h]”h ]”h"]”h$]”h&]”j÷jøuh1j‹hj�3h²hh³j“3h´Kçubeh}”(h]”h ]”h"]”h$]”h&]”j÷jøj2 ˆuh1jåj3 j4 hj}3h²hh³j“3h´Kçubah}”(h]”jx3ah ]”(j8 j9 eh"]”h$]”h&]”j= ˆj> )j? huh1jßh³j“3h´Kçhjz3h²hubjA )�”}”(hhh]”hÌ)�”}”(hŒinitialize a fence chain”h]”hŒinitialize a fence chain”…”�”}”(hjm5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:205: ./drivers/dma-buf/dma-fence-chain.c”h´Kçhjj5h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j@ hjz3h²hh³j“3h´Kçubeh}”(h]”h ]”(jîŒfunction”eh"]”h$]”h&]”ja jîjb j…5jc j…5jd ‰je ‰jf ‰uh1jÚh²hhj�/h³Nh´Nubjh )�”}”(hX**Parameters** ``struct dma_fence_chain *chain`` the chain node to initialize ``struct dma_fence *prev`` the previous fence ``struct dma_fence *fence`` the current fence ``uint64_t seqno`` the sequence number to use for the fence chain **Description** Initialize a new chain node and either start a new chain or add the node to the existing chain of the previous fence.”h]”(hÌ)�”}”(hŒ**Parameters**”h]”jr )�”}”(hj�5h]”hŒ Parameters”…”�”}”(hj‘5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hj�5ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:205: ./drivers/dma-buf/dma-fence-chain.c”h´Këhj‰5ubj´ )�”}”(hhh]”(j¹ )�”}”(hŒ?``struct dma_fence_chain *chain`` the chain node to initialize ”h]”(j¿ )�”}”(hŒ!``struct dma_fence_chain *chain``”h]”jâ)�”}”(hj®5h]”hŒstruct dma_fence_chain *chain”…”�”}”(hj°5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj¬5ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:205: ./drivers/dma-buf/dma-fence-chain.c”h´Kèhj¨5ubjÙ )�”}”(hhh]”hÌ)�”}”(hŒthe chain node to initialize”h]”hŒthe chain node to initialize”…”�”}”(hjÇ5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jÃ5h´KèhjÄ5ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hj¨5ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³jÃ5h´Kèhj¥5ubj¹ )�”}”(hŒ.``struct dma_fence *prev`` the previous fence ”h]”(j¿ )�”}”(hŒ``struct dma_fence *prev``”h]”jâ)�”}”(hjç5h]”hŒstruct dma_fence *prev”…”�”}”(hjé5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjå5ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:205: ./drivers/dma-buf/dma-fence-chain.c”h´Kéhjá5ubjÙ )�”}”(hhh]”hÌ)�”}”(hŒthe previous fence”h]”hŒthe previous fence”…”�”}”(hj6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jü5h´Kéhjý5ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hjá5ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³jü5h´Kéhj¥5ubj¹ )�”}”(hŒ.``struct dma_fence *fence`` the current fence ”h]”(j¿ )�”}”(hŒ``struct dma_fence *fence``”h]”jâ)�”}”(hj 6h]”hŒstruct dma_fence *fence”…”�”}”(hj"6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj6ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:205: ./drivers/dma-buf/dma-fence-chain.c”h´Kêhj6ubjÙ )�”}”(hhh]”hÌ)�”}”(hŒthe current fence”h]”hŒthe current fence”…”�”}”(hj96h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j56h´Kêhj66ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hj6ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³j56h´Kêhj¥5ubj¹ )�”}”(hŒB``uint64_t seqno`` the sequence number to use for the fence chain ”h]”(j¿ )�”}”(hŒ``uint64_t seqno``”h]”jâ)�”}”(hjY6h]”hŒuint64_t seqno”…”�”}”(hj[6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjW6ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:205: ./drivers/dma-buf/dma-fence-chain.c”h´KëhjS6ubjÙ )�”}”(hhh]”hÌ)�”}”(hŒ.the sequence number to use for the fence chain”h]”hŒ.the sequence number to use for the fence chain”…”�”}”(hjr6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jn6h´Këhjo6ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hjS6ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³jn6h´Këhj¥5ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j³ hj‰5ubhÌ)�”}”(hŒ**Description**”h]”jr )�”}”(hj”6h]”hŒ Description”…”�”}”(hj–6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hj’6ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:205: ./drivers/dma-buf/dma-fence-chain.c”h´Kíhj‰5ubhÌ)�”}”(hŒuInitialize a new chain node and either start a new chain or add the node to the existing chain of the previous fence.”h]”hŒuInitialize a new chain node and either start a new chain or add the node to the existing chain of the previous fence.”…”�”}”(hjª6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:205: ./drivers/dma-buf/dma-fence-chain.c”h´Kìhj‰5ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jg hj�/h²hh³Nh´NubjÉ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÕŒdma_fence_chain (C struct)”Œc.dma_fence_chain”hNt”auh1jÈhj�/h²hh³Nh´NubjÛ)�”}”(hhh]”(jà)�”}”(hŒdma_fence_chain”h]”jæ)�”}”(hŒstruct dma_fence_chain”h]”(jì)�”}”(hjïh]”hŒstruct”…”�”}”(hjÙ6h²hh³Nh´Nubah}”(h]”h ]”jøah"]”h$]”h&]”uh1jëhjÕ6h²hh³Œc/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:208: ./include/linux/dma-fence-chain.h”h´Kubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjç6h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjÕ6h²hh³jæ6h´Kubj )�”}”(hŒdma_fence_chain”h]”j )�”}”(hjÓ6h]”hŒdma_fence_chain”…”�”}”(hjù6h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjõ6ubah}”(h]”h ]”(j' j( eh"]”h$]”h&]”j÷jøuh1j hjÕ6h²hh³jæ6h´Kubeh}”(h]”h ]”h"]”h$]”h&]”j÷jøj2 ˆuh1jåj3 j4 hjÑ6h²hh³jæ6h´Kubah}”(h]”jÌ6ah ]”(j8 j9 eh"]”h$]”h&]”j= ˆj> )j? huh1jßh³jæ6h´KhjÎ6h²hubjA )�”}”(hhh]”hÌ)�”}”(hŒ+fence to represent an node of a fence chain”h]”hŒ+fence to represent an node of a fence chain”…”�”}”(hj7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œc/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:208: ./include/linux/dma-fence-chain.h”h´Khj7h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j@ hjÎ6h²hh³jæ6h´Kubeh}”(h]”h ]”(jîŒstruct”eh"]”h$]”h&]”ja jîjb j37jc j37jd ‰je ‰jf ‰uh1jÚh²hhj�/h³Nh´Nubjh )�”}”(hX-**Definition**:: struct dma_fence_chain { struct dma_fence base; struct dma_fence *prev; u64 prev_seqno; struct dma_fence *fence; union { struct dma_fence_cb cb; struct irq_work work; }; }; **Members** ``base`` fence base class ``prev`` previous fence of the chain ``prev_seqno`` original previous seqno before garbage collection ``fence`` encapsulated fence ``{unnamed_union}`` anonymous ``cb`` callback for signaling This is used to add the callback for signaling the complection of the fence chain. Never used at the same time as the irq work. ``work`` irq work item for signaling Irq work structure to allow us to add the callback without running into lock inversion. Never used at the same time as the callback.”h]”(hÌ)�”}”(hŒ**Definition**::”h]”(jr )�”}”(hŒ**Definition**”h]”hŒ Definition”…”�”}”(hj?7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hj;7ubhŒ:”…”�”}”(hj;7h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œc/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:208: ./include/linux/dma-fence-chain.h”h´Khj77ubjè)�”}”(hŒÔstruct dma_fence_chain { struct dma_fence base; struct dma_fence *prev; u64 prev_seqno; struct dma_fence *fence; union { struct dma_fence_cb cb; struct irq_work work; }; };”h]”hŒÔstruct dma_fence_chain { struct dma_fence base; struct dma_fence *prev; u64 prev_seqno; struct dma_fence *fence; union { struct dma_fence_cb cb; struct irq_work work; }; };”…”�”}”hjX7sbah}”(h]”h ]”h"]”h$]”h&]”j÷jøuh1jçh³Œc/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:208: ./include/linux/dma-fence-chain.h”h´Khj77ubhÌ)�”}”(hŒ **Members**”h]”jr )�”}”(hji7h]”hŒMembers”…”�”}”(hjk7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hjg7ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œc/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:208: ./include/linux/dma-fence-chain.h”h´K#hj77ubj´ )�”}”(hhh]”(j¹ )�”}”(hŒ``base`` fence base class ”h]”(j¿ )�”}”(hŒ``base``”h]”jâ)�”}”(hjˆ7h]”hŒbase”…”�”}”(hjŠ7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj†7ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œc/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:208: ./include/linux/dma-fence-chain.h”h´Khj‚7ubjÙ )�”}”(hhh]”hÌ)�”}”(hŒfence base class”h]”hŒfence base class”…”�”}”(hj¡7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j�7h´Khjž7ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hj‚7ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³j�7h´Khj7ubj¹ )�”}”(hŒ%``prev`` previous fence of the chain ”h]”(j¿ )�”}”(hŒ``prev``”h]”jâ)�”}”(hjÁ7h]”hŒprev”…”�”}”(hjÃ7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj¿7ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œc/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:208: ./include/linux/dma-fence-chain.h”h´Khj»7ubjÙ )�”}”(hhh]”hÌ)�”}”(hŒprevious fence of the chain”h]”hŒprevious fence of the chain”…”�”}”(hjÚ7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jÖ7h´Khj×7ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hj»7ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³jÖ7h´Khj7ubj¹ )�”}”(hŒA``prev_seqno`` original previous seqno before garbage collection ”h]”(j¿ )�”}”(hŒ``prev_seqno``”h]”jâ)�”}”(hjú7h]”hŒ prev_seqno”…”�”}”(hjü7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjø7ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œc/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:208: ./include/linux/dma-fence-chain.h”h´Khjô7ubjÙ )�”}”(hhh]”hÌ)�”}”(hŒ1original previous seqno before garbage collection”h]”hŒ1original previous seqno before garbage collection”…”�”}”(hj8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j8h´Khj8ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hjô7ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³j8h´Khj7ubj¹ )�”}”(hŒ``fence`` encapsulated fence ”h]”(j¿ )�”}”(hŒ ``fence``”h]”jâ)�”}”(hj38h]”hŒfence”…”�”}”(hj58h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj18ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œc/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:208: ./include/linux/dma-fence-chain.h”h´Khj-8ubjÙ )�”}”(hhh]”hÌ)�”}”(hŒencapsulated fence”h]”hŒencapsulated fence”…”�”}”(hjL8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jH8h´KhjI8ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hj-8ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³jH8h´Khj7ubj¹ )�”}”(hŒ``{unnamed_union}`` anonymous ”h]”(j¿ )�”}”(hŒ``{unnamed_union}``”h]”jâ)�”}”(hjl8h]”hŒ{unnamed_union}”…”�”}”(hjn8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjj8ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œc/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:208: ./include/linux/dma-fence-chain.h”h´Khjf8ubjÙ )�”}”(hhh]”hÌ)�”}”(hŒ anonymous”h]”hŒ anonymous”…”�”}”(hj…8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j�8h´Khj‚8ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hjf8ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³j�8h´Khj7ubj¹ )�”}”(hŒŸ``cb`` callback for signaling This is used to add the callback for signaling the complection of the fence chain. Never used at the same time as the irq work. ”h]”(j¿ )�”}”(hŒ``cb``”h]”jâ)�”}”(hj¥8h]”hŒcb”…”�”}”(hj§8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj£8ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œc/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:208: ./include/linux/dma-fence-chain.h”h´K$hjŸ8ubjÙ )�”}”(hhh]”(hÌ)�”}”(hŒcallback for signaling”h]”hŒcallback for signaling”…”�”}”(hj¾8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œc/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:208: ./include/linux/dma-fence-chain.h”h´K hj»8ubhÌ)�”}”(hŒThis is used to add the callback for signaling the complection of the fence chain. Never used at the same time as the irq work.”h]”hŒThis is used to add the callback for signaling the complection of the fence chain. Never used at the same time as the irq work.”…”�”}”(hjÍ8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œc/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:208: ./include/linux/dma-fence-chain.h”h´K"hj»8ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jØ hjŸ8ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³jº8h´K$hj7ubj¹ )�”}”(hŒª``work`` irq work item for signaling Irq work structure to allow us to add the callback without running into lock inversion. Never used at the same time as the callback.”h]”(j¿ )�”}”(hŒ``work``”h]”jâ)�”}”(hjî8h]”hŒwork”…”�”}”(hjð8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjì8ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œc/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:208: ./include/linux/dma-fence-chain.h”h´K,hjè8ubjÙ )�”}”(hhh]”(hÌ)�”}”(hŒirq work item for signaling”h]”hŒirq work item for signaling”…”�”}”(hj9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œc/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:208: ./include/linux/dma-fence-chain.h”h´K)hj9ubhÌ)�”}”(hŒ„Irq work structure to allow us to add the callback without running into lock inversion. Never used at the same time as the callback.”h]”hŒ„Irq work structure to allow us to add the callback without running into lock inversion. Never used at the same time as the callback.”…”�”}”(hj9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œc/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:208: ./include/linux/dma-fence-chain.h”h´K+hj9ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jØ hjè8ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³j9h´K,hj7ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j³ hj77ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jg hj�/h²hh³Nh´NubjÉ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÕŒto_dma_fence_chain (C function)”Œc.to_dma_fence_chain”hNt”auh1jÈhj�/h²hh³Nh´NubjÛ)�”}”(hhh]”(jà)�”}”(hŒEstruct dma_fence_chain * to_dma_fence_chain (struct dma_fence *fence)”h]”jæ)�”}”(hŒCstruct dma_fence_chain *to_dma_fence_chain(struct dma_fence *fence)”h]”(jì)�”}”(hjïh]”hŒstruct”…”�”}”(hjW9h²hh³Nh´Nubah}”(h]”h ]”jøah"]”h$]”h&]”uh1jëhjS9h²hh³Œc/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:208: ./include/linux/dma-fence-chain.h”h´K4ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hje9h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjS9h²hh³jd9h´K4ubh)�”}”(hhh]”j )�”}”(hŒdma_fence_chain”h]”hŒdma_fence_chain”…”�”}”(hjv9h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjs9ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jîŒreftype”jGŒ reftarget”jx9Œmodname”NŒ classname”Nj³j¶)�”}”j¹]”jO)�”}”jGŒto_dma_fence_chain”sbŒc.to_dma_fence_chain”†”asbuh1hhjS9h²hh³jd9h´K4ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj—9h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjS9h²hh³jd9h´K4ubjd)�”}”(hjgh]”hŒ*”…”�”}”(hj¥9h²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchjS9h²hh³jd9h´K4ubj )�”}”(hŒto_dma_fence_chain”h]”j )�”}”(hj”9h]”hŒto_dma_fence_chain”…”�”}”(hj¶9h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj²9ubah}”(h]”h ]”(j' j( eh"]”h$]”h&]”j÷jøuh1j hjS9h²hh³jd9h´K4ubjŒ)�”}”(hŒ(struct dma_fence *fence)”h]”j’)�”}”(hŒstruct dma_fence *fence”h]”(jì)�”}”(hjïh]”hŒstruct”…”�”}”(hjÑ9h²hh³Nh´Nubah}”(h]”h ]”jøah"]”h$]”h&]”uh1jëhjÍ9ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÞ9h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjÍ9ubh)�”}”(hhh]”j )�”}”(hŒ dma_fence”h]”hŒ dma_fence”…”�”}”(hjï9h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjì9ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jîŒreftype”jGŒ reftarget”jñ9Œmodname”NŒ classname”Nj³j¶)�”}”j¹]”j’9Œc.to_dma_fence_chain”†”asbuh1hhjÍ9ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj :h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjÍ9ubjd)�”}”(hjgh]”hŒ*”…”�”}”(hj:h²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchjÍ9ubj )�”}”(hŒfence”h]”hŒfence”…”�”}”(hj(:h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjÍ9ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj÷jøuh1j‘hjÉ9ubah}”(h]”h ]”h"]”h$]”h&]”j÷jøuh1j‹hjS9h²hh³jd9h´K4ubeh}”(h]”h ]”h"]”h$]”h&]”j÷jøj2 ˆuh1jåj3 j4 hjO9h²hh³jd9h´K4ubah}”(h]”jJ9ah ]”(j8 j9 eh"]”h$]”h&]”j= ˆj> )j? huh1jßh³jd9h´K4hjL9h²hubjA )�”}”(hhh]”hÌ)�”}”(hŒ!cast a fence to a dma_fence_chain”h]”hŒ!cast a fence to a dma_fence_chain”…”�”}”(hjR:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œc/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:208: ./include/linux/dma-fence-chain.h”h´K4hjO:h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j@ hjL9h²hh³jd9h´K4ubeh}”(h]”h ]”(jîŒfunction”eh"]”h$]”h&]”ja jîjb jj:jc jj:jd ‰je ‰jf ‰uh1jÚh²hhj�/h³Nh´Nubjh )�”}”(hŒ¸**Parameters** ``struct dma_fence *fence`` fence to cast to a dma_fence_array **Description** Returns NULL if the fence is not a dma_fence_chain, or the dma_fence_chain otherwise.”h]”(hÌ)�”}”(hŒ**Parameters**”h]”jr )�”}”(hjt:h]”hŒ Parameters”…”�”}”(hjv:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hjr:ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œc/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:208: ./include/linux/dma-fence-chain.h”h´K8hjn:ubj´ )�”}”(hhh]”j¹ )�”}”(hŒ?``struct dma_fence *fence`` fence to cast to a dma_fence_array ”h]”(j¿ )�”}”(hŒ``struct dma_fence *fence``”h]”jâ)�”}”(hj“:h]”hŒstruct dma_fence *fence”…”�”}”(hj•:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj‘:ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œc/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:208: ./include/linux/dma-fence-chain.h”h´K5hj�:ubjÙ )�”}”(hhh]”hÌ)�”}”(hŒ"fence to cast to a dma_fence_array”h]”hŒ"fence to cast to a dma_fence_array”…”�”}”(hj¬:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j¨:h´K5hj©:ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hj�:ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³j¨:h´K5hjŠ:ubah}”(h]”h ]”h"]”h$]”h&]”uh1j³ hjn:ubhÌ)�”}”(hŒ**Description**”h]”jr )�”}”(hjÎ:h]”hŒ Description”…”�”}”(hjÐ:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hjÌ:ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œc/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:208: ./include/linux/dma-fence-chain.h”h´K7hjn:ubhÌ)�”}”(hŒUReturns NULL if the fence is not a dma_fence_chain, or the dma_fence_chain otherwise.”h]”hŒUReturns NULL if the fence is not a dma_fence_chain, or the dma_fence_chain otherwise.”…”�”}”(hjä:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œc/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:208: ./include/linux/dma-fence-chain.h”h´K6hjn:ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jg hj�/h²hh³Nh´NubjÉ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÕŒ&dma_fence_chain_contained (C function)”Œc.dma_fence_chain_contained”hNt”auh1jÈhj�/h²hh³Nh´NubjÛ)�”}”(hhh]”(jà)�”}”(hŒFstruct dma_fence * dma_fence_chain_contained (struct dma_fence *fence)”h]”jæ)�”}”(hŒDstruct dma_fence *dma_fence_chain_contained(struct dma_fence *fence)”h]”(jì)�”}”(hjïh]”hŒstruct”…”�”}”(hj;h²hh³Nh´Nubah}”(h]”h ]”jøah"]”h$]”h&]”uh1jëhj;h²hh³Œc/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:208: ./include/linux/dma-fence-chain.h”h´KDubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj!;h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj;h²hh³j ;h´KDubh)�”}”(hhh]”j )�”}”(hŒ dma_fence”h]”hŒ dma_fence”…”�”}”(hj2;h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj/;ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jîŒreftype”jGŒ reftarget”j4;Œmodname”NŒ classname”Nj³j¶)�”}”j¹]”jO)�”}”jGŒdma_fence_chain_contained”sbŒc.dma_fence_chain_contained”†”asbuh1hhj;h²hh³j ;h´KDubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjS;h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj;h²hh³j ;h´KDubjd)�”}”(hjgh]”hŒ*”…”�”}”(hja;h²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchj;h²hh³j ;h´KDubj )�”}”(hŒdma_fence_chain_contained”h]”j )�”}”(hjP;h]”hŒdma_fence_chain_contained”…”�”}”(hjr;h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjn;ubah}”(h]”h ]”(j' j( eh"]”h$]”h&]”j÷jøuh1j hj;h²hh³j ;h´KDubjŒ)�”}”(hŒ(struct dma_fence *fence)”h]”j’)�”}”(hŒstruct dma_fence *fence”h]”(jì)�”}”(hjïh]”hŒstruct”…”�”}”(hj�;h²hh³Nh´Nubah}”(h]”h ]”jøah"]”h$]”h&]”uh1jëhj‰;ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjš;h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj‰;ubh)�”}”(hhh]”j )�”}”(hŒ dma_fence”h]”hŒ dma_fence”…”�”}”(hj«;h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj¨;ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jîŒreftype”jGŒ reftarget”j­;Œmodname”NŒ classname”Nj³j¶)�”}”j¹]”jN;Œc.dma_fence_chain_contained”†”asbuh1hhj‰;ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÉ;h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj‰;ubjd)�”}”(hjgh]”hŒ*”…”�”}”(hj×;h²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchj‰;ubj )�”}”(hŒfence”h]”hŒfence”…”�”}”(hjä;h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj‰;ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj÷jøuh1j‘hj…;ubah}”(h]”h ]”h"]”h$]”h&]”j÷jøuh1j‹hj;h²hh³j ;h´KDubeh}”(h]”h ]”h"]”h$]”h&]”j÷jøj2 ˆuh1jåj3 j4 hj ;h²hh³j ;h´KDubah}”(h]”j;ah ]”(j8 j9 eh"]”h$]”h&]”j= ˆj> )j? huh1jßh³j ;h´KDhj;h²hubjA )�”}”(hhh]”hÌ)�”}”(hŒreturn the contained fence”h]”hŒreturn the contained fence”…”�”}”(hj<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œc/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:208: ./include/linux/dma-fence-chain.h”h´KDhj <h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j@ hj;h²hh³j ;h´KDubeh}”(h]”h ]”(jîŒfunction”eh"]”h$]”h&]”ja jîjb j&<jc j&<jd ‰je ‰jf ‰uh1jÚh²hhj�/h³Nh´Nubjh )�”}”(hŒÜ**Parameters** ``struct dma_fence *fence`` the fence to test **Description** If the fence is a dma_fence_chain the function returns the fence contained inside the chain object, otherwise it returns the fence itself.”h]”(hÌ)�”}”(hŒ**Parameters**”h]”jr )�”}”(hj0<h]”hŒ Parameters”…”�”}”(hj2<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hj.<ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œc/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:208: ./include/linux/dma-fence-chain.h”h´KHhj*<ubj´ )�”}”(hhh]”j¹ )�”}”(hŒ.``struct dma_fence *fence`` the fence to test ”h]”(j¿ )�”}”(hŒ``struct dma_fence *fence``”h]”jâ)�”}”(hjO<h]”hŒstruct dma_fence *fence”…”�”}”(hjQ<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjM<ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œc/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:208: ./include/linux/dma-fence-chain.h”h´KEhjI<ubjÙ )�”}”(hhh]”hÌ)�”}”(hŒthe fence to test”h]”hŒthe fence to test”…”�”}”(hjh<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jd<h´KEhje<ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hjI<ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³jd<h´KEhjF<ubah}”(h]”h ]”h"]”h$]”h&]”uh1j³ hj*<ubhÌ)�”}”(hŒ**Description**”h]”jr )�”}”(hjŠ<h]”hŒ Description”…”�”}”(hjŒ<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hjˆ<ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œc/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:208: ./include/linux/dma-fence-chain.h”h´KGhj*<ubhÌ)�”}”(hŒŠIf the fence is a dma_fence_chain the function returns the fence contained inside the chain object, otherwise it returns the fence itself.”h]”hŒŠIf the fence is a dma_fence_chain the function returns the fence contained inside the chain object, otherwise it returns the fence itself.”…”�”}”(hj <h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œc/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:208: ./include/linux/dma-fence-chain.h”h´KFhj*<ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jg hj�/h²hh³Nh´NubjÉ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÕŒdma_fence_chain_alloc (C macro)”Œc.dma_fence_chain_alloc”hNt”auh1jÈhj�/h²hh³Nh´NubjÛ)�”}”(hhh]”(jà)�”}”(hŒdma_fence_chain_alloc”h]”jæ)�”}”(hŒdma_fence_chain_alloc”h]”j )�”}”(hŒdma_fence_chain_alloc”h]”j )�”}”(hjÉ<h]”hŒdma_fence_chain_alloc”…”�”}”(hjÓ<h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjÏ<ubah}”(h]”h ]”(j' j( eh"]”h$]”h&]”j÷jøuh1j hjË<h²hh³Œc/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:208: ./include/linux/dma-fence-chain.h”h´KSubah}”(h]”h ]”h"]”h$]”h&]”j÷jøj2 ˆuh1jåj3 j4 hjÇ<h²hh³jæ<h´KSubah}”(h]”jÂ<ah ]”(j8 j9 eh"]”h$]”h&]”j= ˆj> )j? huh1jßh³jæ<h´KShjÄ<h²hubjA )�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1j@ hjÄ<h²hh³jæ<h´KSubeh}”(h]”h ]”(jîŒmacro”eh"]”h$]”h&]”ja jîjb jÿ<jc jÿ<jd ‰je ‰jf ‰uh1jÚh²hhj�/h³Nh´NubhÌ)�”}”(hŒ``dma_fence_chain_alloc ()``”h]”jâ)�”}”(hj=h]”hŒdma_fence_chain_alloc ()”…”�”}”(hj=h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj=ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œc/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:208: ./include/linux/dma-fence-chain.h”h´KUhj�/h²hubhø)�”}”(hX# Returns a new :c:type:`struct dma_fence_chain ` object or ``NULL`` on failure. **Description** This specialized allocator has to be a macro for its allocations to be accounted separately (to have a separate alloc_tag). The typecast is intentional to enforce typesafety. ”h]”(hø)�”}”(hŒ`Returns a new :c:type:`struct dma_fence_chain ` object or ``NULL`` on failure. ”h]”hÌ)�”}”(hŒ_Returns a new :c:type:`struct dma_fence_chain ` object or ``NULL`` on failure.”h]”(hŒReturns a new ”…”�”}”(hj#=h²hh³Nh´Nubh)�”}”(hŒ2:c:type:`struct dma_fence_chain `”h]”jâ)�”}”(hj-=h]”hŒstruct dma_fence_chain”…”�”}”(hj/=h²hh³Nh´Nubah}”(h]”h ]”(jíjîŒc-type”eh"]”h$]”h&]”uh1jáhj+=ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”júŒ refdomain”jîŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰j³j·jŒdma_fence_chain”uh1hh³Œc/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:208: ./include/linux/dma-fence-chain.h”h´KShj#=ubhŒ object or ”…”�”}”(hj#=h²hh³Nh´Nubjâ)�”}”(hŒ``NULL``”h]”hŒNULL”…”�”}”(hjO=h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj#=ubhŒ on failure.”…”�”}”(hj#=h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jJ=h´KShj=ubah}”(h]”h ]”h"]”h$]”h&]”uh1h÷h³jJ=h´KShj=ubhÌ)�”}”(hŒ**Description**”h]”jr )�”}”(hjo=h]”hŒ Description”…”�”}”(hjq=h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hjm=ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œc/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:208: ./include/linux/dma-fence-chain.h”h´KUhj=ubhÌ)�”}”(hŒ®This specialized allocator has to be a macro for its allocations to be accounted separately (to have a separate alloc_tag). The typecast is intentional to enforce typesafety.”h]”hŒ®This specialized allocator has to be a macro for its allocations to be accounted separately (to have a separate alloc_tag). The typecast is intentional to enforce typesafety.”…”�”}”(hj…=h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œc/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:208: ./include/linux/dma-fence-chain.h”h´KThj=ubeh}”(h]”h ]”h"]”h$]”h&]”uh1h÷h³jJ=h´KShj�/h²hubjÉ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÕŒ!dma_fence_chain_free (C function)”Œc.dma_fence_chain_free”hNt”auh1jÈhj�/h²hh³Nh´NubjÛ)�”}”(hhh]”(jà)�”}”(hŒ9void dma_fence_chain_free (struct dma_fence_chain *chain)”h]”jæ)�”}”(hŒ8void dma_fence_chain_free(struct dma_fence_chain *chain)”h]”(jM)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj³=h²hh³Nh´Nubah}”(h]”h ]”jYah"]”h$]”h&]”uh1jLhj¯=h²hh³Œc/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:208: ./include/linux/dma-fence-chain.h”h´K^ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÂ=h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj¯=h²hh³jÁ=h´K^ubj )�”}”(hŒdma_fence_chain_free”h]”j )�”}”(hŒdma_fence_chain_free”h]”hŒdma_fence_chain_free”…”�”}”(hjÔ=h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjÐ=ubah}”(h]”h ]”(j' j( eh"]”h$]”h&]”j÷jøuh1j hj¯=h²hh³jÁ=h´K^ubjŒ)�”}”(hŒ(struct dma_fence_chain *chain)”h]”j’)�”}”(hŒstruct dma_fence_chain *chain”h]”(jì)�”}”(hjïh]”hŒstruct”…”�”}”(hjð=h²hh³Nh´Nubah}”(h]”h ]”jøah"]”h$]”h&]”uh1jëhjì=ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjý=h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjì=ubh)�”}”(hhh]”j )�”}”(hŒdma_fence_chain”h]”hŒdma_fence_chain”…”�”}”(hj>h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj >ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jîŒreftype”jGŒ reftarget”j>Œmodname”NŒ classname”Nj³j¶)�”}”j¹]”jO)�”}”jGjÖ=sbŒc.dma_fence_chain_free”†”asbuh1hhjì=ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj.>h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjì=ubjd)�”}”(hjgh]”hŒ*”…”�”}”(hj<>h²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchjì=ubj )�”}”(hŒchain”h]”hŒchain”…”�”}”(hjI>h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjì=ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj÷jøuh1j‘hjè=ubah}”(h]”h ]”h"]”h$]”h&]”j÷jøuh1j‹hj¯=h²hh³jÁ=h´K^ubeh}”(h]”h ]”h"]”h$]”h&]”j÷jøj2 ˆuh1jåj3 j4 hj«=h²hh³jÁ=h´K^ubah}”(h]”j¦=ah ]”(j8 j9 eh"]”h$]”h&]”j= ˆj> )j? huh1jßh³jÁ=h´K^hj¨=h²hubjA )�”}”(hhh]”hÌ)�”}”(hŒZFrees an allocated but not used :c:type:`struct dma_fence_chain ` object.”h]”(hŒ Frees an allocated but not used ”…”�”}”(hjs>h²hh³Nh´Nubh)�”}”(hŒ2:c:type:`struct dma_fence_chain `”h]”jâ)�”}”(hj}>h]”hŒstruct dma_fence_chain”…”�”}”(hj>h²hh³Nh´Nubah}”(h]”h ]”(jíjîŒc-type”eh"]”h$]”h&]”uh1jáhj{>ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”júŒ refdomain”jîŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰j³j¶)�”}”j¹]”j*>Œc.dma_fence_chain_free”†”asbjŒdma_fence_chain”uh1hh³Œc/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:208: ./include/linux/dma-fence-chain.h”h´Khjs>ubhŒ object.”…”�”}”(hjs>h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œc/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:208: ./include/linux/dma-fence-chain.h”h´K^hjp>h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j@ hj¨=h²hh³jÁ=h´K^ubeh}”(h]”h ]”(jîŒfunction”eh"]”h$]”h&]”ja jîjb j´>jc j´>jd ‰je ‰jf ‰uh1jÚh²hhj�/h³Nh´Nubjh )�”}”(hXx**Parameters** ``struct dma_fence_chain *chain`` chain node to free **Description** Frees up an allocated but not used struct dma_fence_chain object. This doesn't need an RCU grace period since the fence was never initialized nor published. After dma_fence_chain_init() has been called the fence must be released by calling dma_fence_put(), and not through this function.”h]”(hÌ)�”}”(hŒ**Parameters**”h]”jr )�”}”(hj¾>h]”hŒ Parameters”…”�”}”(hjÀ>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hj¼>ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œc/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:208: ./include/linux/dma-fence-chain.h”h´Kbhj¸>ubj´ )�”}”(hhh]”j¹ )�”}”(hŒ5``struct dma_fence_chain *chain`` chain node to free ”h]”(j¿ )�”}”(hŒ!``struct dma_fence_chain *chain``”h]”jâ)�”}”(hjÝ>h]”hŒstruct dma_fence_chain *chain”…”�”}”(hjß>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjÛ>ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œc/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:208: ./include/linux/dma-fence-chain.h”h´K`hj×>ubjÙ )�”}”(hhh]”hÌ)�”}”(hŒchain node to free”h]”hŒchain node to free”…”�”}”(hjö>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jò>h´K`hjó>ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hj×>ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³jò>h´K`hjÔ>ubah}”(h]”h ]”h"]”h$]”h&]”uh1j³ hj¸>ubhÌ)�”}”(hŒ**Description**”h]”jr )�”}”(hj?h]”hŒ Description”…”�”}”(hj?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hj?ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œc/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:208: ./include/linux/dma-fence-chain.h”h´Kbhj¸>ubhÌ)�”}”(hXFrees up an allocated but not used struct dma_fence_chain object. This doesn't need an RCU grace period since the fence was never initialized nor published. After dma_fence_chain_init() has been called the fence must be released by calling dma_fence_put(), and not through this function.”h]”hX!Frees up an allocated but not used struct dma_fence_chain object. This doesn’t need an RCU grace period since the fence was never initialized nor published. After dma_fence_chain_init() has been called the fence must be released by calling dma_fence_put(), and not through this function.”…”�”}”(hj.?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œc/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:208: ./include/linux/dma-fence-chain.h”h´Kahj¸>ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jg hj�/h²hh³Nh´NubjÉ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÕŒ"dma_fence_chain_for_each (C macro)”Œc.dma_fence_chain_for_each”hNt”auh1jÈhj�/h²hh³Nh´NubjÛ)�”}”(hhh]”(jà)�”}”(hŒdma_fence_chain_for_each”h]”jæ)�”}”(hŒdma_fence_chain_for_each”h]”j )�”}”(hŒdma_fence_chain_for_each”h]”j )�”}”(hjW?h]”hŒdma_fence_chain_for_each”…”�”}”(hja?h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj]?ubah}”(h]”h ]”(j' j( eh"]”h$]”h&]”j÷jøuh1j hjY?h²hh³Œc/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:208: ./include/linux/dma-fence-chain.h”h´Kmubah}”(h]”h ]”h"]”h$]”h&]”j÷jøj2 ˆuh1jåj3 j4 hjU?h²hh³jt?h´Kmubah}”(h]”jP?ah ]”(j8 j9 eh"]”h$]”h&]”j= ˆj> )j? huh1jßh³jt?h´KmhjR?h²hubjA )�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1j@ hjR?h²hh³jt?h´Kmubeh}”(h]”h ]”(jîŒmacro”eh"]”h$]”h&]”ja jîjb j�?jc j�?jd ‰je ‰jf ‰uh1jÚh²hhj�/h³Nh´NubhÌ)�”}”(hŒ)``dma_fence_chain_for_each (iter, head)``”h]”jâ)�”}”(hj“?h]”hŒ%dma_fence_chain_for_each (iter, head)”…”�”}”(hj•?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj‘?ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œc/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:208: ./include/linux/dma-fence-chain.h”h´Kohj�/h²hubhø)�”}”(hŒ!iterate over all fences in chain ”h]”hÌ)�”}”(hŒ iterate over all fences in chain”h]”hŒ iterate over all fences in chain”…”�”}”(hj­?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œc/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:208: ./include/linux/dma-fence-chain.h”h´Kmhj©?ubah}”(h]”h ]”h"]”h$]”h&]”uh1h÷h³j»?h´Kmhj�/h²hubjh )�”}”(hX**Parameters** ``iter`` current fence ``head`` starting point **Description** Iterate over all fences in the chain. We keep a reference to the current fence while inside the loop which must be dropped when breaking out. For a deep dive iterator see dma_fence_unwrap_for_each().”h]”(hÌ)�”}”(hŒ**Parameters**”h]”jr )�”}”(hjÈ?h]”hŒ Parameters”…”�”}”(hjÊ?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hjÆ?ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œc/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:208: ./include/linux/dma-fence-chain.h”h´KqhjÂ?ubj´ )�”}”(hhh]”(j¹ )�”}”(hŒ``iter`` current fence ”h]”(j¿ )�”}”(hŒ``iter``”h]”jâ)�”}”(hjç?h]”hŒiter”…”�”}”(hjé?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjå?ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œc/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:208: ./include/linux/dma-fence-chain.h”h´Knhjá?ubjÙ )�”}”(hhh]”hÌ)�”}”(hŒ current fence”h]”hŒ current fence”…”�”}”(hj@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jü?h´Knhjý?ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hjá?ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³jü?h´KnhjÞ?ubj¹ )�”}”(hŒ``head`` starting point ”h]”(j¿ )�”}”(hŒ``head``”h]”jâ)�”}”(hj @h]”hŒhead”…”�”}”(hj"@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj@ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œc/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:208: ./include/linux/dma-fence-chain.h”h´Kohj@ubjÙ )�”}”(hhh]”hÌ)�”}”(hŒstarting point”h]”hŒstarting point”…”�”}”(hj9@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j5@h´Kohj6@ubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hj@ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³j5@h´KohjÞ?ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j³ hjÂ?ubhÌ)�”}”(hŒ**Description**”h]”jr )�”}”(hj[@h]”hŒ Description”…”�”}”(hj]@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hjY@ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œc/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:208: ./include/linux/dma-fence-chain.h”h´KqhjÂ?ubhÌ)�”}”(hŒ�Iterate over all fences in the chain. We keep a reference to the current fence while inside the loop which must be dropped when breaking out.”h]”hŒ�Iterate over all fences in the chain. We keep a reference to the current fence while inside the loop which must be dropped when breaking out.”…”�”}”(hjq@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œc/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:208: ./include/linux/dma-fence-chain.h”h´KphjÂ?ubhÌ)�”}”(hŒ9For a deep dive iterator see dma_fence_unwrap_for_each().”h]”hŒ9For a deep dive iterator see dma_fence_unwrap_for_each().”…”�”}”(hj€@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œc/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:208: ./include/linux/dma-fence-chain.h”h´KshjÂ?ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jg hj�/h²hh³Nh´Nubeh}”(h]”Œdma-fence-chain”ah ]”h"]”Œdma fence chain”ah$]”h&]”uh1hµhjš­h²hh³hÊh´KËubh¶)�”}”(hhh]”(h»)�”}”(hŒDMA Fence unwrap”h]”hŒDMA Fence unwrap”…”�”}”(hj¡@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjž@h²hh³hÊh´KÔubjÉ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÕŒdma_fence_unwrap (C struct)”Œc.dma_fence_unwrap”hNt”auh1jÈhjž@h²hh³Nh´NubjÛ)�”}”(hhh]”(jà)�”}”(hŒdma_fence_unwrap”h]”jæ)�”}”(hŒstruct dma_fence_unwrap”h]”(jì)�”}”(hjïh]”hŒstruct”…”�”}”(hjÈ@h²hh³Nh´Nubah}”(h]”h ]”jøah"]”h$]”h&]”uh1jëhjÄ@h²hh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:214: ./include/linux/dma-fence-unwrap.h”h´Kubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÖ@h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjÄ@h²hh³jÕ@h´Kubj )�”}”(hŒdma_fence_unwrap”h]”j )�”}”(hjÂ@h]”hŒdma_fence_unwrap”…”�”}”(hjè@h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjä@ubah}”(h]”h ]”(j' j( eh"]”h$]”h&]”j÷jøuh1j hjÄ@h²hh³jÕ@h´Kubeh}”(h]”h ]”h"]”h$]”h&]”j÷jøj2 ˆuh1jåj3 j4 hjÀ@h²hh³jÕ@h´Kubah}”(h]”j»@ah ]”(j8 j9 eh"]”h$]”h&]”j= ˆj> )j? huh1jßh³jÕ@h´Khj½@h²hubjA )�”}”(hhh]”hÌ)�”}”(hŒ#cursor into the container structure”h]”hŒ#cursor into the container structure”…”�”}”(hj Ah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:214: ./include/linux/dma-fence-unwrap.h”h´KhjAh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j@ hj½@h²hh³jÕ@h´Kubeh}”(h]”h ]”(jîŒstruct”eh"]”h$]”h&]”ja jîjb j"Ajc j"Ajd ‰je ‰jf ‰uh1jÚh²hhjž@h³Nh´Nubjh )�”}”(hXo**Definition**:: struct dma_fence_unwrap { struct dma_fence *chain; struct dma_fence *array; unsigned int index; }; **Members** ``chain`` potential dma_fence_chain, but can be other fence as well ``array`` potential dma_fence_array, but can be other fence as well ``index`` last returned index if **array** is really a dma_fence_array”h]”(hÌ)�”}”(hŒ**Definition**::”h]”(jr )�”}”(hŒ**Definition**”h]”hŒ Definition”…”�”}”(hj.Ah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hj*AubhŒ:”…”�”}”(hj*Ah²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:214: ./include/linux/dma-fence-unwrap.h”h´Khj&Aubjè)�”}”(hŒnstruct dma_fence_unwrap { struct dma_fence *chain; struct dma_fence *array; unsigned int index; };”h]”hŒnstruct dma_fence_unwrap { struct dma_fence *chain; struct dma_fence *array; unsigned int index; };”…”�”}”hjGAsbah}”(h]”h ]”h"]”h$]”h&]”j÷jøuh1jçh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:214: ./include/linux/dma-fence-unwrap.h”h´Khj&AubhÌ)�”}”(hŒ **Members**”h]”jr )�”}”(hjXAh]”hŒMembers”…”�”}”(hjZAh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hjVAubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:214: ./include/linux/dma-fence-unwrap.h”h´Khj&Aubj´ )�”}”(hhh]”(j¹ )�”}”(hŒD``chain`` potential dma_fence_chain, but can be other fence as well ”h]”(j¿ )�”}”(hŒ ``chain``”h]”jâ)�”}”(hjwAh]”hŒchain”…”�”}”(hjyAh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjuAubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:214: ./include/linux/dma-fence-unwrap.h”h´KhjqAubjÙ )�”}”(hhh]”hÌ)�”}”(hŒ9potential dma_fence_chain, but can be other fence as well”h]”hŒ9potential dma_fence_chain, but can be other fence as well”…”�”}”(hj�Ah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jŒAh´Khj�Aubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hjqAubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³jŒAh´KhjnAubj¹ )�”}”(hŒD``array`` potential dma_fence_array, but can be other fence as well ”h]”(j¿ )�”}”(hŒ ``array``”h]”jâ)�”}”(hj°Ah]”hŒarray”…”�”}”(hj²Ah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj®Aubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:214: ./include/linux/dma-fence-unwrap.h”h´KhjªAubjÙ )�”}”(hhh]”hÌ)�”}”(hŒ9potential dma_fence_array, but can be other fence as well”h]”hŒ9potential dma_fence_array, but can be other fence as well”…”�”}”(hjÉAh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jÅAh´KhjÆAubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hjªAubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³jÅAh´KhjnAubj¹ )�”}”(hŒF``index`` last returned index if **array** is really a dma_fence_array”h]”(j¿ )�”}”(hŒ ``index``”h]”jâ)�”}”(hjéAh]”hŒindex”…”�”}”(hjëAh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjçAubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:214: ./include/linux/dma-fence-unwrap.h”h´KhjãAubjÙ )�”}”(hhh]”hÌ)�”}”(hŒBh]”hŒ Description”…”�”}”(hj@Bh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hj )j? huh1jßh³j“Bh´K(hjqBh²hubjA )�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1j@ hjqBh²hh³j“Bh´K(ubeh}”(h]”h ]”(jîŒmacro”eh"]”h$]”h&]”ja jîjb j¬Bjc j¬Bjd ‰je ‰jf ‰uh1jÚh²hhjž@h³Nh´NubhÌ)�”}”(hŒ3``dma_fence_unwrap_for_each (fence, cursor, head)``”h]”jâ)�”}”(hj²Bh]”hŒ/dma_fence_unwrap_for_each (fence, cursor, head)”…”�”}”(hj´Bh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj°Bubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:214: ./include/linux/dma-fence-unwrap.h”h´K*hjž@h²hubhø)�”}”(hŒ&iterate over all fences in containers ”h]”hÌ)�”}”(hŒ%iterate over all fences in containers”h]”hŒ%iterate over all fences in containers”…”�”}”(hjÌBh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:214: ./include/linux/dma-fence-unwrap.h”•rh´K(hjÈBubah}”(h]”h ]”h"]”h$]”h&]”uh1h÷h³jÚBh´K(hjž@h²hubjh )�”}”(hXA**Parameters** ``fence`` current fence ``cursor`` current position inside the containers ``head`` starting point for the iterator **Description** Unwrap dma_fence_chain and dma_fence_array containers and deep dive into all potential fences in them. If **head** is just a normal fence only that one is returned.”h]”(hÌ)�”}”(hŒ**Parameters**”h]”jr )�”}”(hjçBh]”hŒ Parameters”…”�”}”(hjéBh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hjåBubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:214: ./include/linux/dma-fence-unwrap.h”h´K,hjáBubj´ )�”}”(hhh]”(j¹ )�”}”(hŒ``fence`` current fence ”h]”(j¿ )�”}”(hŒ ``fence``”h]”jâ)�”}”(hjCh]”hŒfence”…”�”}”(hjCh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjCubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:214: ./include/linux/dma-fence-unwrap.h”h´K)hjCubjÙ )�”}”(hhh]”hÌ)�”}”(hŒ current fence”h]”hŒ current fence”…”�”}”(hjCh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jCh´K)hjCubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hjCubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³jCh´K)hjýBubj¹ )�”}”(hŒ2``cursor`` current position inside the containers ”h]”(j¿ )�”}”(hŒ ``cursor``”h]”jâ)�”}”(hj?Ch]”hŒcursor”…”�”}”(hjACh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj=Cubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:214: ./include/linux/dma-fence-unwrap.h”h´K*hj9CubjÙ )�”}”(hhh]”hÌ)�”}”(hŒ¤t position inside the containers”h]”hŒ¤t position inside the containers”…”�”}”(hjXCh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jTCh´K*hjUCubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hj9Cubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³jTCh´K*hjýBubj¹ )�”}”(hŒ)``head`` starting point for the iterator ”h]”(j¿ )�”}”(hŒ``head``”h]”jâ)�”}”(hjxCh]”hŒhead”…”�”}”(hjzCh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjvCubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:214: ./include/linux/dma-fence-unwrap.h”h´K+hjrCubjÙ )�”}”(hhh]”hÌ)�”}”(hŒstarting point for the iterator”h]”hŒstarting point for the iterator”…”�”}”(hj‘Ch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j�Ch´K+hjŽCubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hjrCubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³j�Ch´K+hjýBubeh}”(h]”h ]”h"]”h$]”h&]”uh1j³ hjáBubhÌ)�”}”(hŒ**Description**”h]”jr )�”}”(hj³Ch]”hŒ Description”…”�”}”(hjµCh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hj±Cubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:214: ./include/linux/dma-fence-unwrap.h”h´K-hjáBubhÌ)�”}”(hŒ¤Unwrap dma_fence_chain and dma_fence_array containers and deep dive into all potential fences in them. If **head** is just a normal fence only that one is returned.”h]”(hŒjUnwrap dma_fence_chain and dma_fence_array containers and deep dive into all potential fences in them. If ”…”�”}”(hjÉCh²hh³Nh´Nubjr )�”}”(hŒ**head**”h]”hŒhead”…”�”}”(hjÑCh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hjÉCubhŒ2 is just a normal fence only that one is returned.”…”�”}”(hjÉCh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:214: ./include/linux/dma-fence-unwrap.h”h´K,hjáBubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jg hjž@h²hh³Nh´NubjÉ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÕŒ dma_fence_unwrap_merge (C macro)”Œc.dma_fence_unwrap_merge”hNt”auh1jÈhjž@h²hh³Nh´NubjÛ)�”}”(hhh]”(jà)�”}”(hŒdma_fence_unwrap_merge”h]”jæ)�”}”(hŒdma_fence_unwrap_merge”h]”j )�”}”(hŒdma_fence_unwrap_merge”h]”j )�”}”(hjDh]”hŒdma_fence_unwrap_merge”…”�”}”(hjDh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj Dubah}”(h]”h ]”(j' j( eh"]”h$]”h&]”j÷jøuh1j hjDh²hh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:214: ./include/linux/dma-fence-unwrap.h”h´K )j? huh1jßh³j!Dh´KDubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:214: ./include/linux/dma-fence-unwrap.h”h´K>hjž@h²hubhø)�”}”(hŒunwrap and merge fences ”h]”hÌ)�”}”(hŒunwrap and merge fences”h]”hŒunwrap and merge fences”…”�”}”(hjZDh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:214: ./include/linux/dma-fence-unwrap.h”h´KEah ]”(j8 j9 eh"]”h$]”h&]”j= ˆj> )j? huh1jßh³jXEh´K9hj@Eh²hubjA )�”}”(hhh]”hÌ)�”}”(hŒcreates a sync file”h]”hŒcreates a sync file”…”�”}”(hjFFh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:220: ./drivers/dma-buf/sync_file.c”h´K9hjCFh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j@ hj@Eh²hh³jXEh´K9ubeh}”(h]”h ]”(jîŒfunction”eh"]”h$]”h&]”ja jîjb j^Fjc j^Fjd ‰je ‰jf ‰uh1jÚh²hhj!Eh³Nh´Nubjh )�”}”(hXh**Parameters** ``struct dma_fence *fence`` fence to add to the sync_fence **Description** Creates a sync_file containg **fence**. This function acquires and additional reference of **fence** for the newly-created :c:type:`sync_file`, if it succeeds. The sync_file can be released with fput(sync_file->file). Returns the sync_file or NULL in case of error.”h]”(hÌ)�”}”(hŒ**Parameters**”h]”jr )�”}”(hjhFh]”hŒ Parameters”…”�”}”(hjjFh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hjfFubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:220: ./drivers/dma-buf/sync_file.c”h´K=hjbFubj´ )�”}”(hhh]”j¹ )�”}”(hŒ;``struct dma_fence *fence`` fence to add to the sync_fence ”h]”(j¿ )�”}”(hŒ``struct dma_fence *fence``”h]”jâ)�”}”(hj‡Fh]”hŒstruct dma_fence *fence”…”�”}”(hj‰Fh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj…Fubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:220: ./drivers/dma-buf/sync_file.c”h´K:hj�FubjÙ )�”}”(hhh]”hÌ)�”}”(hŒfence to add to the sync_fence”h]”hŒfence to add to the sync_fence”…”�”}”(hj Fh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jœFh´K:hj�Fubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hj�Fubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³jœFh´K:hj~Fubah}”(h]”h ]”h"]”h$]”h&]”uh1j³ hjbFubhÌ)�”}”(hŒ**Description**”h]”jr )�”}”(hjÂFh]”hŒ Description”…”�”}”(hjÄFh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hjÀFubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:220: ./drivers/dma-buf/sync_file.c”h´Kfile). Returns the sync_file or NULL in case of error.”h]”(hŒCreates a sync_file containg ”…”�”}”(hjØFh²hh³Nh´Nubjr )�”}”(hŒ **fence**”h]”hŒfence”…”�”}”(hjàFh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hjØFubhŒ5. This function acquires and additional reference of ”…”�”}”(hjØFh²hh³Nh´Nubjr )�”}”(hŒ **fence**”h]”hŒfence”…”�”}”(hjòFh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hjØFubhŒ for the newly-created ”…”�”}”(hjØFh²hh³Nh´Nubh)�”}”(hŒ:c:type:`sync_file`”h]”jâ)�”}”(hjGh]”hŒ sync_file”…”�”}”(hjGh²hh³Nh´Nubah}”(h]”h ]”(jíjîŒc-type”eh"]”h$]”h&]”uh1jáhjGubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”júŒ refdomain”jîŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰j³j·jŒ sync_file”uh1hh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:220: ./drivers/dma-buf/sync_file.c”h´K;hjØFubhŒ{, if it succeeds. The sync_file can be released with fput(sync_file->file). Returns the sync_file or NULL in case of error.”…”�”}”(hjØFh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j#Gh´K;hjbFubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jg hj!Eh²hh³Nh´NubjÉ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÕŒ sync_file_get_fence (C function)”Œc.sync_file_get_fence”hNt”auh1jÈhj!Eh²hh³Nh´NubjÛ)�”}”(hhh]”(jà)�”}”(hŒ/struct dma_fence * sync_file_get_fence (int fd)”h]”jæ)�”}”(hŒ-struct dma_fence *sync_file_get_fence(int fd)”h]”(jì)�”}”(hjïh]”hŒstruct”…”�”}”(hjNGh²hh³Nh´Nubah}”(h]”h ]”jøah"]”h$]”h&]”uh1jëhjJGh²hh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:220: ./drivers/dma-buf/sync_file.c”h´Kaubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj\Gh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjJGh²hh³j[Gh´Kaubh)�”}”(hhh]”j )�”}”(hŒ dma_fence”h]”hŒ dma_fence”…”�”}”(hjmGh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjjGubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jîŒreftype”jGŒ reftarget”joGŒmodname”NŒ classname”Nj³j¶)�”}”j¹]”jO)�”}”jGŒsync_file_get_fence”sbŒc.sync_file_get_fence”†”asbuh1hhjJGh²hh³j[Gh´Kaubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŽGh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjJGh²hh³j[Gh´Kaubjd)�”}”(hjgh]”hŒ*”…”�”}”(hjœGh²hh³Nh´Nubah}”(h]”h ]”jpah"]”h$]”h&]”uh1jchjJGh²hh³j[Gh´Kaubj )�”}”(hŒsync_file_get_fence”h]”j )�”}”(hj‹Gh]”hŒsync_file_get_fence”…”�”}”(hj­Gh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj©Gubah}”(h]”h ]”(j' j( eh"]”h$]”h&]”j÷jøuh1j hjJGh²hh³j[Gh´KaubjŒ)�”}”(hŒ(int fd)”h]”j’)�”}”(hŒint fd”h]”(jM)�”}”(hŒint”h]”hŒint”…”�”}”(hjÈGh²hh³Nh´Nubah}”(h]”h ]”jYah"]”h$]”h&]”uh1jLhjÄGubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÖGh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjÄGubj )�”}”(hŒfd”h]”hŒfd”…”�”}”(hjäGh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjÄGubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj÷jøuh1j‘hjÀGubah}”(h]”h ]”h"]”h$]”h&]”j÷jøuh1j‹hjJGh²hh³j[Gh´Kaubeh}”(h]”h ]”h"]”h$]”h&]”j÷jøj2 ˆuh1jåj3 j4 hjFGh²hh³j[Gh´Kaubah}”(h]”jAGah ]”(j8 j9 eh"]”h$]”h&]”j= ˆj> )j? huh1jßh³j[Gh´KahjCGh²hubjA )�”}”(hhh]”hÌ)�”}”(hŒ)get the fence related to the sync_file fd”h]”hŒ)get the fence related to the sync_file fd”…”�”}”(hjHh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:220: ./drivers/dma-buf/sync_file.c”h´Kahj Hh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j@ hjCGh²hh³j[Gh´Kaubeh}”(h]”h ]”(jîŒfunction”eh"]”h$]”h&]”ja jîjb j&Hjc j&Hjd ‰je ‰jf ‰uh1jÚh²hhj!Eh³Nh´Nubjh )�”}”(hŒØ**Parameters** ``int fd`` sync_file fd to get the fence from **Description** Ensures **fd** references a valid sync_file and returns a fence that represents all fence in the sync_file. On error NULL is returned.”h]”(hÌ)�”}”(hŒ**Parameters**”h]”jr )�”}”(hj0Hh]”hŒ Parameters”…”�”}”(hj2Hh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hj.Hubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:220: ./drivers/dma-buf/sync_file.c”h´Kehj*Hubj´ )�”}”(hhh]”j¹ )�”}”(hŒ.``int fd`` sync_file fd to get the fence from ”h]”(j¿ )�”}”(hŒ ``int fd``”h]”jâ)�”}”(hjOHh]”hŒint fd”…”�”}”(hjQHh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjMHubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:220: ./drivers/dma-buf/sync_file.c”h´KbhjIHubjÙ )�”}”(hhh]”hÌ)�”}”(hŒ"sync_file fd to get the fence from”h]”hŒ"sync_file fd to get the fence from”…”�”}”(hjhHh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jdHh´KbhjeHubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hjIHubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³jdHh´KbhjFHubah}”(h]”h ]”h"]”h$]”h&]”uh1j³ hj*HubhÌ)�”}”(hŒ**Description**”h]”jr )�”}”(hjŠHh]”hŒ Description”…”�”}”(hjŒHh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hjˆHubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:220: ./drivers/dma-buf/sync_file.c”h´Kdhj*HubhÌ)�”}”(hŒ†Ensures **fd** references a valid sync_file and returns a fence that represents all fence in the sync_file. On error NULL is returned.”h]”(hŒEnsures ”…”�”}”(hj Hh²hh³Nh´Nubjr )�”}”(hŒ**fd**”h]”hŒfd”…”�”}”(hj¨Hh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hj HubhŒx references a valid sync_file and returns a fence that represents all fence in the sync_file. On error NULL is returned.”…”�”}”(hj Hh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:220: ./drivers/dma-buf/sync_file.c”h´Kchj*Hubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jg hj!Eh²hh³Nh´NubjÉ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÕŒsync_file (C struct)”Œ c.sync_file”hNt”auh1jÈhj!Eh²hh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:223: ./include/linux/sync_file.h”h´NubjÛ)�”}”(hhh]”(jà)�”}”(hŒ sync_file”h]”jæ)�”}”(hŒstruct sync_file”h]”(jì)�”}”(hjïh]”hŒstruct”…”�”}”(hjâHh²hh³Nh´Nubah}”(h]”h ]”jøah"]”h$]”h&]”uh1jëhjÞHh²hh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:223: ./include/linux/sync_file.h”h´Kubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjðHh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjÞHh²hh³jïHh´Kubj )�”}”(hŒ sync_file”h]”j )�”}”(hjÜHh]”hŒ sync_file”…”�”}”(hjIh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjþHubah}”(h]”h ]”(j' j( eh"]”h$]”h&]”j÷jøuh1j hjÞHh²hh³jïHh´Kubeh}”(h]”h ]”h"]”h$]”h&]”j÷jøj2 ˆuh1jåj3 j4 hjÚHh²hh³jïHh´Kubah}”(h]”jÔHah ]”(j8 j9 eh"]”h$]”h&]”j= ˆj> )j? huh1jßh³jïHh´Khj×Hh²hubjA )�”}”(hhh]”hÌ)�”}”(hŒ$sync file to export to the userspace”h]”hŒ$sync file to export to the userspace”…”�”}”(hj$Ih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:223: ./include/linux/sync_file.h”h´Khj!Ih²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j@ hj×Hh²hh³jïHh´Kubeh}”(h]”h ]”(jîŒstruct”eh"]”h$]”h&]”ja jîjb j )j? huh1jßh³j�Kh´KhjxKh²hubjA )�”}”(hhh]”hÌ)�”}”(hŒ SYNC_IOC_MERGE: merge two fences”h]”hŒ SYNC_IOC_MERGE: merge two fences”…”�”}”(hjÅKh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œb/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:229: ./include/uapi/linux/sync_file.h”h´KhjÂKh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j@ hjxKh²hh³j�Kh´Kubeh}”(h]”h ]”(jîŒstruct”eh"]”h$]”h&]”ja jîjb jÝKjc jÝKjd ‰je ‰jf ‰uh1jÚh²hhjXKh³jwKh´Nubjh )�”}”(hX{**Definition**:: struct sync_merge_data { char name[32]; __s32 fd2; __s32 fence; __u32 flags; __u32 pad; }; **Members** ``name`` name of new fence ``fd2`` file descriptor of second fence ``fence`` returns the fd of the new fence to userspace ``flags`` merge_data flags ``pad`` padding for 64-bit alignment, should always be zero”h]”(hÌ)�”}”(hŒ**Definition**::”h]”(jr )�”}”(hŒ**Definition**”h]”hŒ Definition”…”�”}”(hjéKh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hjåKubhŒ:”…”�”}”(hjåKh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œb/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:229: ./include/uapi/linux/sync_file.h”h´KhjáKubjè)�”}”(hŒnstruct sync_merge_data { char name[32]; __s32 fd2; __s32 fence; __u32 flags; __u32 pad; };”h]”hŒnstruct sync_merge_data { char name[32]; __s32 fd2; __s32 fence; __u32 flags; __u32 pad; };”…”�”}”hjLsbah}”(h]”h ]”h"]”h$]”h&]”j÷jøuh1jçh³Œb/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:229: ./include/uapi/linux/sync_file.h”h´KhjáKubhÌ)�”}”(hŒ **Members**”h]”jr )�”}”(hjLh]”hŒMembers”…”�”}”(hjLh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hjLubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œb/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:229: ./include/uapi/linux/sync_file.h”h´K!hjáKubj´ )�”}”(hhh]”(j¹ )�”}”(hŒ``name`` name of new fence ”h]”(j¿ )�”}”(hŒ``name``”h]”jâ)�”}”(hj2Lh]”hŒname”…”�”}”(hj4Lh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj0Lubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œb/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:229: ./include/uapi/linux/sync_file.h”h´Khj,LubjÙ )�”}”(hhh]”hÌ)�”}”(hŒname of new fence”h]”hŒname of new fence”…”�”}”(hjKLh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jGLh´KhjHLubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hj,Lubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³jGLh´Khj)Lubj¹ )�”}”(hŒ(``fd2`` file descriptor of second fence ”h]”(j¿ )�”}”(hŒ``fd2``”h]”jâ)�”}”(hjkLh]”hŒfd2”…”�”}”(hjmLh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjiLubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œb/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:229: ./include/uapi/linux/sync_file.h”h´KhjeLubjÙ )�”}”(hhh]”hÌ)�”}”(hŒfile descriptor of second fence”h]”hŒfile descriptor of second fence”…”�”}”(hj„Lh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j€Lh´Khj�Lubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hjeLubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³j€Lh´Khj)Lubj¹ )�”}”(hŒ7``fence`` returns the fd of the new fence to userspace ”h]”(j¿ )�”}”(hŒ ``fence``”h]”jâ)�”}”(hj¤Lh]”hŒfence”…”�”}”(hj¦Lh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj¢Lubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œb/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:229: ./include/uapi/linux/sync_file.h”h´KhjžLubjÙ )�”}”(hhh]”hÌ)�”}”(hŒ,returns the fd of the new fence to userspace”h]”hŒ,returns the fd of the new fence to userspace”…”�”}”(hj½Lh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j¹Lh´KhjºLubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hjžLubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³j¹Lh´Khj)Lubj¹ )�”}”(hŒ``flags`` merge_data flags ”h]”(j¿ )�”}”(hŒ ``flags``”h]”jâ)�”}”(hjÝLh]”hŒflags”…”�”}”(hjßLh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjÛLubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œb/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:229: ./include/uapi/linux/sync_file.h”h´Khj×LubjÙ )�”}”(hhh]”hÌ)�”}”(hŒmerge_data flags”h]”hŒmerge_data flags”…”�”}”(hjöLh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jòLh´KhjóLubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hj×Lubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³jòLh´Khj)Lubj¹ )�”}”(hŒ;``pad`` padding for 64-bit alignment, should always be zero”h]”(j¿ )�”}”(hŒ``pad``”h]”jâ)�”}”(hjMh]”hŒpad”…”�”}”(hjMh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjMubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œb/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:229: ./include/uapi/linux/sync_file.h”h´KhjMubjÙ )�”}”(hhh]”hÌ)�”}”(hŒ3padding for 64-bit alignment, should always be zero”h]”hŒ3padding for 64-bit alignment, should always be zero”…”�”}”(hj/Mh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œb/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:229: ./include/uapi/linux/sync_file.h”h´Khj,Mubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hjMubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³j+Mh´Khj)Lubeh}”(h]”h ]”h"]”h$]”h&]”uh1j³ hjáKubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jg hjXKh²hh³jwKh´NubhÌ)�”}”(hŒ**Description**”h]”jr )�”}”(hjYMh]”hŒ Description”…”�”}”(hj[Mh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hjWMubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œb/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:229: ./include/uapi/linux/sync_file.h”h´KhjXKh²hubhÌ)�”}”(hŒšCreates a new fence containing copies of the sync_pts in both the calling fd and sync_merge_data.fd2. Returns the new fence's fd in sync_merge_data.fence”h]”hŒœCreates a new fence containing copies of the sync_pts in both the calling fd and sync_merge_data.fd2. Returns the new fence’s fd in sync_merge_data.fence”…”�”}”(hjoMh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œb/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:229: ./include/uapi/linux/sync_file.h”h´KhjXKh²hubjÉ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÕŒsync_fence_info (C struct)”Œc.sync_fence_info”hNt”auh1jÈhjXKh²hh³jwKh´NubjÛ)�”}”(hhh]”(jà)�”}”(hŒsync_fence_info”h]”jæ)�”}”(hŒstruct sync_fence_info”h]”(jì)�”}”(hjïh]”hŒstruct”…”�”}”(hj—Mh²hh³Nh´Nubah}”(h]”h ]”jøah"]”h$]”h&]”uh1jëhj“Mh²hh³Œb/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:229: ./include/uapi/linux/sync_file.h”h´K ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¥Mh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj“Mh²hh³j¤Mh´K ubj )�”}”(hŒsync_fence_info”h]”j )�”}”(hj‘Mh]”hŒsync_fence_info”…”�”}”(hj·Mh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj³Mubah}”(h]”h ]”(j' j( eh"]”h$]”h&]”j÷jøuh1j hj“Mh²hh³j¤Mh´K ubeh}”(h]”h ]”h"]”h$]”h&]”j÷jøj2 ˆuh1jåj3 j4 hj�Mh²hh³j¤Mh´K ubah}”(h]”jŠMah ]”(j8 j9 eh"]”h$]”h&]”j= ˆj> )j? huh1jßh³j¤Mh´K hjŒMh²hubjA )�”}”(hhh]”hÌ)�”}”(hŒdetailed fence information”h]”hŒdetailed fence information”…”�”}”(hjÙMh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œb/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:229: ./include/uapi/linux/sync_file.h”h´K'hjÖMh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j@ hjŒMh²hh³j¤Mh´K ubeh}”(h]”h ]”(jîŒstruct”eh"]”h$]”h&]”ja jîjb jñMjc jñMjd ‰je ‰jf ‰uh1jÚh²hhjXKh³jwKh´Nubjh )�”}”(hX¶**Definition**:: struct sync_fence_info { char obj_name[32]; char driver_name[32]; __s32 status; __u32 flags; __u64 timestamp_ns; }; **Members** ``obj_name`` name of parent sync_timeline ``driver_name`` name of driver implementing the parent ``status`` status of the fence 0:active 1:signaled <0:error ``flags`` fence_info flags ``timestamp_ns`` timestamp of status change in nanoseconds”h]”(hÌ)�”}”(hŒ**Definition**::”h]”(jr )�”}”(hŒ**Definition**”h]”hŒ Definition”…”�”}”(hjýMh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hjùMubhŒ:”…”�”}”(hjùMh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œb/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:229: ./include/uapi/linux/sync_file.h”h´K+hjõMubjè)�”}”(hŒ‡struct sync_fence_info { char obj_name[32]; char driver_name[32]; __s32 status; __u32 flags; __u64 timestamp_ns; };”h]”hŒ‡struct sync_fence_info { char obj_name[32]; char driver_name[32]; __s32 status; __u32 flags; __u64 timestamp_ns; };”…”�”}”hjNsbah}”(h]”h ]”h"]”h$]”h&]”j÷jøuh1jçh³Œb/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:229: ./include/uapi/linux/sync_file.h”h´K-hjõMubhÌ)�”}”(hŒ **Members**”h]”jr )�”}”(hj'Nh]”hŒMembers”…”�”}”(hj)Nh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hj%Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œb/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:229: ./include/uapi/linux/sync_file.h”h´K5hjõMubj´ )�”}”(hhh]”(j¹ )�”}”(hŒ*``obj_name`` name of parent sync_timeline ”h]”(j¿ )�”}”(hŒ ``obj_name``”h]”jâ)�”}”(hjFNh]”hŒobj_name”…”�”}”(hjHNh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjDNubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œb/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:229: ./include/uapi/linux/sync_file.h”h´K)hj@NubjÙ )�”}”(hhh]”hÌ)�”}”(hŒname of parent sync_timeline”h]”hŒname of parent sync_timeline”…”�”}”(hj_Nh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j[Nh´K)hj\Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hj@Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³j[Nh´K)hj=Nubj¹ )�”}”(hŒ7``driver_name`` name of driver implementing the parent ”h]”(j¿ )�”}”(hŒ``driver_name``”h]”jâ)�”}”(hjNh]”hŒ driver_name”…”�”}”(hj�Nh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj}Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œb/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:229: ./include/uapi/linux/sync_file.h”h´K*hjyNubjÙ )�”}”(hhh]”hÌ)�”}”(hŒ&name of driver implementing the parent”h]”hŒ&name of driver implementing the parent”…”�”}”(hj˜Nh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j”Nh´K*hj•Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hjyNubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³j”Nh´K*hj=Nubj¹ )�”}”(hŒ<``status`` status of the fence 0:active 1:signaled <0:error ”h]”(j¿ )�”}”(hŒ ``status``”h]”jâ)�”}”(hj¸Nh]”hŒstatus”…”�”}”(hjºNh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj¶Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œb/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:229: ./include/uapi/linux/sync_file.h”h´K+hj²NubjÙ )�”}”(hhh]”hÌ)�”}”(hŒ0status of the fence 0:active 1:signaled <0:error”h]”hŒ0status of the fence 0:active 1:signaled <0:error”…”�”}”(hjÑNh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jÍNh´K+hjÎNubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hj²Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³jÍNh´K+hj=Nubj¹ )�”}”(hŒ``flags`` fence_info flags ”h]”(j¿ )�”}”(hŒ ``flags``”h]”jâ)�”}”(hjñNh]”hŒflags”…”�”}”(hjóNh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjïNubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œb/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:229: ./include/uapi/linux/sync_file.h”h´K,hjëNubjÙ )�”}”(hhh]”hÌ)�”}”(hŒfence_info flags”h]”hŒfence_info flags”…”�”}”(hj Oh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jOh´K,hjOubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hjëNubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³jOh´K,hj=Nubj¹ )�”}”(hŒ:``timestamp_ns`` timestamp of status change in nanoseconds”h]”(j¿ )�”}”(hŒ``timestamp_ns``”h]”jâ)�”}”(hj*Oh]”hŒ timestamp_ns”…”�”}”(hj,Oh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj(Oubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œb/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:229: ./include/uapi/linux/sync_file.h”h´K,hj$OubjÙ )�”}”(hhh]”hÌ)�”}”(hŒ)timestamp of status change in nanoseconds”h]”hŒ)timestamp of status change in nanoseconds”…”�”}”(hjCOh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œb/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:229: ./include/uapi/linux/sync_file.h”h´K-hj@Oubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hj$Oubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³j?Oh´K,hj=Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j³ hjõMubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jg hjXKh²hh³jwKh´NubjÉ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÕŒsync_file_info (C struct)”Œc.sync_file_info”hNt”auh1jÈhjXKh²hh³jwKh´NubjÛ)�”}”(hhh]”(jà)�”}”(hŒsync_file_info”h]”jæ)�”}”(hŒstruct sync_file_info”h]”(jì)�”}”(hjïh]”hŒstruct”…”�”}”(hj„Oh²hh³Nh´Nubah}”(h]”h ]”jøah"]”h$]”h&]”uh1jëhj€Oh²hh³Œb/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:229: ./include/uapi/linux/sync_file.h”h´K3ubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj’Oh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhj€Oh²hh³j‘Oh´K3ubj )�”}”(hŒsync_file_info”h]”j )�”}”(hj~Oh]”hŒsync_file_info”…”�”}”(hj¤Oh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj Oubah}”(h]”h ]”(j' j( eh"]”h$]”h&]”j÷jøuh1j hj€Oh²hh³j‘Oh´K3ubeh}”(h]”h ]”h"]”h$]”h&]”j÷jøj2 ˆuh1jåj3 j4 hj|Oh²hh³j‘Oh´K3ubah}”(h]”jwOah ]”(j8 j9 eh"]”h$]”h&]”j= ˆj> )j? huh1jßh³j‘Oh´K3hjyOh²hubjA )�”}”(hhh]”hÌ)�”}”(hŒ;SYNC_IOC_FILE_INFO: get detailed information on a sync_file”h]”hŒ;SYNC_IOC_FILE_INFO: get detailed information on a sync_file”…”�”}”(hjÆOh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œb/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:229: ./include/uapi/linux/sync_file.h”h´K7hjÃOh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j@ hjyOh²hh³j‘Oh´K3ubeh}”(h]”h ]”(jîŒstruct”eh"]”h$]”h&]”ja jîjb jÞOjc jÞOjd ‰je ‰jf ‰uh1jÚh²hhjXKh³jwKh´Nubjh )�”}”(hX**Definition**:: struct sync_file_info { char name[32]; __s32 status; __u32 flags; __u32 num_fences; __u32 pad; __u64 sync_fence_info; }; **Members** ``name`` name of fence ``status`` status of fence. 1: signaled 0:active <0:error ``flags`` sync_file_info flags ``num_fences`` number of fences in the sync_file ``pad`` padding for 64-bit alignment, should always be zero ``sync_fence_info`` pointer to array of struct :c:type:`sync_fence_info` with all fences in the sync_file”h]”(hÌ)�”}”(hŒ**Definition**::”h]”(jr )�”}”(hŒ**Definition**”h]”hŒ Definition”…”�”}”(hjêOh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hjæOubhŒ:”…”�”}”(hjæOh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œb/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:229: ./include/uapi/linux/sync_file.h”h´K;hjâOubjè)�”}”(hŒ�struct sync_file_info { char name[32]; __s32 status; __u32 flags; __u32 num_fences; __u32 pad; __u64 sync_fence_info; };”h]”hŒ�struct sync_file_info { char name[32]; __s32 status; __u32 flags; __u32 num_fences; __u32 pad; __u64 sync_fence_info; };”…”�”}”hjPsbah}”(h]”h ]”h"]”h$]”h&]”j÷jøuh1jçh³Œb/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:229: ./include/uapi/linux/sync_file.h”h´K=hjâOubhÌ)�”}”(hŒ **Members**”h]”jr )�”}”(hjPh]”hŒMembers”…”�”}”(hjPh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hjPubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œb/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:229: ./include/uapi/linux/sync_file.h”h´KFhjâOubj´ )�”}”(hhh]”(j¹ )�”}”(hŒ``name`` name of fence ”h]”(j¿ )�”}”(hŒ``name``”h]”jâ)�”}”(hj3Ph]”hŒname”…”�”}”(hj5Ph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj1Pubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œb/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:229: ./include/uapi/linux/sync_file.h”h´K9hj-PubjÙ )�”}”(hhh]”hÌ)�”}”(hŒ name of fence”h]”hŒ name of fence”…”�”}”(hjLPh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jHPh´K9hjIPubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hj-Pubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³jHPh´K9hj*Pubj¹ )�”}”(hŒ:``status`` status of fence. 1: signaled 0:active <0:error ”h]”(j¿ )�”}”(hŒ ``status``”h]”jâ)�”}”(hjlPh]”hŒstatus”…”�”}”(hjnPh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjjPubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œb/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:229: ./include/uapi/linux/sync_file.h”h´K:hjfPubjÙ )�”}”(hhh]”hÌ)�”}”(hŒ.status of fence. 1: signaled 0:active <0:error”h]”hŒ.status of fence. 1: signaled 0:active <0:error”…”�”}”(hj…Ph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j�Ph´K:hj‚Pubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hjfPubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³j�Ph´K:hj*Pubj¹ )�”}”(hŒ``flags`` sync_file_info flags ”h]”(j¿ )�”}”(hŒ ``flags``”h]”jâ)�”}”(hj¥Ph]”hŒflags”…”�”}”(hj§Ph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj£Pubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œb/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:229: ./include/uapi/linux/sync_file.h”h´K;hjŸPubjÙ )�”}”(hhh]”hÌ)�”}”(hŒsync_file_info flags”h]”hŒsync_file_info flags”…”�”}”(hj¾Ph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jºPh´K;hj»Pubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hjŸPubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³jºPh´K;hj*Pubj¹ )�”}”(hŒ1``num_fences`` number of fences in the sync_file ”h]”(j¿ )�”}”(hŒ``num_fences``”h]”jâ)�”}”(hjÞPh]”hŒ num_fences”…”�”}”(hjàPh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjÜPubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œb/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:229: ./include/uapi/linux/sync_file.h”h´KhjJQubjÙ )�”}”(hhh]”hÌ)�”}”(hŒUpointer to array of struct :c:type:`sync_fence_info` with all fences in the sync_file”h]”(hŒpointer to array of struct ”…”�”}”(hjiQh²hh³Nh´Nubh)�”}”(hŒ:c:type:`sync_fence_info`”h]”jâ)�”}”(hjsQh]”hŒsync_fence_info”…”�”}”(hjuQh²hh³Nh´Nubah}”(h]”h ]”(jíjîŒc-type”eh"]”h$]”h&]”uh1jáhjqQubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”júŒ refdomain”jîŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰j³j·jŒsync_fence_info”uh1hh³jeQh´K>hjiQubhŒ! with all fences in the sync_file”…”�”}”(hjiQh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³jeQh´K>hjfQubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hjJQubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³jeQh´K>hj*Pubeh}”(h]”h ]”h"]”h$]”h&]”uh1j³ hjâOubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jg hjXKh²hh³jwKh´NubhÌ)�”}”(hŒ**Description**”h]”jr )�”}”(hjµQh]”hŒ Description”…”�”}”(hj·Qh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hj³Qubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œb/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:229: ./include/uapi/linux/sync_file.h”h´KBhjXKh²hubhÌ)�”}”(hXTakes a struct sync_file_info. If num_fences is 0, the field is updated with the actual number of fences. If num_fences is > 0, the system will use the pointer provided on sync_fence_info to return up to num_fences of struct sync_fence_info, with detailed fence information.”h]”hXTakes a struct sync_file_info. If num_fences is 0, the field is updated with the actual number of fences. If num_fences is > 0, the system will use the pointer provided on sync_fence_info to return up to num_fences of struct sync_fence_info, with detailed fence information.”…”�”}”(hjËQh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œb/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:229: ./include/uapi/linux/sync_file.h”h´K?hjXKh²hubjÉ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÕŒsync_set_deadline (C struct)”Œc.sync_set_deadline”hNt”auh1jÈhjXKh²hh³jwKh´NubjÛ)�”}”(hhh]”(jà)�”}”(hŒsync_set_deadline”h]”jæ)�”}”(hŒstruct sync_set_deadline”h]”(jì)�”}”(hjïh]”hŒstruct”…”�”}”(hjóQh²hh³Nh´Nubah}”(h]”h ]”jøah"]”h$]”h&]”uh1jëhjïQh²hh³Œb/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:229: ./include/uapi/linux/sync_file.h”h´KGubjþ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjRh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1jýhjïQh²hh³jRh´KGubj )�”}”(hŒsync_set_deadline”h]”j )�”}”(hjíQh]”hŒsync_set_deadline”…”�”}”(hjRh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjRubah}”(h]”h ]”(j' j( eh"]”h$]”h&]”j÷jøuh1j hjïQh²hh³jRh´KGubeh}”(h]”h ]”h"]”h$]”h&]”j÷jøj2 ˆuh1jåj3 j4 hjëQh²hh³jRh´KGubah}”(h]”jæQah ]”(j8 j9 eh"]”h$]”h&]”j= ˆj> )j? huh1jßh³jRh´KGhjèQh²hubjA )�”}”(hhh]”hÌ)�”}”(hŒ6SYNC_IOC_SET_DEADLINE - set a deadline hint on a fence”h]”hŒ6SYNC_IOC_SET_DEADLINE - set a deadline hint on a fence”…”�”}”(hj5Rh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œb/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:229: ./include/uapi/linux/sync_file.h”h´KPhj2Rh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j@ hjèQh²hh³jRh´KGubeh}”(h]”h ]”(jîŒstruct”eh"]”h$]”h&]”ja jîjb jMRjc jMRjd ‰je ‰jf ‰uh1jÚh²hhjXKh³jwKh´Nubjh )�”}”(hŒ³**Definition**:: struct sync_set_deadline { __u64 deadline_ns; __u64 pad; }; **Members** ``deadline_ns`` absolute time of the deadline ``pad`` must be zero”h]”(hÌ)�”}”(hŒ**Definition**::”h]”(jr )�”}”(hŒ**Definition**”h]”hŒ Definition”…”�”}”(hjYRh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hjURubhŒ:”…”�”}”(hjURh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œb/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:229: ./include/uapi/linux/sync_file.h”h´KThjQRubjè)�”}”(hŒCstruct sync_set_deadline { __u64 deadline_ns; __u64 pad; };”h]”hŒCstruct sync_set_deadline { __u64 deadline_ns; __u64 pad; };”…”�”}”hjrRsbah}”(h]”h ]”h"]”h$]”h&]”j÷jøuh1jçh³Œb/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:229: ./include/uapi/linux/sync_file.h”h´KVhjQRubhÌ)�”}”(hŒ **Members**”h]”jr )�”}”(hjƒRh]”hŒMembers”…”�”}”(hj…Rh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hj�Rubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œb/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:229: ./include/uapi/linux/sync_file.h”h´K[hjQRubj´ )�”}”(hhh]”(j¹ )�”}”(hŒ.``deadline_ns`` absolute time of the deadline ”h]”(j¿ )�”}”(hŒ``deadline_ns``”h]”jâ)�”}”(hj¢Rh]”hŒ deadline_ns”…”�”}”(hj¤Rh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj Rubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œb/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:229: ./include/uapi/linux/sync_file.h”h´KRhjœRubjÙ )�”}”(hhh]”hÌ)�”}”(hŒabsolute time of the deadline”h]”hŒabsolute time of the deadline”…”�”}”(hj»Rh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³j·Rh´KRhj¸Rubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hjœRubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³j·Rh´KRhj™Rubj¹ )�”}”(hŒ``pad`` must be zero”h]”(j¿ )�”}”(hŒ``pad``”h]”jâ)�”}”(hjÛRh]”hŒpad”…”�”}”(hjÝRh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjÙRubah}”(h]”h ]”h"]”h$]”h&]”uh1j¾ h³Œb/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:229: ./include/uapi/linux/sync_file.h”h´KRhjÕRubjÙ )�”}”(hhh]”hÌ)�”}”(hŒ must be zero”h]”hŒ must be zero”…”�”}”(hjôRh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œb/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:229: ./include/uapi/linux/sync_file.h”h´KShjñRubah}”(h]”h ]”h"]”h$]”h&]”uh1jØ hjÕRubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¸ h³jðRh´KRhj™Rubeh}”(h]”h ]”h"]”h$]”h&]”uh1j³ hjQRubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jg hjXKh²hh³jwKh´NubhÌ)�”}”(hŒ**Description**”h]”jr )�”}”(hjSh]”hŒ Description”…”�”}”(hj Sh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jq hjSubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³Œb/var/lib/git/docbuild/linux/Documentation/driver-api/dma-buf:229: ./include/uapi/linux/sync_file.h”h´KVhjXKh²hubhÌ)�”}”(hŒSAllows userspace to set a deadline on a fence, see :c:type:`dma_fence_set_deadline`”h]”(hŒ3Allows userspace to set a deadline on a fence, see ”…”�”}”(hj4Sh²hh³Nh´Nubh)�”}”(hŒ :c:type:`dma_fence_set_deadline`”h]”jâ)�”}”(hj>Sh]”hŒdma_fence_set_deadline”…”�”}”(hj@Sh²hh³Nh´Nubah}”(h]”h ]”(jíjîŒc-type”eh"]”h$]”h&]”uh1jáhj userspace [label="memory management"] userspace -> kernel [label="Future fence, fence proxy, ..."] { rank=same; kernel userspace } }”h]”hX9digraph "Fencing Cycle" { node [shape=box bgcolor=grey style=filled] kernel [label="Kernel DMA Fences"] userspace [label="userspace controlled fences"] kernel -> userspace [label="memory management"] userspace -> kernel [label="Future fence, fence proxy, ..."] { rank=same; kernel userspace } }”…”�”}”hj�Tsbah}”(h]”h ]”h"]”h$]”h&]”j÷jøuh1jçhjšTh³hÊubah}”(h]”h ]”h"]”h$]”h&]”Œalt”Œ#Indefinite Fencing Dependency Cycle”Œsrclang”ŒDOT”uh1j˜Thj”TubhŒcaption”“”)�”}”(hŒ#Indefinite Fencing Dependency Cycle”h]”hŒ#Indefinite Fencing Dependency Cycle”…”�”}”(hj·Th²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jµTh³hh´Khj”Tubeh}”(h]”Œid1”ah ]”h"]”h$]”h&]”Œalt”j²TŒcaption”j¹Tuh1j’ThjµSh²hh³hh´NubhÌ)�”}”(hX¹This means that the kernel might accidentally create deadlocks through memory management dependencies which userspace is unaware of, which randomly hangs workloads until the timeout kicks in. Workloads, which from userspace's perspective, do not contain a deadlock. In such a mixed fencing architecture there is no single entity with knowledge of all dependencies. Therefore preventing such deadlocks from within the kernel is not possible.”•ÞJh]”hX»This means that the kernel might accidentally create deadlocks through memory management dependencies which userspace is unaware of, which randomly hangs workloads until the timeout kicks in. Workloads, which from userspace’s perspective, do not contain a deadlock. In such a mixed fencing architecture there is no single entity with knowledge of all dependencies. Therefore preventing such deadlocks from within the kernel is not possible.”…”�”}”(hjÎTh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MhjµSh²hubhÌ)�”}”(hŒmThe only solution to avoid dependencies loops is by not allowing indefinite fences in the kernel. This means:”h]”hŒmThe only solution to avoid dependencies loops is by not allowing indefinite fences in the kernel. This means:”…”�”}”(hjÜTh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M$hjµSh²hubhþ)�”}”(hhh]”(j)�”}”(hŒfNo future fences, proxy fences or userspace fences imported as DMA fences, with or without a timeout. ”h]”hÌ)�”}”(hŒeNo future fences, proxy fences or userspace fences imported as DMA fences, with or without a timeout.”h]”hŒeNo future fences, proxy fences or userspace fences imported as DMA fences, with or without a timeout.”…”�”}”(hjñTh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M'hjíTubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjêTh²hh³hÊh´Nubj)�”}”(hŒâNo DMA fences that signal end of batchbuffer for command submission where userspace is allowed to use userspace fencing or long running compute workloads. This also means no implicit fencing for shared buffers in these cases. ”h]”hÌ)�”}”(hŒáNo DMA fences that signal end of batchbuffer for command submission where userspace is allowed to use userspace fencing or long running compute workloads. This also means no implicit fencing for shared buffers in these cases.”h]”hŒáNo DMA fences that signal end of batchbuffer for command submission where userspace is allowed to use userspace fencing or long running compute workloads. This also means no implicit fencing for shared buffers in these cases.”…”�”}”(hj Uh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M*hjUubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjêTh²hh³hÊh´Nubeh}”(h]”h ]”h"]”h$]”h&]”jRjguh1hýh³hÊh´M'hjµSh²hubeh}”(h]”Œindefinite-dma-fences”ah ]”h"]”Œindefinite dma fences”ah$]”h&]”uh1hµhjš­h²hh³hÊh´Kéubh¶)�”}”(hhh]”(h»)�”}”(hŒ-Recoverable Hardware Page Faults Implications”h]”hŒ-Recoverable Hardware Page Faults Implications”…”�”}”(hj.Uh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj+Uh²hh³hÊh´M0ubhÌ)�”}”(hŒaModern hardware supports recoverable page faults, which has a lot of implications for DMA fences.”h]”hŒaModern hardware supports recoverable page faults, which has a lot of implications for DMA fences.”…”�”}”(hjIn some ways this page fault problem is a special case of the ”…”�”}”(hjJVh²hh³Nh´NubhŒtitle_reference”“”)�”}”(hŒ`Infinite DMA Fences`”h]”hŒInfinite DMA Fences”…”�”}”(hjTVh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRVhjJVubhXM discussions: Infinite fences from compute workloads are allowed to depend on DMA fences, but not the other way around. And not even the page fault problem is new, because some other CPU thread in userspace might hit a page fault which holds up a userspace fence - supporting page faults on GPUs doesn’t anything fundamentally new.”…”�”}”(hjJVh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mthj+Uh²hubeh}”(h]”Œ-recoverable-hardware-page-faults-implications”ah ]”h"]”Œ-recoverable hardware page faults implications”ah$]”h&]”uh1hµhjš­h²hh³hÊh´M0ubeh}”(h]”Œ dma-fences”ah ]”h"]”Œ dma fences”ah$]”h&]”uh1hµhh·h²hh³hÊh´K¡ubeh}”(h]”Œ*buffer-sharing-and-synchronization-dma-buf”ah ]”h"]”Œ,buffer sharing and synchronization (dma-buf)”ah$]”h&]”uh1hµhhh²hh³hÊh´Kubeh}”(h]”h ]”h"]”h$]”h&]”Œsource”hÊuh1hŒcurrent_source”NŒ current_line”NŒsettings”Œdocutils.frontend”ŒValues”“”)�”}”(hºNŒ generator”NŒ datestamp”NŒ source_link”NŒ source_url”NŒ toc_backlinks”Œentry”Œfootnote_backlinks”KŒ sectnum_xform”KŒstrip_comments”NŒstrip_elements_with_classes”NŒ strip_classes”NŒ report_level”KŒ halt_level”KŒexit_status_level”KŒdebug”NŒwarning_stream”NŒ traceback”ˆŒinput_encoding”Œ utf-8-sig”Œinput_encoding_error_handler”Œstrict”Œoutput_encoding”Œutf-8”Œoutput_encoding_error_handler”j§VŒerror_encoding”Œutf-8”Œerror_encoding_error_handler”Œbackslashreplace”Œ language_code”Œen”Œrecord_dependencies”NŒconfig”NŒ id_prefix”hŒauto_id_prefix”Œid”Œ dump_settings”NŒdump_internals”NŒdump_transforms”NŒdump_pseudo_xml”NŒexpose_internals”NŒstrict_visitor”NŒ_disable_config”NŒ_source”hÊŒ _destination”NŒ _config_files”]”Œ7/var/lib/git/docbuild/linux/Documentation/docutils.conf”aŒfile_insertion_enabled”ˆŒ raw_enabled”KŒline_length_limit”M'Œpep_references”NŒ pep_base_url”Œhttps://peps.python.org/”Œpep_file_url_template”Œpep-%04d”Œrfc_references”NŒ rfc_base_url”Œ&https://datatracker.ietf.org/doc/html/”Œ tab_width”KŒtrim_footnote_reference_space”‰Œsyntax_highlight”Œlong”Œ smart_quotes”ˆŒsmartquotes_locales”]”Œcharacter_level_inline_markup”‰Œdoctitle_xform”‰Œ docinfo_xform”KŒsectsubtitle_xform”‰Œ image_loading”Œlink”Œembed_stylesheet”‰Œcloak_email_addresses”ˆŒsection_self_link”‰Œenv”NubŒreporter”NŒindirect_targets”]”Œsubstitution_defs”}”Œsubstitution_names”}”Œrefnames”}”(Œ cpu access to dma buffer objects”]”jÁaŒimplicit fence poll support”]”(jðjdUeŒdma buffer ioctls”]”jauŒrefids”}”Œnameids”}”(j�Vj~Vj~j{j¹bj¶bjIjFj�j�jujÒj´jjj-jåjâj±bj®bj—­j”­jyVjvVj/±j,±j]´jZ´jšµj—µjjj~/j{/j›@j˜@jEjEjUKjRKj²Sj¯Sj(Uj%UjqVjnVuŒ nametypes”}”(j�V‰j~‰j¹b‰jI‰j�‰ju‰j´‰j‰jå‰j±b‰j—­‰jyV‰j/±‰j]´‰jšµ‰j‰j~/‰j›@‰jE‰jUK‰j²S‰j(U‰jqV‰uh}”(j~Vh·j{jZj¶bj�jFj7j�jLjÒj“jjyj-j·j×jáj` je js jx jâjj®bjèjj j?jDj1j6j/j4j°jµjcjhjž"j£"j%j%j_'jd'j()j-)jÞ*jã*jd-ji-j¼/jÁ/j”2j™2jZ5j_5jÛ6jà6jü8j9jZ;j_;j†=j‹=jJ@jO@j’Bj—BjËDjÐDjÏFjÔFjÓHjØHj1Qj6QjØWjÝWjnYjsYj\j \jŠ^j�^j·_j¼_j8aj=aj”­j¼bj÷bjübjRdjWdj­ej²ejúgjÿgjžij£ij¨lj­ljþojpjØqjÝqj£sj¨sj‘uj–ujpwjuwjšyjŸyj}j}j€j€jƒjƒjÙ…jÞ…jˆjˆj=ŠjBŠj™ŒjžŒj/Žj4Žjø�jý�jç’jì’j‡•jŒ•j—j —j·˜j¼˜j7šj<šj¾›jÛj¨�j­�jD jI jÑ¢jÖ¢j ¥j¥j4§j9§jÒ¨jרjRªjWªj¬j"¬jvVjš­j,±jD¯jZ´j2±j—µj`´jj�µjºµj¿µj·j$·j³¸j¸¸j/ºj4ºj—»jœ»jÚ¼jß¼j¿j¿jÁjÁjÃÂjÈÂjœÄj¡ÄjCÆjHÆjÄÇjÉÇjvÊj{Êj4Ìj9ÌjÎjÎj¶Ïj»Ïj½ÒjÂÒjMÔjRÔjÆÖjËÖjZÙj_Ùj)Ýj.Ýj,ßj1ßjVáj[áj�åj”åj¥éjªéjìjìj�îj’îjˆòj�òjñójöójç÷jì÷jgùjlùjÂújÇúj~üjƒüj:þj?þj3j8jÔjÙjjjZj_j>jCjÿjj�j¢j j$ jH jM jqjvjÖjÛjfjkjßjäjsjxj›j jj j›j j{/jj4j9jµjºj[#j`#j±&j¶&j²(j·(jô)jù)j,j,jÖ-jÛ-j˜@j�/jž/j£/jZ1j_1jx3j}3jÌ6jÑ6jJ9jO9j;j ;jÂ<jÇ<j¦=j«=jP?jU?jEjž@j»@jÀ@joBjtBjýCjDjRKj!Ej>EjCEjAGjFGjÔHjÚHj¯SjXKjuKj{KjŠMj�MjwOj|OjæQjëQj%UjµSjnVj+UjÇTj”TuŒ footnote_refs”}”Œ citation_refs”}”Œ autofootnotes”]”Œautofootnote_refs”]”Œsymbol_footnotes”]”Œsymbol_footnote_refs”]”Œ footnotes”]”Œ citations”]”Œautofootnote_start”KŒsymbol_footnote_start”KŒ id_counter”Œ collections”ŒCounter”“”}”jµVKs…”R”Œparse_messages”]”Œtransform_messages”]”Œ transformer”NŒ include_log”]”Œ decoration”Nh²hub.