Lines Matching refs:dwork
119 linux_delayed_work_enqueue(struct delayed_work *dwork) in linux_delayed_work_enqueue() argument
123 tq = dwork->work.work_queue->taskqueue; in linux_delayed_work_enqueue()
124 taskqueue_enqueue(tq, &dwork->work.work_task); in linux_delayed_work_enqueue()
217 struct delayed_work *dwork, unsigned delay) in linux_queue_delayed_work_on() argument
228 return (!work_pending(&dwork->work)); 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) != 0) { in linux_queue_delayed_work_on()
234 dwork->timer.expires = jiffies; in linux_queue_delayed_work_on()
239 dwork->work.work_queue = wq; in linux_queue_delayed_work_on()
240 dwork->timer.expires = jiffies + delay; in linux_queue_delayed_work_on()
243 linux_delayed_work_enqueue(dwork); in linux_queue_delayed_work_on()
245 mtx_lock(&dwork->timer.mtx); 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()
248 mtx_unlock(&dwork->timer.mtx); in linux_queue_delayed_work_on()
250 mtx_lock(&dwork->timer.mtx); in linux_queue_delayed_work_on()
251 callout_reset(&dwork->timer.callout, delay, in linux_queue_delayed_work_on()
252 &linux_delayed_work_timer_fn, dwork); in linux_queue_delayed_work_on()
253 mtx_unlock(&dwork->timer.mtx); in linux_queue_delayed_work_on()
325 struct delayed_work *dwork = context; in linux_delayed_work_fn() local
334 callout_drain(&dwork->timer.callout); in linux_delayed_work_fn()
336 linux_work_fn(&dwork->work, pending); in linux_delayed_work_fn()
349 struct delayed_work *dwork = arg; in linux_delayed_work_timer_fn() local
351 switch (linux_update_state(&dwork->work.state, states)) { in linux_delayed_work_timer_fn()
354 linux_delayed_work_enqueue(dwork); in linux_delayed_work_timer_fn()
407 linux_cancel_timer(struct delayed_work *dwork, bool drain) in linux_cancel_timer() argument
411 mtx_lock(&dwork->timer.mtx); in linux_cancel_timer()
412 cancelled = (callout_stop(&dwork->timer.callout) == 1); in linux_cancel_timer()
413 mtx_unlock(&dwork->timer.mtx); in linux_cancel_timer()
417 callout_drain(&dwork->timer.callout); in linux_cancel_timer()
428 linux_cancel_delayed_work(struct delayed_work *dwork) in linux_cancel_delayed_work() argument
440 mtx_lock(&dwork->timer.mtx); in linux_cancel_delayed_work()
441 switch (linux_update_state(&dwork->work.state, states)) { in linux_cancel_delayed_work()
444 cancelled = (callout_stop(&dwork->timer.callout) == 1); in linux_cancel_delayed_work()
446 atomic_cmpxchg(&dwork->work.state, in linux_cancel_delayed_work()
448 mtx_unlock(&dwork->timer.mtx); in linux_cancel_delayed_work()
453 tq = dwork->work.work_queue->taskqueue; in linux_cancel_delayed_work()
454 if (taskqueue_cancel(tq, &dwork->work.work_task, NULL) == 0) { in linux_cancel_delayed_work()
455 atomic_cmpxchg(&dwork->work.state, in linux_cancel_delayed_work()
457 mtx_unlock(&dwork->timer.mtx); in linux_cancel_delayed_work()
462 mtx_unlock(&dwork->timer.mtx); in linux_cancel_delayed_work()
473 linux_cancel_delayed_work_sync(struct delayed_work *dwork) in linux_cancel_delayed_work_sync() argument
489 mtx_lock(&dwork->timer.mtx); in linux_cancel_delayed_work_sync()
491 state = linux_update_state(&dwork->work.state, states); in linux_cancel_delayed_work_sync()
494 mtx_unlock(&dwork->timer.mtx); in linux_cancel_delayed_work_sync()
498 cancelled = (callout_stop(&dwork->timer.callout) == 1); in linux_cancel_delayed_work_sync()
500 tq = dwork->work.work_queue->taskqueue; in linux_cancel_delayed_work_sync()
501 ret = taskqueue_cancel(tq, &dwork->work.work_task, NULL); in linux_cancel_delayed_work_sync()
502 mtx_unlock(&dwork->timer.mtx); in linux_cancel_delayed_work_sync()
504 callout_drain(&dwork->timer.callout); in linux_cancel_delayed_work_sync()
505 taskqueue_drain(tq, &dwork->work.work_task); in linux_cancel_delayed_work_sync()
508 tq = dwork->work.work_queue->taskqueue; in linux_cancel_delayed_work_sync()
509 ret = taskqueue_cancel(tq, &dwork->work.work_task, NULL); in linux_cancel_delayed_work_sync()
510 mtx_unlock(&dwork->timer.mtx); in linux_cancel_delayed_work_sync()
512 taskqueue_drain(tq, &dwork->work.work_task); in linux_cancel_delayed_work_sync()
548 linux_flush_delayed_work(struct delayed_work *dwork) in linux_flush_delayed_work() argument
556 switch (atomic_read(&dwork->work.state)) { in linux_flush_delayed_work()
560 if (linux_cancel_timer(dwork, 1)) in linux_flush_delayed_work()
561 linux_delayed_work_enqueue(dwork); in linux_flush_delayed_work()
564 tq = dwork->work.work_queue->taskqueue; in linux_flush_delayed_work()
565 retval = taskqueue_poll_is_busy(tq, &dwork->work.work_task); in linux_flush_delayed_work()
566 taskqueue_drain(tq, &dwork->work.work_task); in linux_flush_delayed_work()
640 linux_init_delayed_work(struct delayed_work *dwork, work_func_t func) in linux_init_delayed_work() argument
642 memset(dwork, 0, sizeof(*dwork)); in linux_init_delayed_work()
643 dwork->work.func = func; in linux_init_delayed_work()
644 TASK_INIT(&dwork->work.work_task, 0, linux_delayed_work_fn, dwork); in linux_init_delayed_work()
645 mtx_init(&dwork->timer.mtx, spin_lock_name("lkpi-dwork"), NULL, in linux_init_delayed_work()
647 callout_init_mtx(&dwork->timer.callout, &dwork->timer.mtx, 0); in linux_init_delayed_work()