diff options
author | 2012-08-27 08:04:24 -0700 | |
---|---|---|
committer | 2012-08-27 08:05:17 -0700 | |
commit | 66a61fc0b2c3475f26f65b5f29ed5945b8efbf9e (patch) | |
tree | 28ebaaee56786cd9199e0e5802d166474d30d1e3 /include/linux/async.h | |
parent | HID: hid-debug: Show rdesc for unclaimed devices (diff) | |
parent | Merge branch 'upstream-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/hid (diff) | |
download | wireguard-linux-66a61fc0b2c3475f26f65b5f29ed5945b8efbf9e.tar.xz wireguard-linux-66a61fc0b2c3475f26f65b5f29ed5945b8efbf9e.zip |
Merge branch 'master' into upstream
Sync with Linus' tree so that we don't have build falures
due to Quanta 3001 ID reshuffling.
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 @@ * as published by the Free Software Foundation; version 2 * of the License. */ +#ifndef __ASYNC_H__ +#define __ASYNC_H__ #include <linux/types.h> #include <linux/list.h> typedef u64 async_cookie_t; typedef void (async_func_ptr) (void *data, async_cookie_t cookie); +struct async_domain { + struct list_head node; + struct list_head domain; + int count; + unsigned registered:1; +}; + +/* + * domain participates in global async_synchronize_full + */ +#define ASYNC_DOMAIN(_name) \ + struct async_domain _name = { .node = LIST_HEAD_INIT(_name.node), \ + .domain = LIST_HEAD_INIT(_name.domain), \ + .count = 0, \ + .registered = 1 } + +/* + * domain is free to go out of scope as soon as all pending work is + * complete, this domain does not participate in async_synchronize_full + */ +#define ASYNC_DOMAIN_EXCLUSIVE(_name) \ + struct async_domain _name = { .node = LIST_HEAD_INIT(_name.node), \ + .domain = LIST_HEAD_INIT(_name.domain), \ + .count = 0, \ + .registered = 0 } extern async_cookie_t async_schedule(async_func_ptr *ptr, void *data); extern async_cookie_t async_schedule_domain(async_func_ptr *ptr, void *data, - struct list_head *list); + struct async_domain *domain); +void async_unregister_domain(struct async_domain *domain); extern void async_synchronize_full(void); -extern void async_synchronize_full_domain(struct list_head *list); +extern void async_synchronize_full_domain(struct async_domain *domain); extern void async_synchronize_cookie(async_cookie_t cookie); extern void async_synchronize_cookie_domain(async_cookie_t cookie, - struct list_head *list); - + struct async_domain *domain); +#endif |