summaryrefslogtreecommitdiffstats
path: root/freebsd/sys/kern/subr_taskqueue.c
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2018-08-07 14:56:50 +0200
committerSebastian Huber <sebastian.huber@embedded-brains.de>2018-09-21 10:29:37 +0200
commitc37f9fba70085fedc8eede7559489d2321393005 (patch)
tree042455ebf1fa89a277a825f72e1ed805d0b4d296 /freebsd/sys/kern/subr_taskqueue.c
parentUpdate to FreeBSD head 2017-06-01 (diff)
downloadrtems-libbsd-c37f9fba70085fedc8eede7559489d2321393005.tar.bz2
Update to FreeBSD head 2017-08-01
Git mirror commit f5002f5e5f78cae9f0269d812dc0aedb0339312c. Update #3472.
Diffstat (limited to 'freebsd/sys/kern/subr_taskqueue.c')
-rw-r--r--freebsd/sys/kern/subr_taskqueue.c25
1 files changed, 17 insertions, 8 deletions
diff --git a/freebsd/sys/kern/subr_taskqueue.c b/freebsd/sys/kern/subr_taskqueue.c
index 6f1ba19a..74b9cf59 100644
--- a/freebsd/sys/kern/subr_taskqueue.c
+++ b/freebsd/sys/kern/subr_taskqueue.c
@@ -316,8 +316,8 @@ taskqueue_timeout_func(void *arg)
}
int
-taskqueue_enqueue_timeout(struct taskqueue *queue,
- struct timeout_task *timeout_task, int ticks)
+taskqueue_enqueue_timeout_sbt(struct taskqueue *queue,
+ struct timeout_task *timeout_task, sbintime_t sbt, sbintime_t pr, int flags)
{
int res;
@@ -333,7 +333,7 @@ taskqueue_enqueue_timeout(struct taskqueue *queue,
/* Do nothing */
TQ_UNLOCK(queue);
res = -1;
- } else if (ticks == 0) {
+ } else if (sbt == 0) {
taskqueue_enqueue_locked(queue, &timeout_task->t);
/* The lock is released inside. */
} else {
@@ -342,18 +342,27 @@ taskqueue_enqueue_timeout(struct taskqueue *queue,
} else {
queue->tq_callouts++;
timeout_task->f |= DT_CALLOUT_ARMED;
- if (ticks < 0)
- ticks = -ticks; /* Ignore overflow. */
+ if (sbt < 0)
+ sbt = -sbt; /* Ignore overflow. */
}
- if (ticks > 0) {
- callout_reset(&timeout_task->c, ticks,
- taskqueue_timeout_func, timeout_task);
+ if (sbt > 0) {
+ callout_reset_sbt(&timeout_task->c, sbt, pr,
+ taskqueue_timeout_func, timeout_task, flags);
}
TQ_UNLOCK(queue);
}
return (res);
}
+int
+taskqueue_enqueue_timeout(struct taskqueue *queue,
+ struct timeout_task *ttask, int ticks)
+{
+
+ return (taskqueue_enqueue_timeout_sbt(queue, ttask, ticks * tick_sbt,
+ 0, 0));
+}
+
static void
taskqueue_task_nop_fn(void *context, int pending)
{