MINOR: tasks: make current_queue an index instead of a pointer
It will be convenient to have the tasklet queue number soon, better make
current_queue an index rather than a pointer to the queue. When not currently
running (e.g. from I/O), the index is -1.
diff --git a/include/haproxy/task-t.h b/include/haproxy/task-t.h
index 7d23f68..334547b 100644
--- a/include/haproxy/task-t.h
+++ b/include/haproxy/task-t.h
@@ -77,7 +77,7 @@
int task_list_size; /* Number of tasks among the tasklets */
int rqueue_size; /* Number of elements in the per-thread run queue */
struct task *current; /* current task (not tasklet) */
- struct list *current_queue; /* points to current tasklet list being run */
+ int current_queue; /* points to current tasklet list being run, -1 if none */
__attribute__((aligned(64))) char end[0];
};
diff --git a/include/haproxy/task.h b/include/haproxy/task.h
index c60bbd2..acfa2c3 100644
--- a/include/haproxy/task.h
+++ b/include/haproxy/task.h
@@ -329,17 +329,17 @@
/* this tasklet runs on the caller thread */
if (LIST_ISEMPTY(&tl->list)) {
if (tl->state & TASK_SELF_WAKING) {
- LIST_ADDQ(&task_per_thread[tid].tasklets[TL_BULK], &tl->list);
+ LIST_ADDQ(&sched->tasklets[TL_BULK], &tl->list);
}
else if ((struct task *)tl == sched->current) {
_HA_ATOMIC_OR(&tl->state, TASK_SELF_WAKING);
- LIST_ADDQ(&task_per_thread[tid].tasklets[TL_BULK], &tl->list);
+ LIST_ADDQ(&sched->tasklets[TL_BULK], &tl->list);
}
- else if (!sched->current) {
- LIST_ADDQ(&task_per_thread[tid].tasklets[TL_URGENT], &tl->list);
+ else if (sched->current_queue < 0) {
+ LIST_ADDQ(&sched->tasklets[TL_URGENT], &tl->list);
}
else {
- LIST_ADDQ(sched->current_queue, &tl->list);
+ LIST_ADDQ(&sched->tasklets[sched->current_queue], &tl->list);
}
_HA_ATOMIC_ADD(&tasks_run_queue, 1);
diff --git a/src/task.c b/src/task.c
index ed0416c..1bb2ce4 100644
--- a/src/task.c
+++ b/src/task.c
@@ -330,7 +330,6 @@
void *ctx;
int done = 0;
- sched->current_queue = list;
while (done < max && !LIST_ISEMPTY(list)) {
t = (struct task *)LIST_ELEM(list->n, struct tasklet *, list);
state = (t->state & (TASK_SHARED_WQ|TASK_SELF_WAKING));
@@ -402,7 +401,6 @@
done++;
}
- sched->current_queue = NULL;
return done;
}
@@ -551,8 +549,11 @@
/* execute tasklets in each queue */
for (queue = 0; queue < TL_CLASSES; queue++) {
- if (max[queue] > 0)
+ if (max[queue] > 0) {
+ tt->current_queue = queue;
max_processed -= run_tasks_from_list(&tt->tasklets[queue], max[queue]);
+ tt->current_queue = -1;
+ }
}
/* some tasks may have woken other ones up */