]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/commit
Extend taskqueue(9) to enable per-taskqueue callbacks.
authorwill <will@FreeBSD.org>
Sat, 23 Mar 2013 15:11:53 +0000 (15:11 +0000)
committerwill <will@FreeBSD.org>
Sat, 23 Mar 2013 15:11:53 +0000 (15:11 +0000)
commit5d3a27c7434a37ae901743cd13abde0f4c0adbb1
tree3516b04234c4782387f7269ca92ee0f247a47c15
parenta4c39d4efd7c5dc2ef3bbb4e70449a7d6b673edc
Extend taskqueue(9) to enable per-taskqueue callbacks.

The scope of these callbacks is primarily to support actions that affect the
taskqueue's thread environments.  They are entirely optional, and
consequently are introduced as a new API: taskqueue_set_callback().

This interface allows the caller to specify that a taskqueue requires a
callback and optional context pointer for a given callback type.

The callback types included in this commit can be used to register a
constructor and destructor for thread-local storage using osd(9).  This
allows a particular taskqueue to define that its threads require a specific
type of TLS, without the need for a specially-orchestrated task-based
mechanism for startup and shutdown in order to accomplish it.

Two callback types are supported at this point:

- TASKQUEUE_CALLBACK_TYPE_INIT, called by every thread when it starts, prior
  to processing any tasks.
- TASKQUEUE_CALLBACK_TYPE_SHUTDOWN, called by every thread when it exits,
  after it has processed its last task but before the taskqueue is
  reclaimed.

While I'm here:

- Add two new macros, TQ_ASSERT_LOCKED and TQ_ASSERT_UNLOCKED, and use them
  in appropriate locations.
- Fix taskqueue.9 to mention taskqueue_start_threads(), which is a required
  interface for all consumers of taskqueue(9).

Reviewed by: kib (all), eadler (taskqueue.9), brd (taskqueue.9)
Approved by: ken (mentor)
Sponsored by: Spectra Logic
MFC after: 1 month
share/man/man9/taskqueue.9
sys/kern/subr_taskqueue.c
sys/sys/taskqueue.h