1 /* 2 * Sync File validation framework and debug infomation 3 * 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 of 8 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 9 * GNU General Public License for more details. 10 * 11 */ 12 13 #ifndef _LINUX_SYNC_H 14 #define _LINUX_SYNC_H 15 16 #include <linux/list.h> 17 #include <linux/spinlock.h> 18 #include <linux/fence.h> 19 20 #include <linux/sync_file.h> 21 #include <uapi/linux/sync_file.h> 22 23 /** 24 * struct sync_timeline - sync object 25 * @kref: reference count on fence. 26 * @name: name of the sync_timeline. Useful for debugging 27 * @child_list_head: list of children sync_pts for this sync_timeline 28 * @child_list_lock: lock protecting @child_list_head and fence.status 29 * @active_list_head: list of active (unsignaled/errored) sync_pts 30 * @sync_timeline_list: membership in global sync_timeline_list 31 */ 32 struct sync_timeline { 33 struct kref kref; 34 char name[32]; 35 36 /* protected by child_list_lock */ 37 u64 context; 38 int value; 39 40 struct list_head child_list_head; 41 spinlock_t child_list_lock; 42 43 struct list_head active_list_head; 44 45 struct list_head sync_timeline_list; 46 }; 47 48 static inline struct sync_timeline *fence_parent(struct fence *fence) 49 { 50 return container_of(fence->lock, struct sync_timeline, 51 child_list_lock); 52 } 53 54 /** 55 * struct sync_pt - sync_pt object 56 * @base: base fence object 57 * @child_list: sync timeline child's list 58 * @active_list: sync timeline active child's list 59 */ 60 struct sync_pt { 61 struct fence base; 62 struct list_head child_list; 63 struct list_head active_list; 64 }; 65 66 #ifdef CONFIG_SW_SYNC 67 68 extern const struct file_operations sw_sync_debugfs_fops; 69 70 void sync_timeline_debug_add(struct sync_timeline *obj); 71 void sync_timeline_debug_remove(struct sync_timeline *obj); 72 void sync_file_debug_add(struct sync_file *fence); 73 void sync_file_debug_remove(struct sync_file *fence); 74 void sync_dump(void); 75 76 #else 77 # define sync_timeline_debug_add(obj) 78 # define sync_timeline_debug_remove(obj) 79 # define sync_file_debug_add(fence) 80 # define sync_file_debug_remove(fence) 81 # define sync_dump() 82 #endif 83 84 #endif /* _LINUX_SYNC_H */ 85