History

Merge tag 'dma-buf-for-4.7' of git://git.kernel.org/pub/scm/linux/kernel/git/sumits/dma-buf

Pull dma-buf updates from Sumit Semwal: - use of vma_pages instead of explicit computation - DocBook and headerdoc updates for dma-buf * tag 'dma-buf-for-4.7' of git://git.kernel.org/pub/scm/linux/kernel/git/sumits/dma-buf: dma-buf: use vma_pages() fence: add missing descriptions for fence doc: update/fixup dma-buf related DocBook reservation: add headerdoc comments dma-buf: headerdoc fixes

Linus Torvalds committed 10 years ago

Commit ebb8cb22 parents 6b15d66 b02da6f6 files · +169 −14Browse files

Showing the changes to include (3 of 6 files). Show all

Unified · Split

3 files
  1. include/linux/dma-buf.h +10 −3
  2. include/linux/fence.h +2 −0
  3. include/linux/reservation.h +53 −0
include/linux/dma-buf.h+10−3
@@ -112,19 +112,24 @@ struct dma_buf_ops { · 111 unmodified lines
112 * @file: file pointer used for sharing buffers across, and for refcounting.112 * @file: file pointer used for sharing buffers across, and for refcounting.
113 * @attachments: list of dma_buf_attachment that denotes all devices attached.113 * @attachments: list of dma_buf_attachment that denotes all devices attached.
114 * @ops: dma_buf_ops associated with this buffer object.114 * @ops: dma_buf_ops associated with this buffer object.
115 * @lock: used internally to serialize list manipulation, attach/detach and vmap/unmap
116 * @vmapping_counter: used internally to refcnt the vmaps
117 * @vmap_ptr: the current vmap ptr if vmapping_counter > 0
115 * @exp_name: name of the exporter; useful for debugging.118 * @exp_name: name of the exporter; useful for debugging.
116 * @owner: pointer to exporter module; used for refcounting when exporter is a119 * @owner: pointer to exporter module; used for refcounting when exporter is a
117 * kernel module.120 * kernel module.
118 * @list_node: node for dma_buf accounting and debugging.121 * @list_node: node for dma_buf accounting and debugging.
119 * @priv: exporter specific private data for this buffer object.122 * @priv: exporter specific private data for this buffer object.
120 * @resv: reservation object linked to this dma-buf123 * @resv: reservation object linked to this dma-buf
124 * @poll: for userspace poll support
125 * @cb_excl: for userspace poll support
126 * @cb_shared: for userspace poll support
121 */127 */
122struct dma_buf {128struct dma_buf {
123 size_t size;129 size_t size;
124 struct file *file;130 struct file *file;
125 struct list_head attachments;131 struct list_head attachments;
126 const struct dma_buf_ops *ops;132 const struct dma_buf_ops *ops;
127 /* mutex to serialize list manipulation, attach/detach and vmap/unmap */
128 struct mutex lock;133 struct mutex lock;
129 unsigned vmapping_counter;134 unsigned vmapping_counter;
130 void *vmap_ptr;135 void *vmap_ptr;
@@ -188,9 +193,11 @@ struct dma_buf_export_info { · 57 unmodified lines
188 193
189/**194/**
190 * helper macro for exporters; zeros and fills in most common values195 * helper macro for exporters; zeros and fills in most common values
196 *
197 * @name: export-info name
191 */198 */
192#define DEFINE_DMA_BUF_EXPORT_INFO(a) \199#define DEFINE_DMA_BUF_EXPORT_INFO(name) \
193 struct dma_buf_export_info a = { .exp_name = KBUILD_MODNAME, \200 struct dma_buf_export_info name = { .exp_name = KBUILD_MODNAME, \
194 .owner = THIS_MODULE }201 .owner = THIS_MODULE }
195 202
196/**203/**
include/linux/fence.h+2−0
@@ -49,6 +49,8 @@ struct fence_cb; · 48 unmodified lines
49 * @timestamp: Timestamp when the fence was signaled.49 * @timestamp: Timestamp when the fence was signaled.
50 * @status: Optional, only valid if < 0, must be set before calling50 * @status: Optional, only valid if < 0, must be set before calling
51 * fence_signal, indicates that the fence has completed with an error.51 * fence_signal, indicates that the fence has completed with an error.
52 * @child_list: list of children fences
53 * @active_list: list of active fences
52 *54 *
53 * the flags member must be manipulated and read using the appropriate55 * the flags member must be manipulated and read using the appropriate
54 * atomic ops (bit_*), so taking the spinlock will not be needed most56 * atomic ops (bit_*), so taking the spinlock will not be needed most
include/linux/reservation.h+53−0
@@ -49,12 +49,27 @@ extern struct ww_class reservation_ww_class; · 48 unmodified lines
49extern struct lock_class_key reservation_seqcount_class;49extern struct lock_class_key reservation_seqcount_class;
50extern const char reservation_seqcount_string[];50extern const char reservation_seqcount_string[];
51 51
52/**
53 * struct reservation_object_list - a list of shared fences
54 * @rcu: for internal use
55 * @shared_count: table of shared fences
56 * @shared_max: for growing shared fence table
57 * @shared: shared fence table
58 */
52struct reservation_object_list {59struct reservation_object_list {
53 struct rcu_head rcu;60 struct rcu_head rcu;
54 u32 shared_count, shared_max;61 u32 shared_count, shared_max;
55 struct fence __rcu *shared[];62 struct fence __rcu *shared[];
56};63};
57 64
65/**
66 * struct reservation_object - a reservation object manages fences for a buffer
67 * @lock: update side lock
68 * @seq: sequence count for managing RCU read-side synchronization
69 * @fence_excl: the exclusive fence, if there is one currently
70 * @fence: list of current shared fences
71 * @staged: staged copy of shared fences for RCU updates
72 */
58struct reservation_object {73struct reservation_object {
59 struct ww_mutex lock;74 struct ww_mutex lock;
60 seqcount_t seq;75 seqcount_t seq;
@@ -68,6 +83,10 @@ struct reservation_object { · 7 unmodified lines
68#define reservation_object_assert_held(obj) \83#define reservation_object_assert_held(obj) \
69 lockdep_assert_held(&(obj)->lock.base)84 lockdep_assert_held(&(obj)->lock.base)
70 85
86/**
87 * reservation_object_init - initialize a reservation object
88 * @obj: the reservation object
89 */
71static inline void90static inline void
72reservation_object_init(struct reservation_object *obj)91reservation_object_init(struct reservation_object *obj)
73{92{
@@ -79,6 +98,10 @@ reservation_object_init(struct reservation_object *obj) · 5 unmodified lines
79 obj->staged = NULL;98 obj->staged = NULL;
80}99}
81 100
101/**
102 * reservation_object_fini - destroys a reservation object
103 * @obj: the reservation object
104 */
82static inline void105static inline void
83reservation_object_fini(struct reservation_object *obj)106reservation_object_fini(struct reservation_object *obj)
84{107{
@@ -106,6 +129,14 @@ reservation_object_fini(struct reservation_object *obj) · 21 unmodified lines
106 ww_mutex_destroy(&obj->lock);129 ww_mutex_destroy(&obj->lock);
107}130}
108 131
132/**
133 * reservation_object_get_list - get the reservation object's
134 * shared fence list, with update-side lock held
135 * @obj: the reservation object
136 *
137 * Returns the shared fence list. Does NOT take references to
138 * the fence. The obj->lock must be held.
139 */
109static inline struct reservation_object_list *140static inline struct reservation_object_list *
110reservation_object_get_list(struct reservation_object *obj)141reservation_object_get_list(struct reservation_object *obj)
111{142{
@@ -113,6 +144,17 @@ reservation_object_get_list(struct reservation_object *obj) · 1 unmodified line
113 reservation_object_held(obj));144 reservation_object_held(obj));
114}145}
115 146
147/**
148 * reservation_object_get_excl - get the reservation object's
149 * exclusive fence, with update-side lock held
150 * @obj: the reservation object
151 *
152 * Returns the exclusive fence (if any). Does NOT take a
153 * reference. The obj->lock must be held.
154 *
155 * RETURNS
156 * The exclusive fence or NULL
157 */
116static inline struct fence *158static inline struct fence *
117reservation_object_get_excl(struct reservation_object *obj)159reservation_object_get_excl(struct reservation_object *obj)
118{160{
@@ -120,6 +162,17 @@ reservation_object_get_excl(struct reservation_object *obj) · 1 unmodified line
120 reservation_object_held(obj));162 reservation_object_held(obj));
121}163}
122 164
165/**
166 * reservation_object_get_excl_rcu - get the reservation object's
167 * exclusive fence, without lock held.
168 * @obj: the reservation object
169 *
170 * If there is an exclusive fence, this atomically increments it's
171 * reference count and returns it.
172 *
173 * RETURNS
174 * The exclusive fence or NULL if none
175 */
123static inline struct fence *176static inline struct fence *
124reservation_object_get_excl_rcu(struct reservation_object *obj)177reservation_object_get_excl_rcu(struct reservation_object *obj)
125{178{

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t