Deleted Added
full compact
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 ---