Lines Matching refs:ts

43 #define	TASKLET_ST_CMPSET(ts, old, new)	\  argument
44 atomic_cmpset_int((volatile u_int *)&(ts)->tasklet_state, old, new)
46 #define TASKLET_ST_SET(ts, new) \ argument
47 WRITE_ONCE(*(volatile u_int *)&(ts)->tasklet_state, new)
49 #define TASKLET_ST_GET(ts) \ argument
50 READ_ONCE(*(volatile u_int *)&(ts)->tasklet_state)
67 struct tasklet_struct *ts; in tasklet_handler() local
75 ts = TAILQ_FIRST(&tw->head); in tasklet_handler()
76 if (ts == NULL) in tasklet_handler()
78 TAILQ_REMOVE(&tw->head, ts, entry); in tasklet_handler()
80 if (!atomic_read(&ts->count)) { in tasklet_handler()
84 TASKLET_ST_SET(ts, TASKLET_ST_EXEC); in tasklet_handler()
86 if (ts->use_callback) in tasklet_handler()
87 ts->callback(ts); in tasklet_handler()
89 ts->func(ts->data); in tasklet_handler()
91 } while (TASKLET_ST_CMPSET(ts, TASKLET_ST_EXEC, in tasklet_handler()
95 TAILQ_INSERT_TAIL(&tw->head, ts, entry); in tasklet_handler()
97 if (ts == last) in tasklet_handler()
147 tasklet_init(struct tasklet_struct *ts, in tasklet_init() argument
150 ts->entry.tqe_prev = NULL; in tasklet_init()
151 ts->entry.tqe_next = NULL; in tasklet_init()
152 ts->func = func; in tasklet_init()
153 ts->callback = NULL; in tasklet_init()
154 ts->data = data; in tasklet_init()
155 atomic_set_int(&ts->tasklet_state, TASKLET_ST_IDLE); in tasklet_init()
156 atomic_set(&ts->count, 0); in tasklet_init()
157 ts->use_callback = false; in tasklet_init()
161 tasklet_setup(struct tasklet_struct *ts, tasklet_callback_t *c) in tasklet_setup() argument
163 ts->entry.tqe_prev = NULL; in tasklet_setup()
164 ts->entry.tqe_next = NULL; in tasklet_setup()
165 ts->func = NULL; in tasklet_setup()
166 ts->callback = c; in tasklet_setup()
167 ts->data = 0; in tasklet_setup()
168 atomic_set_int(&ts->tasklet_state, TASKLET_ST_IDLE); in tasklet_setup()
169 atomic_set(&ts->count, 0); in tasklet_setup()
170 ts->use_callback = true; in tasklet_setup()
186 tasklet_schedule(struct tasklet_struct *ts) in tasklet_schedule() argument
190 if (atomic_read(&ts->count)) in tasklet_schedule()
193 if (TASKLET_ST_CMPSET(ts, TASKLET_ST_EXEC, TASKLET_ST_LOOP)) { in tasklet_schedule()
195 } else if (TASKLET_ST_CMPSET(ts, TASKLET_ST_IDLE, TASKLET_ST_BUSY)) { in tasklet_schedule()
203 TAILQ_INSERT_TAIL(&tw->head, ts, entry); in tasklet_schedule()
223 tasklet_kill(struct tasklet_struct *ts) in tasklet_kill() argument
229 while (TASKLET_ST_GET(ts) != TASKLET_ST_IDLE) in tasklet_kill()
234 tasklet_enable(struct tasklet_struct *ts) in tasklet_enable() argument
237 atomic_dec(&ts->count); in tasklet_enable()
241 tasklet_disable(struct tasklet_struct *ts) in tasklet_disable() argument
244 atomic_inc(&ts->count); in tasklet_disable()
245 tasklet_unlock_wait(ts); in tasklet_disable()
249 tasklet_disable_nosync(struct tasklet_struct *ts) in tasklet_disable_nosync() argument
251 atomic_inc(&ts->count); in tasklet_disable_nosync()
256 tasklet_trylock(struct tasklet_struct *ts) in tasklet_trylock() argument
259 return (TASKLET_ST_CMPSET(ts, TASKLET_ST_IDLE, TASKLET_ST_BUSY)); in tasklet_trylock()
263 tasklet_unlock(struct tasklet_struct *ts) in tasklet_unlock() argument
266 TASKLET_ST_SET(ts, TASKLET_ST_IDLE); in tasklet_unlock()
270 tasklet_unlock_wait(struct tasklet_struct *ts) in tasklet_unlock_wait() argument
276 while (TASKLET_ST_GET(ts) != TASKLET_ST_IDLE) in tasklet_unlock_wait()