Lines Matching refs:s

152 serializer_exec(serializer_t *s, srproc_t proc, mblk_t *mp, void *arg)  in serializer_exec()  argument
154 ASSERT(MUTEX_NOT_HELD(&s->ser_lock)); in serializer_exec()
155 ASSERT(s->ser_owner == curthread); in serializer_exec()
160 s->ser_curr = mp; in serializer_exec()
161 s->ser_arg = arg; in serializer_exec()
162 s->ser_proc = proc; in serializer_exec()
170 serializer_enqueue(serializer_t *s, srproc_t proc, mblk_t *mp, void *arg) in serializer_enqueue() argument
172 ASSERT(MUTEX_HELD(&s->ser_lock)); in serializer_enqueue()
174 DTRACE_PROBE4(serializer__enqueue, serializer_t *, s, in serializer_enqueue()
176 s->ser_count++; in serializer_enqueue()
179 if (s->ser_last != NULL) in serializer_enqueue()
180 s->ser_last->b_next = mp; in serializer_enqueue()
182 s->ser_first = mp; in serializer_enqueue()
183 s->ser_last = mp; in serializer_enqueue()
190 serializer_drain(serializer_t *s, int credit) in serializer_drain() argument
192 mblk_t *mp = s->ser_first; in serializer_drain()
194 ASSERT(MUTEX_HELD(&s->ser_lock)); in serializer_drain()
195 ASSERT(s->ser_owner == curthread); in serializer_drain()
197 for (; mp != NULL && credit-- != 0; mp = s->ser_first) { in serializer_drain()
201 if ((s->ser_first = s->ser_first->b_next) == NULL) { in serializer_drain()
202 s->ser_last = NULL; in serializer_drain()
206 ASSERT(s->ser_count != 0); in serializer_drain()
207 s->ser_count--; in serializer_drain()
210 mutex_exit(&s->ser_lock); in serializer_drain()
212 DTRACE_PROBE4(serializer__exec__start, serializer_t *, s, in serializer_drain()
214 serializer_exec(s, proc, mp, arg); in serializer_drain()
215 DTRACE_PROBE4(serializer__exec__end, serializer_t *, s, in serializer_drain()
218 mutex_enter(&s->ser_lock); in serializer_drain()
226 serializer_drain_completely(serializer_t *s) in serializer_drain_completely() argument
228 mutex_enter(&s->ser_lock); in serializer_drain_completely()
229 ASSERT(s->ser_taskq); in serializer_drain_completely()
230 if (s->ser_owner == NULL) { in serializer_drain_completely()
231 s->ser_owner = curthread; in serializer_drain_completely()
232 while (s->ser_first != NULL) in serializer_drain_completely()
233 serializer_drain(s, INT_MAX); in serializer_drain_completely()
234 s->ser_owner = NULL; in serializer_drain_completely()
235 s->ser_curr = NULL; in serializer_drain_completely()
236 s->ser_proc = NULL; in serializer_drain_completely()
237 s->ser_arg = NULL; in serializer_drain_completely()
239 s->ser_taskq = B_FALSE; in serializer_drain_completely()
243 cv_signal(&s->ser_cv); in serializer_drain_completely()
244 mutex_exit(&s->ser_lock); in serializer_drain_completely()
254 serializer_enter(serializer_t *s, srproc_t proc, mblk_t *mp, void *arg) in serializer_enter() argument
261 ASSERT(MUTEX_NOT_HELD(&s->ser_lock)); in serializer_enter()
263 mutex_enter(&s->ser_lock); in serializer_enter()
264 if (s->ser_owner != NULL) { in serializer_enter()
268 serializer_enqueue(s, proc, mp, arg); in serializer_enter()
276 s->ser_owner = curthread; in serializer_enter()
278 if (s->ser_first != NULL) { in serializer_enter()
279 ASSERT(s->ser_count != 0); in serializer_enter()
280 serializer_enqueue(s, proc, mp, arg); in serializer_enter()
282 ASSERT(s->ser_count == 0); in serializer_enter()
283 mutex_exit(&s->ser_lock); in serializer_enter()
288 serializer_t *, s, mblk_t *, mp, in serializer_enter()
290 serializer_exec(s, proc, mp, arg); in serializer_enter()
292 serializer_t *, s, mblk_t *, mp, in serializer_enter()
294 mutex_enter(&s->ser_lock); in serializer_enter()
302 while ((s->ser_first != NULL) && (tid == 0)) { in serializer_enter()
303 serializer_drain(s, serializer_credit); in serializer_enter()
304 if (s->ser_first != NULL) { in serializer_enter()
310 if (s->ser_taskq) { in serializer_enter()
316 s, TQ_NOSLEEP | TQ_NOQUEUE); in serializer_enter()
318 s->ser_taskq = B_TRUE; in serializer_enter()
322 s->ser_owner = NULL; in serializer_enter()
323 s->ser_curr = NULL; in serializer_enter()
324 s->ser_proc = NULL; in serializer_enter()
325 s->ser_arg = NULL; in serializer_enter()
330 cv_signal(&s->ser_cv); in serializer_enter()
331 mutex_exit(&s->ser_lock); in serializer_enter()
339 serializer_wait(serializer_t *s) in serializer_wait() argument
341 mutex_enter(&s->ser_lock); in serializer_wait()
343 ASSERT(s->ser_owner != curthread); in serializer_wait()
345 while ((s->ser_owner != NULL) || s->ser_taskq || (s->ser_first != NULL)) in serializer_wait()
346 cv_wait(&s->ser_cv, &s->ser_lock); in serializer_wait()
347 ASSERT((s->ser_first == NULL) && (s->ser_last == NULL)); in serializer_wait()
351 cv_signal(&s->ser_cv); in serializer_wait()
352 mutex_exit(&s->ser_lock); in serializer_wait()
368 serializer_destroy(serializer_t *s) in serializer_destroy() argument
370 serializer_wait(s); in serializer_destroy()
372 ASSERT(s->ser_owner == NULL); in serializer_destroy()
373 ASSERT(s->ser_taskq == 0); in serializer_destroy()
374 ASSERT(s->ser_count == 0); in serializer_destroy()
375 ASSERT(s->ser_first == NULL); in serializer_destroy()
376 ASSERT(s->ser_last == NULL); in serializer_destroy()
378 kmem_cache_free(serializer_cache, s); in serializer_destroy()
385 serializer_t *s = buf; in serializer_constructor() local
387 mutex_init(&s->ser_lock, NULL, MUTEX_DEFAULT, NULL); in serializer_constructor()
388 cv_init(&s->ser_cv, NULL, CV_DEFAULT, NULL); in serializer_constructor()
390 s->ser_taskq = 0; in serializer_constructor()
391 s->ser_count = 0; in serializer_constructor()
392 s->ser_first = s->ser_last = s->ser_curr = NULL; in serializer_constructor()
393 s->ser_proc = NULL; in serializer_constructor()
394 s->ser_arg = NULL; in serializer_constructor()
395 s->ser_owner = NULL; in serializer_constructor()
403 serializer_t *s = buf; in serializer_destructor() local
405 mutex_destroy(&s->ser_lock); in serializer_destructor()
406 cv_destroy(&s->ser_cv); in serializer_destructor()