Blame view

drivers/dma-buf/sync_debug.h 2.06 KB
81f7e3824   Eric Lee   Initial Release, ...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
  /*
   * 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;
  };
  
  #ifdef CONFIG_SW_SYNC
  
  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);
  
  #else
  # define sync_timeline_debug_add(obj)
  # define sync_timeline_debug_remove(obj)
  # define sync_file_debug_add(fence)
  # define sync_file_debug_remove(fence)
  # define sync_dump()
  #endif
  
  #endif /* _LINUX_SYNC_H */