Lines Matching defs:dwork
118 linux_delayed_work_enqueue(struct delayed_work *dwork)
122 tq = dwork->work.work_queue->taskqueue;
123 taskqueue_enqueue(tq, &dwork->work.work_task);
216 struct delayed_work *dwork, unsigned long delay)
228 return (!work_pending(&dwork->work));
237 mtx_lock(&dwork->timer.mtx);
238 switch (linux_update_state(&dwork->work.state, states)) {
241 if (delay == 0 && linux_work_exec_unblock(&dwork->work)) {
242 dwork->timer.expires = jiffies;
248 dwork->work.work_queue = wq;
249 dwork->timer.expires = jiffies + delay;
252 linux_delayed_work_enqueue(dwork);
254 callout_reset_on(&dwork->timer.callout, delay,
255 &linux_delayed_work_timer_fn, dwork, cpu);
257 callout_reset(&dwork->timer.callout, delay,
258 &linux_delayed_work_timer_fn, dwork);
267 mtx_unlock(&dwork->timer.mtx);
335 struct delayed_work *dwork = context;
344 callout_drain(&dwork->timer.callout);
346 linux_work_fn(&dwork->work, pending);
359 struct delayed_work *dwork = arg;
361 switch (linux_update_state(&dwork->work.state, states)) {
364 linux_delayed_work_enqueue(dwork);
449 linux_cancel_timer(struct delayed_work *dwork, bool drain)
453 mtx_lock(&dwork->timer.mtx);
454 cancelled = (callout_stop(&dwork->timer.callout) == 1);
455 mtx_unlock(&dwork->timer.mtx);
459 callout_drain(&dwork->timer.callout);
470 linux_cancel_delayed_work(struct delayed_work *dwork)
482 mtx_lock(&dwork->timer.mtx);
483 switch (linux_update_state(&dwork->work.state, states)) {
486 cancelled = (callout_stop(&dwork->timer.callout) == 1);
488 atomic_cmpxchg(&dwork->work.state,
490 mtx_unlock(&dwork->timer.mtx);
495 tq = dwork->work.work_queue->taskqueue;
496 if (taskqueue_cancel(tq, &dwork->work.work_task, NULL) == 0) {
497 atomic_cmpxchg(&dwork->work.state,
499 mtx_unlock(&dwork->timer.mtx);
504 mtx_unlock(&dwork->timer.mtx);
516 linux_cancel_delayed_work_sync_int(struct delayed_work *dwork, u_int *pending,
532 mtx_lock(&dwork->timer.mtx);
534 state = linux_update_state(&dwork->work.state, states);
547 mtx_unlock(&dwork->timer.mtx);
551 stopped = (callout_stop(&dwork->timer.callout) == 1);
553 tq = dwork->work.work_queue->taskqueue;
554 ret = taskqueue_cancel(tq, &dwork->work.work_task, pending);
555 mtx_unlock(&dwork->timer.mtx);
557 callout_drain(&dwork->timer.callout);
558 taskqueue_drain(tq, &dwork->work.work_task);
561 tq = dwork->work.work_queue->taskqueue;
562 ret = taskqueue_cancel(tq, &dwork->work.work_task, pending);
563 mtx_unlock(&dwork->timer.mtx);
565 taskqueue_drain(tq, &dwork->work.work_task);
571 linux_cancel_delayed_work_sync(struct delayed_work *dwork)
581 ret = linux_cancel_delayed_work_sync_int(dwork, &pending,
620 linux_flush_delayed_work(struct delayed_work *dwork)
628 switch (atomic_read(&dwork->work.state)) {
632 if (linux_cancel_timer(dwork, 1))
633 linux_delayed_work_enqueue(dwork);
636 tq = dwork->work.work_queue->taskqueue;
637 retval = taskqueue_poll_is_busy(tq, &dwork->work.work_task);
638 taskqueue_drain(tq, &dwork->work.work_task);
712 linux_init_delayed_work(struct delayed_work *dwork, work_func_t func)
714 memset(dwork, 0, sizeof(*dwork));
715 dwork->work.func = func;
716 TASK_INIT(&dwork->work.work_task, 0, linux_delayed_work_fn, dwork);
717 mtx_init(&dwork->timer.mtx, spin_lock_name("lkpi-dwork"), NULL,
719 callout_init_mtx(&dwork->timer.callout, &dwork->timer.mtx, 0);