taskqueue.h (85521) | taskqueue.h (85560) |
---|---|
1/*- 2 * Copyright (c) 2000 Doug Rabson 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 1. Redistributions of source code must retain the above copyright --- 9 unchanged lines hidden (view full) --- 18 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 19 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 20 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 21 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 22 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 23 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 24 * SUCH DAMAGE. 25 * | 1/*- 2 * Copyright (c) 2000 Doug Rabson 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 1. Redistributions of source code must retain the above copyright --- 9 unchanged lines hidden (view full) --- 18 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 19 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 20 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 21 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 22 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 23 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 24 * SUCH DAMAGE. 25 * |
26 * $FreeBSD: head/sys/sys/taskqueue.h 85521 2001-10-26 06:32:21Z jhb $ | 26 * $FreeBSD: head/sys/sys/taskqueue.h 85560 2001-10-26 18:46:48Z jhb $ |
27 */ 28 29#ifndef _SYS_TASKQUEUE_H_ 30#define _SYS_TASKQUEUE_H_ 31 32#ifndef _KERNEL 33#error "no user-servicable parts inside" 34#endif 35 36#include <sys/queue.h> | 27 */ 28 29#ifndef _SYS_TASKQUEUE_H_ 30#define _SYS_TASKQUEUE_H_ 31 32#ifndef _KERNEL 33#error "no user-servicable parts inside" 34#endif 35 36#include <sys/queue.h> |
37#include <sys/_lock.h> 38#include <sys/_mutex.h> | |
39 40struct taskqueue; 41 42/* 43 * Each task includes a function which is called from 44 * taskqueue_run(). The first argument is taken from the 'ta_context' 45 * field of struct task and the second argument is a count of how many 46 * times the task was enqueued before the call to taskqueue_run(). --- 10 unchanged lines hidden (view full) --- 57typedef void (*taskqueue_enqueue_fn)(void *context); 58 59struct task { 60 STAILQ_ENTRY(task) ta_link; /* link for queue */ 61 int ta_pending; /* count times queued */ 62 int ta_priority; /* priority of task in queue */ 63 task_fn_t *ta_func; /* task handler */ 64 void *ta_context; /* argument for handler */ | 37 38struct taskqueue; 39 40/* 41 * Each task includes a function which is called from 42 * taskqueue_run(). The first argument is taken from the 'ta_context' 43 * field of struct task and the second argument is a count of how many 44 * times the task was enqueued before the call to taskqueue_run(). --- 10 unchanged lines hidden (view full) --- 55typedef void (*taskqueue_enqueue_fn)(void *context); 56 57struct task { 58 STAILQ_ENTRY(task) ta_link; /* link for queue */ 59 int ta_pending; /* count times queued */ 60 int ta_priority; /* priority of task in queue */ 61 task_fn_t *ta_func; /* task handler */ 62 void *ta_context; /* argument for handler */ |
65 struct mtx ta_mutex; /* lock for each task */ | |
66}; 67 | 63}; 64 |
68void task_init(struct task *task, int priority, task_fn_t *func, 69 void *context); 70void task_destroy(struct task *task); | |
71struct taskqueue *taskqueue_create(const char *name, int mflags, 72 taskqueue_enqueue_fn enqueue, 73 void *context); 74int taskqueue_enqueue(struct taskqueue *queue, struct task *task); 75struct taskqueue *taskqueue_find(const char *name); 76void taskqueue_free(struct taskqueue *queue); 77void taskqueue_run(struct taskqueue *queue); 78 79/* 80 * Initialise a task structure. 81 */ | 65struct taskqueue *taskqueue_create(const char *name, int mflags, 66 taskqueue_enqueue_fn enqueue, 67 void *context); 68int taskqueue_enqueue(struct taskqueue *queue, struct task *task); 69struct taskqueue *taskqueue_find(const char *name); 70void taskqueue_free(struct taskqueue *queue); 71void taskqueue_run(struct taskqueue *queue); 72 73/* 74 * Initialise a task structure. 75 */ |
82#define TASK_INIT(task, priority, func, context) \ 83 task_init((task), (priority), (func), (context)) | 76#define TASK_INIT(task, priority, func, context) do { \ 77 (task)->ta_pending = 0; \ 78 (task)->ta_priority = (priority); \ 79 (task)->ta_func = (func); \ 80 (task)->ta_context = (context); \ 81} while (0) |
84 85/* | 82 83/* |
86 * Destroy a task structure. 87 */ 88#define TASK_DESTROY(task) \ 89 task_destroy((task)) 90 91/* | |
92 * Declare a reference to a taskqueue. 93 */ 94#define TASKQUEUE_DECLARE(name) \ 95extern struct taskqueue *taskqueue_##name 96 97/* 98 * Define and initialise a taskqueue. 99 */ --- 24 unchanged lines hidden --- | 84 * Declare a reference to a taskqueue. 85 */ 86#define TASKQUEUE_DECLARE(name) \ 87extern struct taskqueue *taskqueue_##name 88 89/* 90 * Define and initialise a taskqueue. 91 */ --- 24 unchanged lines hidden --- |