Lines Matching refs:ts
42 #define TASKLET_ST_CMPSET(ts, old, new) \ argument
43 atomic_cmpset_int((volatile u_int *)&(ts)->tasklet_state, old, new)
45 #define TASKLET_ST_SET(ts, new) \ argument
46 WRITE_ONCE(*(volatile u_int *)&(ts)->tasklet_state, new)
48 #define TASKLET_ST_GET(ts) \ argument
49 READ_ONCE(*(volatile u_int *)&(ts)->tasklet_state)
66 struct tasklet_struct *ts; in tasklet_handler() local
74 ts = TAILQ_FIRST(&tw->head); in tasklet_handler()
75 if (ts == NULL) in tasklet_handler()
77 TAILQ_REMOVE(&tw->head, ts, entry); in tasklet_handler()
79 if (!atomic_read(&ts->count)) { in tasklet_handler()
83 TASKLET_ST_SET(ts, TASKLET_ST_EXEC); in tasklet_handler()
85 if (ts->use_callback) in tasklet_handler()
86 ts->callback(ts); in tasklet_handler()
88 ts->func(ts->data); in tasklet_handler()
90 } while (TASKLET_ST_CMPSET(ts, TASKLET_ST_EXEC, in tasklet_handler()
94 TAILQ_INSERT_TAIL(&tw->head, ts, entry); in tasklet_handler()
96 if (ts == last) in tasklet_handler()
146 tasklet_init(struct tasklet_struct *ts, in tasklet_init() argument
149 ts->entry.tqe_prev = NULL; in tasklet_init()
150 ts->entry.tqe_next = NULL; in tasklet_init()
151 ts->func = func; in tasklet_init()
152 ts->callback = NULL; in tasklet_init()
153 ts->data = data; in tasklet_init()
154 atomic_set_int(&ts->tasklet_state, TASKLET_ST_IDLE); in tasklet_init()
155 atomic_set(&ts->count, 0); in tasklet_init()
156 ts->use_callback = false; in tasklet_init()
160 tasklet_setup(struct tasklet_struct *ts, tasklet_callback_t *c) in tasklet_setup() argument
162 ts->entry.tqe_prev = NULL; in tasklet_setup()
163 ts->entry.tqe_next = NULL; in tasklet_setup()
164 ts->func = NULL; in tasklet_setup()
165 ts->callback = c; in tasklet_setup()
166 ts->data = 0; in tasklet_setup()
167 atomic_set_int(&ts->tasklet_state, TASKLET_ST_IDLE); in tasklet_setup()
168 atomic_set(&ts->count, 0); in tasklet_setup()
169 ts->use_callback = true; in tasklet_setup()
185 tasklet_schedule(struct tasklet_struct *ts) in tasklet_schedule() argument
189 if (atomic_read(&ts->count)) in tasklet_schedule()
192 if (TASKLET_ST_CMPSET(ts, TASKLET_ST_EXEC, TASKLET_ST_LOOP)) { in tasklet_schedule()
194 } else if (TASKLET_ST_CMPSET(ts, TASKLET_ST_IDLE, TASKLET_ST_BUSY)) { in tasklet_schedule()
202 TAILQ_INSERT_TAIL(&tw->head, ts, entry); in tasklet_schedule()
222 tasklet_kill(struct tasklet_struct *ts) in tasklet_kill() argument
228 while (TASKLET_ST_GET(ts) != TASKLET_ST_IDLE) in tasklet_kill()
233 tasklet_enable(struct tasklet_struct *ts) in tasklet_enable() argument
236 atomic_dec(&ts->count); in tasklet_enable()
240 tasklet_disable(struct tasklet_struct *ts) in tasklet_disable() argument
243 atomic_inc(&ts->count); in tasklet_disable()
244 tasklet_unlock_wait(ts); in tasklet_disable()
248 tasklet_disable_nosync(struct tasklet_struct *ts) in tasklet_disable_nosync() argument
250 atomic_inc(&ts->count); in tasklet_disable_nosync()
255 tasklet_trylock(struct tasklet_struct *ts) in tasklet_trylock() argument
258 return (TASKLET_ST_CMPSET(ts, TASKLET_ST_IDLE, TASKLET_ST_BUSY)); in tasklet_trylock()
262 tasklet_unlock(struct tasklet_struct *ts) in tasklet_unlock() argument
265 TASKLET_ST_SET(ts, TASKLET_ST_IDLE); in tasklet_unlock()
269 tasklet_unlock_wait(struct tasklet_struct *ts) in tasklet_unlock_wait() argument
275 while (TASKLET_ST_GET(ts) != TASKLET_ST_IDLE) in tasklet_unlock_wait()