Support TQ_FRONT flag used by taskq_dispatch()
Allow taskq_dispatch() to insert work items at the head of the queue instead of just the tail by passing the TQ_FRONT flag.
This commit is contained in:
parent
32c6147dee
commit
eb12b3782c
|
@ -39,6 +39,7 @@
|
||||||
#define TASKQ_CPR_SAFE 0x00000002
|
#define TASKQ_CPR_SAFE 0x00000002
|
||||||
#define TASKQ_DYNAMIC 0x00000004
|
#define TASKQ_DYNAMIC 0x00000004
|
||||||
#define TASKQ_THREADS_CPU_PCT 0x00000008
|
#define TASKQ_THREADS_CPU_PCT 0x00000008
|
||||||
|
#define TASKQ_DC_BATCH 0x00000010
|
||||||
|
|
||||||
typedef unsigned long taskqid_t;
|
typedef unsigned long taskqid_t;
|
||||||
typedef void (task_func_t)(void *);
|
typedef void (task_func_t)(void *);
|
||||||
|
@ -53,6 +54,7 @@ typedef void (task_func_t)(void *);
|
||||||
#define TQ_NOQUEUE 0x01000000
|
#define TQ_NOQUEUE 0x01000000
|
||||||
#define TQ_NOALLOC 0x02000000
|
#define TQ_NOALLOC 0x02000000
|
||||||
#define TQ_NEW 0x04000000
|
#define TQ_NEW 0x04000000
|
||||||
|
#define TQ_FRONT 0x08000000
|
||||||
#define TQ_ACTIVE 0x80000000
|
#define TQ_ACTIVE 0x80000000
|
||||||
|
|
||||||
typedef struct taskq {
|
typedef struct taskq {
|
||||||
|
|
|
@ -274,7 +274,13 @@ __taskq_dispatch(taskq_t *tq, task_func_t func, void *arg, uint_t flags)
|
||||||
GOTO(out, rc = 0);
|
GOTO(out, rc = 0);
|
||||||
|
|
||||||
spin_lock(&t->t_lock);
|
spin_lock(&t->t_lock);
|
||||||
|
|
||||||
|
/* Queue to the head instead of the tail */
|
||||||
|
if (flags & TQ_FRONT)
|
||||||
|
list_add(&t->t_list, &tq->tq_pend_list);
|
||||||
|
else
|
||||||
list_add_tail(&t->t_list, &tq->tq_pend_list);
|
list_add_tail(&t->t_list, &tq->tq_pend_list);
|
||||||
|
|
||||||
t->t_id = rc = tq->tq_next_id;
|
t->t_id = rc = tq->tq_next_id;
|
||||||
tq->tq_next_id++;
|
tq->tq_next_id++;
|
||||||
t->t_func = func;
|
t->t_func = func;
|
||||||
|
|
Loading…
Reference in New Issue