75 lines · c
1/*2 * Sync File validation framework and debug infomation3 *4 * Copyright (C) 2012 Google, Inc.5 *6 * This program is distributed in the hope that it will be useful,7 * but WITHOUT ANY WARRANTY; without even the implied warranty of8 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the9 * GNU General Public License for more details.10 *11 */12 13#ifndef _LINUX_SYNC_H14#define _LINUX_SYNC_H15 16#include <linux/list.h>17#include <linux/rbtree.h>18#include <linux/spinlock.h>19#include <linux/dma-fence.h>20 21#include <linux/sync_file.h>22#include <uapi/linux/sync_file.h>23 24/**25 * struct sync_timeline - sync object26 * @kref: reference count on fence.27 * @name: name of the sync_timeline. Useful for debugging28 * @lock: lock protecting @pt_list and @value29 * @pt_tree: rbtree of active (unsignaled/errored) sync_pts30 * @pt_list: list of active (unsignaled/errored) sync_pts31 * @sync_timeline_list: membership in global sync_timeline_list32 */33struct sync_timeline {34 struct kref kref;35 char name[32];36 37 /* protected by lock */38 u64 context;39 int value;40 41 struct rb_root pt_tree;42 struct list_head pt_list;43 spinlock_t lock;44 45 struct list_head sync_timeline_list;46};47 48static inline struct sync_timeline *dma_fence_parent(struct dma_fence *fence)49{50 return container_of(fence->lock, struct sync_timeline, lock);51}52 53/**54 * struct sync_pt - sync_pt object55 * @base: base fence object56 * @link: link on the sync timeline's list57 * @node: node in the sync timeline's tree58 * @deadline: the earliest fence deadline hint59 */60struct sync_pt {61 struct dma_fence base;62 struct list_head link;63 struct rb_node node;64 ktime_t deadline;65};66 67extern const struct file_operations sw_sync_debugfs_fops;68 69void sync_timeline_debug_add(struct sync_timeline *obj);70void sync_timeline_debug_remove(struct sync_timeline *obj);71void sync_file_debug_add(struct sync_file *fence);72void sync_file_debug_remove(struct sync_file *fence);73 74#endif /* _LINUX_SYNC_H */75