Lines Matching refs:vreq

118 #define	VREQ_DONE(vreq)							\  argument
119 VOID2BOOLEAN(((vreq)->v_status == VREQ_DMAWIN_DONE) && \
120 (((vreq)->v_flush_diskcache == FLUSH_DISKCACHE) || \
121 (((vreq)->v_dmaw + 1) == (vreq)->v_ndmaws)))
124 #define BP_VREQ_SET(bp, vreq) (((bp)->av_back = (buf_t *)(vreq))) argument
284 v_req_t *vreq = NULL; in vreq_get() local
288 vreq = kmem_cache_alloc(xdf_vreq_cache, KM_NOSLEEP); in vreq_get()
289 if (vreq == NULL) { in vreq_get()
296 bzero(vreq, sizeof (v_req_t)); in vreq_get()
297 list_create(&vreq->v_gs, sizeof (ge_slot_t), in vreq_get()
299 vreq->v_buf = bp; in vreq_get()
300 vreq->v_status = VREQ_INIT; in vreq_get()
301 vreq->v_runq = B_FALSE; in vreq_get()
302 BP_VREQ_SET(bp, vreq); in vreq_get()
305 list_insert_head(&vdp->xdf_vreq_act, (void *)vreq); in vreq_get()
307 return (vreq); in vreq_get()
311 vreq_free(xdf_t *vdp, v_req_t *vreq) in vreq_free() argument
313 buf_t *bp = vreq->v_buf; in vreq_free()
316 ASSERT(BP_VREQ(bp) == vreq); in vreq_free()
318 list_remove(&vdp->xdf_vreq_act, vreq); in vreq_free()
320 if (vreq->v_flush_diskcache == FLUSH_DISKCACHE) in vreq_free()
323 switch (vreq->v_status) { in vreq_free()
327 (void) ddi_dma_unbind_handle(vreq->v_dmahdl); in vreq_free()
331 ASSERT(vreq->v_abuf != NULL); in vreq_free()
333 bcopy(vreq->v_abuf, bp->b_un.b_addr, in vreq_free()
335 ddi_dma_mem_free(&vreq->v_align); in vreq_free()
340 ddi_dma_free_handle(&vreq->v_memdmahdl); in vreq_free()
343 ddi_dma_free_handle(&vreq->v_dmahdl); in vreq_free()
349 ASSERT(!vreq->v_runq); in vreq_free()
350 list_destroy(&vreq->v_gs); in vreq_free()
351 kmem_cache_free(xdf_vreq_cache, vreq); in vreq_free()
386 vreq_setup(xdf_t *vdp, v_req_t *vreq) in vreq_setup() argument
400 buf_t *bp = vreq->v_buf; in vreq_setup()
404 switch (vreq->v_status) { in vreq_setup()
412 vreq->v_blkno = 0; in vreq_setup()
413 vreq->v_nslots = 1; in vreq_setup()
414 vreq->v_flush_diskcache = FLUSH_DISKCACHE; in vreq_setup()
415 vreq->v_status = VREQ_GS_ALLOCED; in vreq_setup()
416 gs->gs_vreq = vreq; in vreq_setup()
417 list_insert_head(&vreq->v_gs, gs); in vreq_setup()
422 vreq->v_flush_diskcache = WRITE_BARRIER; in vreq_setup()
423 vreq->v_blkno = bp->b_blkno + in vreq_setup()
427 check_fbwrite(vdp, bp, vreq->v_blkno); in vreq_setup()
428 vreq->v_status = VREQ_INIT_DONE; in vreq_setup()
444 vreq->v_dmahdl = dh; in vreq_setup()
445 vreq->v_status = VREQ_DMAHDL_ALLOCED; in vreq_setup()
469 vreq->v_memdmahdl = mdh; in vreq_setup()
470 vreq->v_status = VREQ_MEMDMAHDL_ALLOCED; in vreq_setup()
481 rc = ddi_dma_mem_alloc(vreq->v_memdmahdl, in vreq_setup()
493 vreq->v_abuf = aba; in vreq_setup()
494 vreq->v_align = abh; in vreq_setup()
495 vreq->v_status = VREQ_DMAMEM_ALLOCED; in vreq_setup()
499 bcopy(bp->b_un.b_addr, vreq->v_abuf, in vreq_setup()
509 rc = ddi_dma_buf_bind_handle(vreq->v_dmahdl, bp, in vreq_setup()
513 rc = ddi_dma_addr_bind_handle(vreq->v_dmahdl, in vreq_setup()
514 NULL, vreq->v_abuf, bp->b_bcount, dma_flags, in vreq_setup()
520 rc = ddi_dma_numwin(vreq->v_dmahdl, &ndws); in vreq_setup()
532 vreq->v_dmac = dc; in vreq_setup()
533 vreq->v_dmaw = 0; in vreq_setup()
534 vreq->v_ndmacs = ndcs; in vreq_setup()
535 vreq->v_ndmaws = ndws; in vreq_setup()
536 vreq->v_nslots = ndws; in vreq_setup()
537 vreq->v_status = VREQ_DMABUF_BOUND; in vreq_setup()
551 vreq->v_status = VREQ_GS_ALLOCED; in vreq_setup()
552 gs->gs_vreq = vreq; in vreq_setup()
553 list_insert_head(&vreq->v_gs, gs); in vreq_setup()
564 ASSERT((vreq->v_dmaw + 1) < vreq->v_ndmaws); in vreq_setup()
573 vreq->v_dmaw++; in vreq_setup()
574 VERIFY(ddi_dma_getwin(vreq->v_dmahdl, vreq->v_dmaw, &off, &sz, in vreq_setup()
575 &vreq->v_dmac, &vreq->v_ndmacs) == DDI_SUCCESS); in vreq_setup()
576 vreq->v_status = VREQ_GS_ALLOCED; in vreq_setup()
577 gs->gs_vreq = vreq; in vreq_setup()
578 list_insert_head(&vreq->v_gs, gs); in vreq_setup()
619 v_req_t *vreq = BP_VREQ(bp); in xdf_kstat_enter() local
625 if ((vreq != NULL) && vreq->v_runq) { in xdf_kstat_enter()
635 v_req_t *vreq = BP_VREQ(bp); in xdf_kstat_exit() local
641 if ((vreq != NULL) && vreq->v_runq) { in xdf_kstat_exit()
651 v_req_t *vreq = BP_VREQ(bp); in xdf_kstat_waitq_to_runq() local
654 ASSERT(!vreq->v_runq); in xdf_kstat_waitq_to_runq()
656 vreq->v_runq = B_TRUE; in xdf_kstat_waitq_to_runq()
665 v_req_t *vreq = BP_VREQ(bp); in xdf_kstat_runq_to_waitq() local
668 ASSERT(vreq->v_runq); in xdf_kstat_runq_to_waitq()
670 vreq->v_runq = B_FALSE; in xdf_kstat_runq_to_waitq()
871 v_req_t *vreq; in xdf_bp_next() local
881 if (((vreq = BP_VREQ(bp)) == NULL) || (!VREQ_DONE(vreq))) in xdf_bp_next()
894 if (((vreq = BP_VREQ(bp)) == NULL) || (!VREQ_DONE(vreq))) in xdf_bp_next()
906 v_req_t *vreq = gs->gs_vreq; in xdf_io_fini() local
907 buf_t *bp = vreq->v_buf; in xdf_io_fini()
910 ASSERT(BP_VREQ(bp) == vreq); in xdf_io_fini()
916 ASSERT(vreq->v_nslots > 0); in xdf_io_fini()
917 if (--vreq->v_nslots > 0) in xdf_io_fini()
923 ASSERT(vreq->v_runq); in xdf_io_fini()
925 vreq->v_runq = B_FALSE; in xdf_io_fini()
926 vreq_free(vdp, vreq); in xdf_io_fini()
1079 v_req_t *vreq; in xdf_ring_destroy() local
1119 while ((vreq = list_head(&vdp->xdf_vreq_act)) != NULL) { in xdf_ring_destroy()
1120 bp = vreq->v_buf; in xdf_ring_destroy()
1121 ASSERT(BP_VREQ(bp) == vreq); in xdf_ring_destroy()
1124 while ((gs = list_head(&vreq->v_gs)) != NULL) in xdf_ring_destroy()
1128 if (vreq->v_runq) in xdf_ring_destroy()
1135 vreq_free(vdp, vreq); in xdf_ring_destroy()
1237 v_req_t *vreq = BP_VREQ(bp); in xdf_process_rreq() local
1238 uint64_t blkno = vreq->v_blkno; in xdf_process_rreq()
1239 uint_t ndmacs = vreq->v_ndmacs; in xdf_process_rreq()
1243 ge_slot_t *gs = list_head(&vreq->v_gs); in xdf_process_rreq()
1246 ASSERT(vreq->v_status == VREQ_GS_ALLOCED); in xdf_process_rreq()
1251 switch (vreq->v_flush_diskcache) { in xdf_process_rreq()
1259 vreq->v_status = VREQ_DMAWIN_DONE; in xdf_process_rreq()
1288 bcnt = vreq->v_dmac.dmac_size; in xdf_process_rreq()
1289 dma_addr = vreq->v_dmac.dmac_laddress; in xdf_process_rreq()
1307 vdp->xdf_addr, seg, vreq->v_dmac.dmac_size, blk_off)); in xdf_process_rreq()
1316 ddi_dma_nextcookie(vreq->v_dmahdl, &vreq->v_dmac); in xdf_process_rreq()
1320 vreq->v_status = VREQ_DMAWIN_DONE; in xdf_process_rreq()
1321 vreq->v_blkno = blkno; in xdf_process_rreq()
1334 v_req_t *vreq; in xdf_io_start() local
1352 if (((vreq = BP_VREQ(bp)) == NULL) && in xdf_io_start()
1353 ((vreq = vreq_get(vdp, bp)) == NULL)) in xdf_io_start()
1357 if (vreq_setup(vdp, vreq) != DDI_SUCCESS) in xdf_io_start()
1373 if (!vreq->v_runq) in xdf_io_start()