Lines Matching refs:work

562 static void triggered_work_handler(struct k_work *work)  in triggered_work_handler()  argument
565 CONTAINER_OF(work, struct k_work_poll, work); in triggered_work_handler()
582 twork->real_handler(work); in triggered_work_handler()
592 k_work_submit_to_queue(twork->workq, &twork->work); in triggered_work_expiration_handler()
596 struct k_work *work);
609 z_work_submit_to_queue(work_q, &twork->work); in signal_triggered_work()
615 static int triggered_work_cancel(struct k_work_poll *work, in triggered_work_cancel() argument
619 if (work->poller.is_polling && work->poller.mode != MODE_NONE) { in triggered_work_cancel()
621 z_abort_timeout(&work->timeout); in triggered_work_cancel()
627 work->poller.mode = MODE_NONE; in triggered_work_cancel()
630 clear_event_registrations(work->events, work->num_events, key); in triggered_work_cancel()
631 work->workq = NULL; in triggered_work_cancel()
645 void k_work_poll_init(struct k_work_poll *work, in k_work_poll_init() argument
648 SYS_PORT_TRACING_OBJ_FUNC_ENTER(k_work_poll, init, work); in k_work_poll_init()
650 *work = (struct k_work_poll) {}; in k_work_poll_init()
651 k_work_init(&work->work, triggered_work_handler); in k_work_poll_init()
652 work->real_handler = handler; in k_work_poll_init()
653 z_init_timeout(&work->timeout); in k_work_poll_init()
655 SYS_PORT_TRACING_OBJ_FUNC_EXIT(k_work_poll, init, work); in k_work_poll_init()
659 struct k_work_poll *work, in k_work_poll_submit_to_queue() argument
668 __ASSERT(work != NULL, "NULL work\n"); in k_work_poll_submit_to_queue()
672 SYS_PORT_TRACING_FUNC_ENTER(k_work_poll, submit_to_queue, work_q, work, timeout); in k_work_poll_submit_to_queue()
676 if (work->workq != NULL) { in k_work_poll_submit_to_queue()
677 if (work->workq == work_q) { in k_work_poll_submit_to_queue()
680 retval = triggered_work_cancel(work, key); in k_work_poll_submit_to_queue()
685 work, timeout, retval); in k_work_poll_submit_to_queue()
693 work, timeout, -EADDRINUSE); in k_work_poll_submit_to_queue()
700 work->poller.is_polling = true; in k_work_poll_submit_to_queue()
701 work->workq = work_q; in k_work_poll_submit_to_queue()
702 work->poller.mode = MODE_NONE; in k_work_poll_submit_to_queue()
706 work->events = events; in k_work_poll_submit_to_queue()
707 work->num_events = num_events; in k_work_poll_submit_to_queue()
710 work->poll_result = -EINPROGRESS; in k_work_poll_submit_to_queue()
714 &work->poller, false); in k_work_poll_submit_to_queue()
717 if (work->poller.is_polling && !K_TIMEOUT_EQ(timeout, K_NO_WAIT)) { in k_work_poll_submit_to_queue()
727 z_add_timeout(&work->timeout, in k_work_poll_submit_to_queue()
733 work->poller.mode = MODE_TRIGGERED; in k_work_poll_submit_to_queue()
736 SYS_PORT_TRACING_FUNC_EXIT(k_work_poll, submit_to_queue, work_q, work, timeout, 0); in k_work_poll_submit_to_queue()
752 if (work->poller.is_polling) { in k_work_poll_submit_to_queue()
753 work->poller.is_polling = false; in k_work_poll_submit_to_queue()
754 work->poll_result = -EAGAIN; in k_work_poll_submit_to_queue()
756 work->poll_result = 0; in k_work_poll_submit_to_queue()
764 k_work_submit_to_queue(work_q, &work->work); in k_work_poll_submit_to_queue()
766 SYS_PORT_TRACING_FUNC_EXIT(k_work_poll, submit_to_queue, work_q, work, timeout, 0); in k_work_poll_submit_to_queue()
771 int k_work_poll_submit(struct k_work_poll *work, in k_work_poll_submit() argument
776 SYS_PORT_TRACING_FUNC_ENTER(k_work_poll, submit, work, timeout); in k_work_poll_submit()
778 int ret = k_work_poll_submit_to_queue(&k_sys_work_q, work, in k_work_poll_submit()
781 SYS_PORT_TRACING_FUNC_EXIT(k_work_poll, submit, work, timeout, ret); in k_work_poll_submit()
786 int k_work_poll_cancel(struct k_work_poll *work) in k_work_poll_cancel() argument
791 SYS_PORT_TRACING_FUNC_ENTER(k_work_poll, cancel, work); in k_work_poll_cancel()
794 if (work == NULL || work->workq == NULL) { in k_work_poll_cancel()
795 SYS_PORT_TRACING_FUNC_EXIT(k_work_poll, cancel, work, -EINVAL); in k_work_poll_cancel()
801 retval = triggered_work_cancel(work, key); in k_work_poll_cancel()
804 SYS_PORT_TRACING_FUNC_EXIT(k_work_poll, cancel, work, retval); in k_work_poll_cancel()