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-03-27 20:00:47 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             :          * @lock: Protects &cb_list and write-locks &fence.
      58             :          */
      59             :         spinlock_t lock;
      60             :         /**
      61             :          * @file: A file backing for this syncobj.
      62             :          */
      63             :         struct file *file;
      64             : };
      65             : 
      66             : void drm_syncobj_free(struct kref *kref);
      67             : 
      68             : /**
      69             :  * drm_syncobj_get - acquire a syncobj reference
      70             :  * @obj: sync object
      71             :  *
      72             :  * This acquires an additional reference to @obj. It is illegal to call this
      73             :  * without already holding a reference. No locks required.
      74             :  */
      75             : static inline void
      76             : drm_syncobj_get(struct drm_syncobj *obj)
      77             : {
      78           0 :         kref_get(&obj->refcount);
      79             : }
      80             : 
      81             : /**
      82             :  * drm_syncobj_put - release a reference to a sync object.
      83             :  * @obj: sync object.
      84             :  */
      85             : static inline void
      86             : drm_syncobj_put(struct drm_syncobj *obj)
      87             : {
      88           0 :         kref_put(&obj->refcount, drm_syncobj_free);
      89             : }
      90             : 
      91             : /**
      92             :  * drm_syncobj_fence_get - get a reference to a fence in a sync object
      93             :  * @syncobj: sync object.
      94             :  *
      95             :  * This acquires additional reference to &drm_syncobj.fence contained in @obj,
      96             :  * if not NULL. It is illegal to call this without already holding a reference.
      97             :  * No locks required.
      98             :  *
      99             :  * Returns:
     100             :  * Either the fence of @obj or NULL if there's none.
     101             :  */
     102             : static inline struct dma_fence *
     103             : drm_syncobj_fence_get(struct drm_syncobj *syncobj)
     104             : {
     105             :         struct dma_fence *fence;
     106             : 
     107             :         rcu_read_lock();
     108           0 :         fence = dma_fence_get_rcu_safe(&syncobj->fence);
     109             :         rcu_read_unlock();
     110             : 
     111             :         return fence;
     112             : }
     113             : 
     114             : struct drm_syncobj *drm_syncobj_find(struct drm_file *file_private,
     115             :                                      u32 handle);
     116             : void drm_syncobj_add_point(struct drm_syncobj *syncobj,
     117             :                            struct dma_fence_chain *chain,
     118             :                            struct dma_fence *fence,
     119             :                            uint64_t point);
     120             : void drm_syncobj_replace_fence(struct drm_syncobj *syncobj,
     121             :                                struct dma_fence *fence);
     122             : int drm_syncobj_find_fence(struct drm_file *file_private,
     123             :                            u32 handle, u64 point, u64 flags,
     124             :                            struct dma_fence **fence);
     125             : void drm_syncobj_free(struct kref *kref);
     126             : int drm_syncobj_create(struct drm_syncobj **out_syncobj, uint32_t flags,
     127             :                        struct dma_fence *fence);
     128             : int drm_syncobj_get_handle(struct drm_file *file_private,
     129             :                            struct drm_syncobj *syncobj, u32 *handle);
     130             : int drm_syncobj_get_fd(struct drm_syncobj *syncobj, int *p_fd);
     131             : 
     132             : #endif

Generated by: LCOV version 1.14