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 | { |
