Lines Matching refs:dwork
117 linux_delayed_work_enqueue(struct delayed_work *dwork) in linux_delayed_work_enqueue() argument
121 tq = dwork->work.work_queue->taskqueue; in linux_delayed_work_enqueue()
122 taskqueue_enqueue(tq, &dwork->work.work_task); in linux_delayed_work_enqueue()
215 struct delayed_work *dwork, unsigned delay) in linux_queue_delayed_work_on() argument
227 return (!work_pending(&dwork->work)); in linux_queue_delayed_work_on()
229 mtx_lock(&dwork->timer.mtx); in linux_queue_delayed_work_on()
230 switch (linux_update_state(&dwork->work.state, states)) { in linux_queue_delayed_work_on()
233 if (delay == 0 && linux_work_exec_unblock(&dwork->work)) { in linux_queue_delayed_work_on()
234 dwork->timer.expires = jiffies; in linux_queue_delayed_work_on()
240 dwork->work.work_queue = wq; in linux_queue_delayed_work_on()
241 dwork->timer.expires = jiffies + delay; in linux_queue_delayed_work_on()
244 linux_delayed_work_enqueue(dwork); in linux_queue_delayed_work_on()
246 callout_reset_on(&dwork->timer.callout, delay, in linux_queue_delayed_work_on()
247 &linux_delayed_work_timer_fn, dwork, cpu); in linux_queue_delayed_work_on()
249 callout_reset(&dwork->timer.callout, delay, in linux_queue_delayed_work_on()
250 &linux_delayed_work_timer_fn, dwork); in linux_queue_delayed_work_on()
259 mtx_unlock(&dwork->timer.mtx); in linux_queue_delayed_work_on()
327 struct delayed_work *dwork = context; in linux_delayed_work_fn() local
336 callout_drain(&dwork->timer.callout); in linux_delayed_work_fn()
338 linux_work_fn(&dwork->work, pending); in linux_delayed_work_fn()
351 struct delayed_work *dwork = arg; in linux_delayed_work_timer_fn() local
353 switch (linux_update_state(&dwork->work.state, states)) { in linux_delayed_work_timer_fn()
356 linux_delayed_work_enqueue(dwork); in linux_delayed_work_timer_fn()
441 linux_cancel_timer(struct delayed_work *dwork, bool drain) in linux_cancel_timer() argument
445 mtx_lock(&dwork->timer.mtx); in linux_cancel_timer()
446 cancelled = (callout_stop(&dwork->timer.callout) == 1); in linux_cancel_timer()
447 mtx_unlock(&dwork->timer.mtx); in linux_cancel_timer()
451 callout_drain(&dwork->timer.callout); in linux_cancel_timer()
462 linux_cancel_delayed_work(struct delayed_work *dwork) in linux_cancel_delayed_work() argument
474 mtx_lock(&dwork->timer.mtx); in linux_cancel_delayed_work()
475 switch (linux_update_state(&dwork->work.state, states)) { in linux_cancel_delayed_work()
478 cancelled = (callout_stop(&dwork->timer.callout) == 1); in linux_cancel_delayed_work()
480 atomic_cmpxchg(&dwork->work.state, in linux_cancel_delayed_work()
482 mtx_unlock(&dwork->timer.mtx); in linux_cancel_delayed_work()
487 tq = dwork->work.work_queue->taskqueue; in linux_cancel_delayed_work()
488 if (taskqueue_cancel(tq, &dwork->work.work_task, NULL) == 0) { in linux_cancel_delayed_work()
489 atomic_cmpxchg(&dwork->work.state, in linux_cancel_delayed_work()
491 mtx_unlock(&dwork->timer.mtx); in linux_cancel_delayed_work()
496 mtx_unlock(&dwork->timer.mtx); in linux_cancel_delayed_work()
507 linux_cancel_delayed_work_sync_int(struct delayed_work *dwork) in linux_cancel_delayed_work_sync_int() argument
522 mtx_lock(&dwork->timer.mtx); in linux_cancel_delayed_work_sync_int()
524 state = linux_update_state(&dwork->work.state, states); in linux_cancel_delayed_work_sync_int()
527 mtx_unlock(&dwork->timer.mtx); in linux_cancel_delayed_work_sync_int()
531 cancelled = (callout_stop(&dwork->timer.callout) == 1); in linux_cancel_delayed_work_sync_int()
533 tq = dwork->work.work_queue->taskqueue; in linux_cancel_delayed_work_sync_int()
534 ret = taskqueue_cancel(tq, &dwork->work.work_task, NULL); in linux_cancel_delayed_work_sync_int()
535 mtx_unlock(&dwork->timer.mtx); in linux_cancel_delayed_work_sync_int()
537 callout_drain(&dwork->timer.callout); in linux_cancel_delayed_work_sync_int()
538 taskqueue_drain(tq, &dwork->work.work_task); in linux_cancel_delayed_work_sync_int()
541 tq = dwork->work.work_queue->taskqueue; in linux_cancel_delayed_work_sync_int()
542 ret = taskqueue_cancel(tq, &dwork->work.work_task, NULL); in linux_cancel_delayed_work_sync_int()
543 mtx_unlock(&dwork->timer.mtx); in linux_cancel_delayed_work_sync_int()
545 taskqueue_drain(tq, &dwork->work.work_task); in linux_cancel_delayed_work_sync_int()
551 linux_cancel_delayed_work_sync(struct delayed_work *dwork) in linux_cancel_delayed_work_sync() argument
556 while (linux_cancel_delayed_work_sync_int(dwork)) in linux_cancel_delayed_work_sync()
592 linux_flush_delayed_work(struct delayed_work *dwork) in linux_flush_delayed_work() argument
600 switch (atomic_read(&dwork->work.state)) { in linux_flush_delayed_work()
604 if (linux_cancel_timer(dwork, 1)) in linux_flush_delayed_work()
605 linux_delayed_work_enqueue(dwork); in linux_flush_delayed_work()
608 tq = dwork->work.work_queue->taskqueue; in linux_flush_delayed_work()
609 retval = taskqueue_poll_is_busy(tq, &dwork->work.work_task); in linux_flush_delayed_work()
610 taskqueue_drain(tq, &dwork->work.work_task); in linux_flush_delayed_work()
684 linux_init_delayed_work(struct delayed_work *dwork, work_func_t func) in linux_init_delayed_work() argument
686 memset(dwork, 0, sizeof(*dwork)); in linux_init_delayed_work()
687 dwork->work.func = func; in linux_init_delayed_work()
688 TASK_INIT(&dwork->work.work_task, 0, linux_delayed_work_fn, dwork); in linux_init_delayed_work()
689 mtx_init(&dwork->timer.mtx, spin_lock_name("lkpi-dwork"), NULL, in linux_init_delayed_work()
691 callout_init_mtx(&dwork->timer.callout, &dwork->timer.mtx, 0); in linux_init_delayed_work()