diff options
author | David Gwynne <dlg@cvs.openbsd.org> | 2017-09-15 02:39:34 +0000 |
---|---|---|
committer | David Gwynne <dlg@cvs.openbsd.org> | 2017-09-15 02:39:34 +0000 |
commit | b5e44e8f19222d7e02940ce71b8259e0fe576607 (patch) | |
tree | ea12526ded7291c5a027c825adc6599338790a9c /usr.sbin/vmd/task.h | |
parent | c1c62339eedd38104f0f636ee805da612792320e (diff) |
port taskqs to vmd for use in future work on virtio devices
these are backed by pthreads rather than kthreads and mutexes, and
only support creating a taskq serviced by a single worker thread.
task_set, task_add, and task_del all work the same though.
these are not linked into the build yet.
ok mlarkin@
Diffstat (limited to 'usr.sbin/vmd/task.h')
-rw-r--r-- | usr.sbin/vmd/task.h | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/usr.sbin/vmd/task.h b/usr.sbin/vmd/task.h new file mode 100644 index 00000000000..bf97ba1ddb9 --- /dev/null +++ b/usr.sbin/vmd/task.h @@ -0,0 +1,43 @@ +/* $OpenBSD: task.h,v 1.1 2017/09/15 02:39:33 dlg Exp $ */ + +/* + * Copyright (c) 2013 David Gwynne <dlg@openbsd.org> + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#ifndef _TASK_H_ +#define _TASK_H_ + +#include <sys/queue.h> + +struct taskq; + +struct task { + TAILQ_ENTRY(task) t_entry; + void (*t_func)(void *); + void *t_arg; + unsigned int t_flags; +}; + +TAILQ_HEAD(task_list, task); + +#define TASK_INITIALIZER(_f, _a) {{ NULL, NULL }, (_f), (_a), 0 } + +struct taskq *taskq_create(const char *); + +void task_set(struct task *, void (*)(void *), void *); +int task_add(struct taskq *, struct task *); +int task_del(struct taskq *, struct task *); + +#endif /* _TASK_H_ */ |