Lines Matching full:task

13 int __rxe_do_task(struct rxe_task *task)  in __rxe_do_task()  argument
18 while ((ret = task->func(task->arg)) == 0) in __rxe_do_task()
21 task->ret = ret; in __rxe_do_task()
28 * a second caller finds the task already running
36 struct rxe_task *task = from_tasklet(task, t, tasklet); in rxe_do_task() local
39 spin_lock_irqsave(&task->state_lock, flags); in rxe_do_task()
40 switch (task->state) { in rxe_do_task()
42 task->state = TASK_STATE_BUSY; in rxe_do_task()
43 spin_unlock_irqrestore(&task->state_lock, flags); in rxe_do_task()
47 task->state = TASK_STATE_ARMED; in rxe_do_task()
50 spin_unlock_irqrestore(&task->state_lock, flags); in rxe_do_task()
54 spin_unlock_irqrestore(&task->state_lock, flags); in rxe_do_task()
55 pr_warn("%s failed with bad state %d\n", __func__, task->state); in rxe_do_task()
61 ret = task->func(task->arg); in rxe_do_task()
63 spin_lock_irqsave(&task->state_lock, flags); in rxe_do_task()
64 switch (task->state) { in rxe_do_task()
67 task->state = TASK_STATE_START; in rxe_do_task()
74 tasklet_schedule(&task->tasklet); in rxe_do_task()
75 task->state = TASK_STATE_START; in rxe_do_task()
79 /* someone tried to run the task since the last time we called in rxe_do_task()
84 task->state = TASK_STATE_BUSY; in rxe_do_task()
90 task->state); in rxe_do_task()
92 spin_unlock_irqrestore(&task->state_lock, flags); in rxe_do_task()
95 task->ret = ret; in rxe_do_task()
98 int rxe_init_task(void *obj, struct rxe_task *task, in rxe_init_task() argument
101 task->obj = obj; in rxe_init_task()
102 task->arg = arg; in rxe_init_task()
103 task->func = func; in rxe_init_task()
104 snprintf(task->name, sizeof(task->name), "%s", name); in rxe_init_task()
105 task->destroyed = false; in rxe_init_task()
107 tasklet_setup(&task->tasklet, rxe_do_task); in rxe_init_task()
109 task->state = TASK_STATE_START; in rxe_init_task()
110 spin_lock_init(&task->state_lock); in rxe_init_task()
115 void rxe_cleanup_task(struct rxe_task *task) in rxe_cleanup_task() argument
121 * Mark the task, then wait for it to finish. It might be in rxe_cleanup_task()
124 task->destroyed = true; in rxe_cleanup_task()
127 spin_lock_irqsave(&task->state_lock, flags); in rxe_cleanup_task()
128 idle = (task->state == TASK_STATE_START); in rxe_cleanup_task()
129 spin_unlock_irqrestore(&task->state_lock, flags); in rxe_cleanup_task()
132 tasklet_kill(&task->tasklet); in rxe_cleanup_task()
135 void rxe_run_task(struct rxe_task *task, int sched) in rxe_run_task() argument
137 if (task->destroyed) in rxe_run_task()
141 tasklet_schedule(&task->tasklet); in rxe_run_task()
143 rxe_do_task(&task->tasklet); in rxe_run_task()
146 void rxe_disable_task(struct rxe_task *task) in rxe_disable_task() argument
148 tasklet_disable(&task->tasklet); in rxe_disable_task()
151 void rxe_enable_task(struct rxe_task *task) in rxe_enable_task() argument
153 tasklet_enable(&task->tasklet); in rxe_enable_task()