LCOV - code coverage report
Current view: top level - include/drm - drm_syncobj.h (source / functions) Hit Total Coverage
Test: coverage.info Lines: 0 3 0.0 %
Date: 2023-08-24 13:40:31 Functions: 0 0 -

          Line data    Source code
       1             : /*
       2             :  * Copyright © 2017 Red Hat
       3             :  *
       4             :  * Permission is hereby granted, free of charge, to any person obtaining a
       5             :  * copy of this software and associated documentation files (the "Software"),
       6             :  * to deal in the Software without restriction, including without limitation
       7             :  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
       8             :  * and/or sell copies of the Software, and to permit persons to whom the
       9             :  * Software is furnished to do so, subject to the following conditions:
      10             :  *
      11             :  * The above copyright notice and this permission notice (including the next
      12             :  * paragraph) shall be included in all copies or substantial portions of the
      13             :  * Software.
      14             :  *
      15             :  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
      16             :  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
      17             :  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
      18             :  * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
      19             :  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
      20             :  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
      21             :  * IN THE SOFTWARE.
      22             :  *
      23             :  * Authors:
      24             :  *
      25             :  */
      26             : #ifndef __DRM_SYNCOBJ_H__
      27             : #define __DRM_SYNCOBJ_H__
      28             : 
      29             : #include <linux/dma-fence.h>
      30             : #include <linux/dma-fence-chain.h>
      31             : 
      32             : struct drm_file;
      33             : 
      34             : /**
      35             :  * struct drm_syncobj - sync object.
      36             :  *
      37             :  * This structure defines a generic sync object which wraps a &dma_fence.
      38             :  */
      39             : struct drm_syncobj {
      40             :         /**
      41             :          * @refcount: Reference count of this object.
      42             :          */
      43             :         struct kref refcount;
      44             :         /**
      45             :          * @fence:
      46             :          * NULL or a pointer to the fence bound to this object.
      47             :          *
      48             :          * This field should not be used directly. Use drm_syncobj_fence_get()
      49             :          * and drm_syncobj_replace_fence() instead.
      50             :          */
      51             :         struct dma_fence __rcu *fence;
      52             :         /**
      53             :          * @cb_list: List of callbacks to call when the &fence gets replaced.
      54             :          */
      55             :         struct list_head cb_list;
      56             :         /**
      57             :          * @ev_fd_list: List of registered eventfd.
      58             :          */
      59             :         struct list_head ev_fd_list;
      60             :         /**
      61             :          * @lock: Protects &cb_list and &ev_fd_list, and write-locks &fence.
      62             :          */
      63             :         spinlock_t lock;
      64             :         /**
      65             :          * @file: A file backing for this syncobj.
      66             :          */
      67             :         struct file *file;
      68             : };
      69             : 
      70             : void drm_syncobj_free(struct kref *kref);
      71             : 
      72             : /**
      73             :  * drm_syncobj_get - acquire a syncobj reference
      74             :  * @obj: sync object
      75             :  *
      76             :  * This acquires an additional reference to @obj. It is illegal to call this
      77             :  * without already holding a reference. No locks required.
      78             :  */
      79             : static inline void
      80             : drm_syncobj_get(struct drm_syncobj *obj)
      81             : {
      82           0 :         kref_get(&obj->refcount);
      83             : }
      84             : 
      85             : /**
      86             :  * drm_syncobj_put - release a reference to a sync object.
      87             :  * @obj: sync object.
      88             :  */
      89             : static inline void
      90             : drm_syncobj_put(struct drm_syncobj *obj)
      91             : {
      92           0 :         kref_put(&obj->refcount, drm_syncobj_free);
      93             : }
      94             : 
      95             : /**
      96             :  * drm_syncobj_fence_get - get a reference to a fence in a sync object
      97             :  * @syncobj: sync object.
      98             :  *
      99             :  * This acquires additional reference to &drm_syncobj.fence contained in @obj,
     100             :  * if not NULL. It is illegal to call this without already holding a reference.
     101             :  * No locks required.
     102             :  *
     103             :  * Returns:
     104             :  * Either the fence of @obj or NULL if there's none.
     105             :  */
     106             : static inline struct dma_fence *
     107             : drm_syncobj_fence_get(struct drm_syncobj *syncobj)
     108             : {
     109             :         struct dma_fence *fence;
     110             : 
     111             :         rcu_read_lock();
     112           0 :         fence = dma_fence_get_rcu_safe(&syncobj->fence);
     113             :         rcu_read_unlock();
     114             : 
     115             :         return fence;
     116             : }
     117             : 
     118             : struct drm_syncobj *drm_syncobj_find(struct drm_file *file_private,
     119             :                                      u32 handle);
     120             : void drm_syncobj_add_point(struct drm_syncobj *syncobj,
     121             :                            struct dma_fence_chain *chain,
     122             :                            struct dma_fence *fence,
     123             :                            uint64_t point);
     124             : void drm_syncobj_replace_fence(struct drm_syncobj *syncobj,
     125             :                                struct dma_fence *fence);
     126             : int drm_syncobj_find_fence(struct drm_file *file_private,
     127             :                            u32 handle, u64 point, u64 flags,
     128             :                            struct dma_fence **fence);
     129             : void drm_syncobj_free(struct kref *kref);
     130             : int drm_syncobj_create(struct drm_syncobj **out_syncobj, uint32_t flags,
     131             :                        struct dma_fence *fence);
     132             : int drm_syncobj_get_handle(struct drm_file *file_private,
     133             :                            struct drm_syncobj *syncobj, u32 *handle);
     134             : int drm_syncobj_get_fd(struct drm_syncobj *syncobj, int *p_fd);
     135             : 
     136             : #endif

Generated by: LCOV version 1.14