diff options
author | Rob Clark <robdclark@gmail.com> | 2016-03-31 16:26:51 -0400 |
---|---|---|
committer | Sumit Semwal <sumit.semwal@linaro.org> | 2016-05-31 12:42:43 -0400 |
commit | dad6c3945fd25384c2b92306a90ba033e1130428 (patch) | |
tree | a31f86b0d66c999262eb3df8547812a3159ace6b /drivers/dma-buf | |
parent | e2082e3ab801b989d8d5337b2ecbfc61d09781cb (diff) |
reservation: add headerdoc comments
Signed-off-by: Rob Clark <robdclark@gmail.com>
Signed-off-by: Sumit Semwal <sumit.semwal@linaro.org>
Diffstat (limited to 'drivers/dma-buf')
-rw-r--r-- | drivers/dma-buf/reservation.c | 72 |
1 files changed, 68 insertions, 4 deletions
diff --git a/drivers/dma-buf/reservation.c b/drivers/dma-buf/reservation.c index c0bd5722c997..9566a62ad8e3 100644 --- a/drivers/dma-buf/reservation.c +++ b/drivers/dma-buf/reservation.c | |||
@@ -35,6 +35,17 @@ | |||
35 | #include <linux/reservation.h> | 35 | #include <linux/reservation.h> |
36 | #include <linux/export.h> | 36 | #include <linux/export.h> |
37 | 37 | ||
38 | /** | ||
39 | * DOC: Reservation Object Overview | ||
40 | * | ||
41 | * The reservation object provides a mechanism to manage shared and | ||
42 | * exclusive fences associated with a buffer. A reservation object | ||
43 | * can have attached one exclusive fence (normally associated with | ||
44 | * write operations) or N shared fences (read operations). The RCU | ||
45 | * mechanism is used to protect read access to fences from locked | ||
46 | * write-side updates. | ||
47 | */ | ||
48 | |||
38 | DEFINE_WW_CLASS(reservation_ww_class); | 49 | DEFINE_WW_CLASS(reservation_ww_class); |
39 | EXPORT_SYMBOL(reservation_ww_class); | 50 | EXPORT_SYMBOL(reservation_ww_class); |
40 | 51 | ||
@@ -43,9 +54,17 @@ EXPORT_SYMBOL(reservation_seqcount_class); | |||
43 | 54 | ||
44 | const char reservation_seqcount_string[] = "reservation_seqcount"; | 55 | const char reservation_seqcount_string[] = "reservation_seqcount"; |
45 | EXPORT_SYMBOL(reservation_seqcount_string); | 56 | EXPORT_SYMBOL(reservation_seqcount_string); |
46 | /* | 57 | |
47 | * Reserve space to add a shared fence to a reservation_object, | 58 | /** |
48 | * must be called with obj->lock held. | 59 | * reservation_object_reserve_shared - Reserve space to add a shared |
60 | * fence to a reservation_object. | ||
61 | * @obj: reservation object | ||
62 | * | ||
63 | * Should be called before reservation_object_add_shared_fence(). Must | ||
64 | * be called with obj->lock held. | ||
65 | * | ||
66 | * RETURNS | ||
67 | * Zero for success, or -errno | ||
49 | */ | 68 | */ |
50 | int reservation_object_reserve_shared(struct reservation_object *obj) | 69 | int reservation_object_reserve_shared(struct reservation_object *obj) |
51 | { | 70 | { |
@@ -180,7 +199,11 @@ done: | |||
180 | fence_put(old_fence); | 199 | fence_put(old_fence); |
181 | } | 200 | } |
182 | 201 | ||
183 | /* | 202 | /** |
203 | * reservation_object_add_shared_fence - Add a fence to a shared slot | ||
204 | * @obj: the reservation object | ||
205 | * @fence: the shared fence to add | ||
206 | * | ||
184 | * Add a fence to a shared slot, obj->lock must be held, and | 207 | * Add a fence to a shared slot, obj->lock must be held, and |
185 | * reservation_object_reserve_shared_fence has been called. | 208 | * reservation_object_reserve_shared_fence has been called. |
186 | */ | 209 | */ |
@@ -200,6 +223,13 @@ void reservation_object_add_shared_fence(struct reservation_object *obj, | |||
200 | } | 223 | } |
201 | EXPORT_SYMBOL(reservation_object_add_shared_fence); | 224 | EXPORT_SYMBOL(reservation_object_add_shared_fence); |
202 | 225 | ||
226 | /** | ||
227 | * reservation_object_add_excl_fence - Add an exclusive fence. | ||
228 | * @obj: the reservation object | ||
229 | * @fence: the shared fence to add | ||
230 | * | ||
231 | * Add a fence to the exclusive slot. The obj->lock must be held. | ||
232 | */ | ||
203 | void reservation_object_add_excl_fence(struct reservation_object *obj, | 233 | void reservation_object_add_excl_fence(struct reservation_object *obj, |
204 | struct fence *fence) | 234 | struct fence *fence) |
205 | { | 235 | { |
@@ -233,6 +263,18 @@ void reservation_object_add_excl_fence(struct reservation_object *obj, | |||
233 | } | 263 | } |
234 | EXPORT_SYMBOL(reservation_object_add_excl_fence); | 264 | EXPORT_SYMBOL(reservation_object_add_excl_fence); |
235 | 265 | ||
266 | /** | ||
267 | * reservation_object_get_fences_rcu - Get an object's shared and exclusive | ||
268 | * fences without update side lock held | ||
269 | * @obj: the reservation object | ||
270 | * @pfence_excl: the returned exclusive fence (or NULL) | ||
271 | * @pshared_count: the number of shared fences returned | ||
272 | * @pshared: the array of shared fence ptrs returned (array is krealloc'd to | ||
273 | * the required size, and must be freed by caller) | ||
274 | * | ||
275 | * RETURNS | ||
276 | * Zero or -errno | ||
277 | */ | ||
236 | int reservation_object_get_fences_rcu(struct reservation_object *obj, | 278 | int reservation_object_get_fences_rcu(struct reservation_object *obj, |
237 | struct fence **pfence_excl, | 279 | struct fence **pfence_excl, |
238 | unsigned *pshared_count, | 280 | unsigned *pshared_count, |
@@ -319,6 +361,18 @@ unlock: | |||
319 | } | 361 | } |
320 | EXPORT_SYMBOL_GPL(reservation_object_get_fences_rcu); | 362 | EXPORT_SYMBOL_GPL(reservation_object_get_fences_rcu); |
321 | 363 | ||
364 | /** | ||
365 | * reservation_object_wait_timeout_rcu - Wait on reservation's objects | ||
366 | * shared and/or exclusive fences. | ||
367 | * @obj: the reservation object | ||
368 | * @wait_all: if true, wait on all fences, else wait on just exclusive fence | ||
369 | * @intr: if true, do interruptible wait | ||
370 | * @timeout: timeout value in jiffies or zero to return immediately | ||
371 | * | ||
372 | * RETURNS | ||
373 | * Returns -ERESTARTSYS if interrupted, 0 if the wait timed out, or | ||
374 | * greater than zer on success. | ||
375 | */ | ||
322 | long reservation_object_wait_timeout_rcu(struct reservation_object *obj, | 376 | long reservation_object_wait_timeout_rcu(struct reservation_object *obj, |
323 | bool wait_all, bool intr, | 377 | bool wait_all, bool intr, |
324 | unsigned long timeout) | 378 | unsigned long timeout) |
@@ -416,6 +470,16 @@ reservation_object_test_signaled_single(struct fence *passed_fence) | |||
416 | return ret; | 470 | return ret; |
417 | } | 471 | } |
418 | 472 | ||
473 | /** | ||
474 | * reservation_object_test_signaled_rcu - Test if a reservation object's | ||
475 | * fences have been signaled. | ||
476 | * @obj: the reservation object | ||
477 | * @test_all: if true, test all fences, otherwise only test the exclusive | ||
478 | * fence | ||
479 | * | ||
480 | * RETURNS | ||
481 | * true if all fences signaled, else false | ||
482 | */ | ||
419 | bool reservation_object_test_signaled_rcu(struct reservation_object *obj, | 483 | bool reservation_object_test_signaled_rcu(struct reservation_object *obj, |
420 | bool test_all) | 484 | bool test_all) |
421 | { | 485 | { |