| /* | |
| * Sync File validation framework and debug infomation | |
| * | |
| * Copyright (C) 2012 Google, Inc. | |
| * | |
| * This program is distributed in the hope that it will be useful, | |
| * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
| * GNU General Public License for more details. | |
| * | |
| */ | |
| #ifndef _LINUX_SYNC_H | |
| #define _LINUX_SYNC_H | |
| #include <linux/list.h> | |
| #include <linux/rbtree.h> | |
| #include <linux/spinlock.h> | |
| #include <linux/dma-fence.h> | |
| #include <linux/sync_file.h> | |
| #include <uapi/linux/sync_file.h> | |
| /** | |
| * struct sync_timeline - sync object | |
| * @kref: reference count on fence. | |
| * @name: name of the sync_timeline. Useful for debugging | |
| * @lock: lock protecting @pt_list and @value | |
| * @pt_tree: rbtree of active (unsignaled/errored) sync_pts | |
| * @pt_list: list of active (unsignaled/errored) sync_pts | |
| * @sync_timeline_list: membership in global sync_timeline_list | |
| */ | |
| struct sync_timeline { | |
| struct kref kref; | |
| char name[32]; | |
| /* protected by lock */ | |
| u64 context; | |
| int value; | |
| struct rb_root pt_tree; | |
| struct list_head pt_list; | |
| spinlock_t lock; | |
| struct list_head sync_timeline_list; | |
| }; | |
| static inline struct sync_timeline *dma_fence_parent(struct dma_fence *fence) | |
| { | |
| return container_of(fence->lock, struct sync_timeline, lock); | |
| } | |
| /** | |
| * struct sync_pt - sync_pt object | |
| * @base: base fence object | |
| * @link: link on the sync timeline's list | |
| * @node: node in the sync timeline's tree | |
| */ | |
| struct sync_pt { | |
| struct dma_fence base; | |
| struct list_head link; | |
| struct rb_node node; | |
| }; | |
| extern const struct file_operations sw_sync_debugfs_fops; | |
| void sync_timeline_debug_add(struct sync_timeline *obj); | |
| void sync_timeline_debug_remove(struct sync_timeline *obj); | |
| void sync_file_debug_add(struct sync_file *fence); | |
| void sync_file_debug_remove(struct sync_file *fence); | |
| void sync_dump(void); | |
| #endif /* _LINUX_SYNC_H */ |