SYSMON_TASKQ(9)

SYSMON_TASKQ(9) | Kernel Developer's Manual | SYSMON_TASKQ(9)

# NAME

`sysmon_taskq` —
general purpose system monitoring task queue

# SYNOPSIS

`#include <dev/sysmon/sysmon_taskq.h>`

void
`sysmon_task_queue_preinit`(void);

void
`sysmon_task_queue_init`(void);

void
`sysmon_task_queue_fini`(void);

int
`sysmon_task_queue_sched`(u_int pri, void (*func)(void *), void *arg);

void
`sysmon_task_queue_barrier`(u_int pri);

# DESCRIPTION

The machine-independent `sysmon_taskq` provides a simple general purpose task queue. It can be used to run callbacks that require thread context, but do not warrant the use of a more fine-grained solution.

Although the intended usage is related to the context of system monitoring and power management, also other comparable functions are suitable for `sysmon_taskq`.

# FUNCTIONS

The necessary internal data structures are initialized during system startup by `sysmon_task_queue_preinit`(). Before actual usage, a machine-dependent procedure should finish the initialization by calling `sysmon_task_queue_init`(). This will create a kernel thread that can be later halted by `sysmon_task_queue_fini`(). All scheduled tasks are executed before the queue is halted.

The `sysmon_task_queue_sched`() function enqueues func to be executed at the priority pri. If pri is 0, the scheduled function will be placed as the last element in the queue. The single argument passed to func is specified by arg.

The `sysmon_task_queue_barrier`() function waits for the completion of all tasks at pri or lower currently queued at the time of the call.

# RETURN VALUES

Upon successful completion, `sysmon_task_queue_sched`() returns 0. Otherwise, the following error values are returned:

[`EINVAL`]
  An invalid parameter was specified.
[`ENOMEM`]
  There was not enough memory.

# SEE ALSO

queue(3), kthread(9), workqueue(9)

# AUTHORS

Jason R. Thorpe <thorpej@NetBSD.org>

January 24, 2010 | NetBSD 10.1