diff options
Diffstat (limited to 'include/linux/async.h')
| -rw-r--r-- | include/linux/async.h | 36 |
1 files changed, 32 insertions, 4 deletions
diff --git a/include/linux/async.h b/include/linux/async.h index 68a9530196f2..7a24fe9b44b4 100644 --- a/include/linux/async.h +++ b/include/linux/async.h | |||
| @@ -9,19 +9,47 @@ | |||
| 9 | * as published by the Free Software Foundation; version 2 | 9 | * as published by the Free Software Foundation; version 2 |
| 10 | * of the License. | 10 | * of the License. |
| 11 | */ | 11 | */ |
| 12 | #ifndef __ASYNC_H__ | ||
| 13 | #define __ASYNC_H__ | ||
| 12 | 14 | ||
| 13 | #include <linux/types.h> | 15 | #include <linux/types.h> |
| 14 | #include <linux/list.h> | 16 | #include <linux/list.h> |
| 15 | 17 | ||
| 16 | typedef u64 async_cookie_t; | 18 | typedef u64 async_cookie_t; |
| 17 | typedef void (async_func_ptr) (void *data, async_cookie_t cookie); | 19 | typedef void (async_func_ptr) (void *data, async_cookie_t cookie); |
| 20 | struct async_domain { | ||
| 21 | struct list_head node; | ||
| 22 | struct list_head domain; | ||
| 23 | int count; | ||
| 24 | unsigned registered:1; | ||
| 25 | }; | ||
| 26 | |||
| 27 | /* | ||
| 28 | * domain participates in global async_synchronize_full | ||
| 29 | */ | ||
| 30 | #define ASYNC_DOMAIN(_name) \ | ||
| 31 | struct async_domain _name = { .node = LIST_HEAD_INIT(_name.node), \ | ||
| 32 | .domain = LIST_HEAD_INIT(_name.domain), \ | ||
| 33 | .count = 0, \ | ||
| 34 | .registered = 1 } | ||
| 35 | |||
| 36 | /* | ||
| 37 | * domain is free to go out of scope as soon as all pending work is | ||
| 38 | * complete, this domain does not participate in async_synchronize_full | ||
| 39 | */ | ||
| 40 | #define ASYNC_DOMAIN_EXCLUSIVE(_name) \ | ||
| 41 | struct async_domain _name = { .node = LIST_HEAD_INIT(_name.node), \ | ||
| 42 | .domain = LIST_HEAD_INIT(_name.domain), \ | ||
| 43 | .count = 0, \ | ||
| 44 | .registered = 0 } | ||
| 18 | 45 | ||
| 19 | extern async_cookie_t async_schedule(async_func_ptr *ptr, void *data); | 46 | extern async_cookie_t async_schedule(async_func_ptr *ptr, void *data); |
| 20 | extern async_cookie_t async_schedule_domain(async_func_ptr *ptr, void *data, | 47 | extern async_cookie_t async_schedule_domain(async_func_ptr *ptr, void *data, |
| 21 | struct list_head *list); | 48 | struct async_domain *domain); |
| 49 | void async_unregister_domain(struct async_domain *domain); | ||
| 22 | extern void async_synchronize_full(void); | 50 | extern void async_synchronize_full(void); |
| 23 | extern void async_synchronize_full_domain(struct list_head *list); | 51 | extern void async_synchronize_full_domain(struct async_domain *domain); |
| 24 | extern void async_synchronize_cookie(async_cookie_t cookie); | 52 | extern void async_synchronize_cookie(async_cookie_t cookie); |
| 25 | extern void async_synchronize_cookie_domain(async_cookie_t cookie, | 53 | extern void async_synchronize_cookie_domain(async_cookie_t cookie, |
| 26 | struct list_head *list); | 54 | struct async_domain *domain); |
| 27 | 55 | #endif | |
