Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 17 Dec 2011 12:08:20 +0100
From:      Gary Jennejohn <gljennjohn@googlemail.com>
To:        freebsd-arch@freebsd.org
Subject:   Re: TASK_INITIALIZER()
Message-ID:  <20111217120820.5c2d0ee4@ernst.jennejohn.org>
In-Reply-To: <201112161559.36428.jhb@freebsd.org>
References:  <201112161559.36428.jhb@freebsd.org>

next in thread | previous in thread | raw e-mail | index | archive | help
On Fri, 16 Dec 2011 15:59:36 -0500
John Baldwin <jhb@freebsd.org> wrote:

> Any objection to adding a macro to make it easy to statically initialize task 
> structures (similar to the initializer macros in <sys/queue.h>)?  This allows
> global tasks to be statically initalized without requiring a dedicated 
> SYSINIT() routine.
> 
> Index: share/man/man9/Makefile
> ===================================================================
> --- share/man/man9/Makefile     (revision 228534)
> +++ share/man/man9/Makefile     (working copy)
> @@ -1250,6 +1250,7 @@
>         sysctl_ctx_init.9 sysctl_ctx_free.9
>  MLINKS+=SYSINIT.9 SYSUNINIT.9
>  MLINKS+=taskqueue.9 TASK_INIT.9 \
> +       taskqueue.9 TASK_INITIALIZER.9 \
>         taskqueue.9 taskqueue_cancel.9 \
>         taskqueue.9 taskqueue_create.9 \
>         taskqueue.9 taskqueue_create_fast.9 \
> Index: share/man/man9/taskqueue.9
> ===================================================================
> --- share/man/man9/taskqueue.9  (revision 228534)
> +++ share/man/man9/taskqueue.9  (working copy)
> @@ -80,6 +80,7 @@
>  .Ft void
>  .Fn taskqueue_run "struct taskqueue *queue"
>  .Fn TASK_INIT "struct task *task" "int priority" "task_fn_t func" "void 
> *context"
> +.Fn TASK_INITIALIZER "int priority" "task_fn_t func" "void *context"
>  .Fn TASKQUEUE_DECLARE "name"
>  .Fn TASKQUEUE_DEFINE "name" "taskqueue_enqueue_fn enqueue" "void *context" 
> "init"
>  .Fn TASKQUEUE_FAST_DEFINE "name" "taskqueue_enqueue_fn enqueue" "void 
> *context" "init"
> @@ -243,9 +244,14 @@
>  is provided to initialise a
>  .Va task
>  structure.
> +The
> +.Fn TASK_INITIALIZER
> +macro generates an initializer for a task structure.
>  A macro
>  .Fn TIMEOUT_TASK_INIT "queue" "timeout_task" "priority" "func" "context"
> -initializes the timeout_task structure.
> +initializes the
> +.Va timeout_task
> +structure.
>  The values of
>  .Va priority ,
>  .Va func ,
> Index: sys/sys/taskqueue.h
> ===================================================================
> --- sys/sys/taskqueue.h (revision 228534)
> +++ sys/sys/taskqueue.h (working copy)
> @@ -77,6 +77,12 @@
>  void   taskqueue_unblock(struct taskqueue *queue);
>  int    taskqueue_member(struct taskqueue *queue, struct thread *td);
>  
> +#define TASK_INITIALIZER(priority, func, context)      \
> +       { .ta_pending = 0,                              \
> +         .ta_priority = (priority),                    \
> +         .ta_func = (func),                            \
> +         .ta_context = (context) }
> +
>  /*
>   * Functions for dedicated thread taskqueues
>   */
> 

Seems like an excellent idea.  Are you also planning to replace the
existing SYSINIT() entries?

-- 
Gary Jennejohn



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20111217120820.5c2d0ee4>