Lines Matching defs:iopl

242 scsi_iopool_init(struct scsi_iopool *iopl, void *iocookie,
245 iopl->iocookie = iocookie;
246 iopl->io_get = io_get;
247 iopl->io_put = io_put;
249 TAILQ_INIT(&iopl->queue);
250 iopl->running = 0;
251 mtx_init(&iopl->mtx, IPL_BIO);
255 scsi_iopool_get(struct scsi_iopool *iopl)
260 io = iopl->io_get(iopl->iocookie);
267 scsi_iopool_put(struct scsi_iopool *iopl, void *io)
270 iopl->io_put(iopl->iocookie, io);
275 scsi_iopool_destroy(struct scsi_iopool *iopl)
280 mtx_enter(&iopl->mtx);
281 while ((ioh = TAILQ_FIRST(&iopl->queue)) != NULL) {
282 TAILQ_REMOVE(&iopl->queue, ioh, q_entry);
292 mtx_leave(&iopl->mtx);
320 scsi_ioh_set(struct scsi_iohandler *ioh, struct scsi_iopool *iopl,
324 ioh->pool = iopl;
332 struct scsi_iopool *iopl = ioh->pool;
335 mtx_enter(&iopl->mtx);
338 TAILQ_INSERT_TAIL(&iopl->queue, ioh, q_entry);
349 mtx_leave(&iopl->mtx);
352 scsi_iopool_run(iopl);
360 struct scsi_iopool *iopl = ioh->pool;
363 mtx_enter(&iopl->mtx);
366 TAILQ_REMOVE(&iopl->queue, ioh, q_entry);
377 mtx_leave(&iopl->mtx);
387 scsi_ioh_deq(struct scsi_iopool *iopl)
391 mtx_enter(&iopl->mtx);
392 ioh = TAILQ_FIRST(&iopl->queue);
394 TAILQ_REMOVE(&iopl->queue, ioh, q_entry);
397 mtx_leave(&iopl->mtx);
403 scsi_ioh_pending(struct scsi_iopool *iopl)
407 mtx_enter(&iopl->mtx);
408 rv = !TAILQ_EMPTY(&iopl->queue);
409 mtx_leave(&iopl->mtx);
415 scsi_iopool_run(struct scsi_iopool *iopl)
420 if (!scsi_pending_start(&iopl->mtx, &iopl->running))
423 while (scsi_ioh_pending(iopl)) {
424 io = scsi_iopool_get(iopl);
428 ioh = scsi_ioh_deq(iopl);
430 scsi_iopool_put(iopl, io);
436 } while (!scsi_pending_finish(&iopl->mtx, &iopl->running));
469 scsi_io_get(struct scsi_iopool *iopl, int flags)
476 io = scsi_iopool_get(iopl);
483 scsi_ioh_set(&ioh, iopl, scsi_io_get_done, &m);
497 scsi_io_put(struct scsi_iopool *iopl, void *io)
499 scsi_iopool_put(iopl, io);
500 scsi_iopool_run(iopl);
635 struct scsi_iopool *iopl = link->pool;
642 scsi_ioh_set(&xsh.ioh, iopl, scsi_xs_get_done, &m);
655 } else if ((io = scsi_iopool_get(iopl)) == NULL) {
682 struct scsi_iopool *iopl = link->pool;
686 mtx_enter(&iopl->mtx);
699 ioh = TAILQ_FIRST(&iopl->queue);
712 TAILQ_REMOVE(&iopl->queue, &xsh->ioh, q_entry);
721 msleep_nsec(&link->pending, &iopl->mtx, PRIBIO, "pendxs",
723 mtx_leave(&iopl->mtx);