Lines Matching full:vc

1076 		       struct vhost_scsi_ctx *vc, u8 status)  in vhost_scsi_send_status()  argument
1085 iov_iter_init(&iov_iter, ITER_DEST, &vq->iov[vc->out], vc->in, in vhost_scsi_send_status()
1091 vhost_add_used_and_signal(&vs->dev, vq, vc->head, 0); in vhost_scsi_send_status()
1103 struct vhost_scsi_ctx *vc, int type) in vhost_scsi_send_bad_target() argument
1127 iov_iter_init(&iov_iter, ITER_DEST, &vq->iov[vc->out], vc->in, in vhost_scsi_send_bad_target()
1133 vhost_add_used_and_signal(&vs->dev, vq, vc->head, 0); in vhost_scsi_send_bad_target()
1140 struct vhost_scsi_ctx *vc, in vhost_scsi_get_desc() argument
1148 vc->head = vhost_get_vq_desc(vq, vq->iov, in vhost_scsi_get_desc()
1149 ARRAY_SIZE(vq->iov), &vc->out, &vc->in, in vhost_scsi_get_desc()
1153 vc->head, vc->out, vc->in); in vhost_scsi_get_desc()
1156 if (unlikely(vc->head < 0)) in vhost_scsi_get_desc()
1160 if (vc->head == vq->num) { in vhost_scsi_get_desc()
1172 vc->out_size = iov_length(vq->iov, vc->out); in vhost_scsi_get_desc()
1173 vc->in_size = iov_length(&vq->iov[vc->out], vc->in); in vhost_scsi_get_desc()
1185 iov_iter_init(&vc->out_iter, ITER_SOURCE, vq->iov, vc->out, vc->out_size); in vhost_scsi_get_desc()
1193 vhost_scsi_chk_size(struct vhost_virtqueue *vq, struct vhost_scsi_ctx *vc) in vhost_scsi_chk_size() argument
1195 if (unlikely(vc->in_size < vc->rsp_size)) { in vhost_scsi_chk_size()
1198 vc->rsp_size, vc->in_size); in vhost_scsi_chk_size()
1200 } else if (unlikely(vc->out_size < vc->req_size)) { in vhost_scsi_chk_size()
1203 vc->req_size, vc->out_size); in vhost_scsi_chk_size()
1211 vhost_scsi_get_req(struct vhost_virtqueue *vq, struct vhost_scsi_ctx *vc, in vhost_scsi_get_req() argument
1216 if (unlikely(!copy_from_iter_full(vc->req, vc->req_size, in vhost_scsi_get_req()
1217 &vc->out_iter))) { in vhost_scsi_get_req()
1219 } else if (unlikely(*vc->lunp != 1)) { in vhost_scsi_get_req()
1221 vq_err(vq, "Illegal virtio-scsi lun: %u\n", *vc->lunp); in vhost_scsi_get_req()
1225 if (vc->target) { in vhost_scsi_get_req()
1228 tpg = READ_ONCE(vs_tpg[*vc->target]); in vhost_scsi_get_req()
1290 struct vhost_scsi_ctx vc; in vhost_scsi_handle_vq() local
1312 memset(&vc, 0, sizeof(vc)); in vhost_scsi_handle_vq()
1313 vc.rsp_size = sizeof(struct virtio_scsi_cmd_resp); in vhost_scsi_handle_vq()
1321 ret = vhost_scsi_get_desc(vs, vq, &vc, vq_log, &log_num); in vhost_scsi_handle_vq()
1330 vc.req = &v_req_pi; in vhost_scsi_handle_vq()
1331 vc.req_size = sizeof(v_req_pi); in vhost_scsi_handle_vq()
1332 vc.lunp = &v_req_pi.lun[0]; in vhost_scsi_handle_vq()
1333 vc.target = &v_req_pi.lun[1]; in vhost_scsi_handle_vq()
1335 vc.req = &v_req; in vhost_scsi_handle_vq()
1336 vc.req_size = sizeof(v_req); in vhost_scsi_handle_vq()
1337 vc.lunp = &v_req.lun[0]; in vhost_scsi_handle_vq()
1338 vc.target = &v_req.lun[1]; in vhost_scsi_handle_vq()
1346 ret = vhost_scsi_chk_size(vq, &vc); in vhost_scsi_handle_vq()
1350 ret = vhost_scsi_get_req(vq, &vc, &tpg); in vhost_scsi_handle_vq()
1373 if (vc.out_size > vc.req_size) { in vhost_scsi_handle_vq()
1375 exp_data_len = vc.out_size - vc.req_size; in vhost_scsi_handle_vq()
1376 data_iter = vc.out_iter; in vhost_scsi_handle_vq()
1377 } else if (vc.in_size > vc.rsp_size) { in vhost_scsi_handle_vq()
1379 exp_data_len = vc.in_size - vc.rsp_size; in vhost_scsi_handle_vq()
1381 iov_iter_init(&in_iter, ITER_DEST, &vq->iov[vc.out], vc.in, in vhost_scsi_handle_vq()
1382 vc.rsp_size + exp_data_len); in vhost_scsi_handle_vq()
1383 iov_iter_advance(&in_iter, vc.rsp_size); in vhost_scsi_handle_vq()
1463 ret = vhost_scsi_setup_resp_iovs(cmd, &vq->iov[vc.out], vc.in); in vhost_scsi_handle_vq()
1498 cmd->tvc_vq_desc = vc.head; in vhost_scsi_handle_vq()
1514 vhost_scsi_send_bad_target(vs, vq, &vc, TYPE_IO_CMD); in vhost_scsi_handle_vq()
1517 vhost_scsi_send_status(vs, vq, &vc, in vhost_scsi_handle_vq()
1587 struct vhost_scsi_ctx *vc, in vhost_scsi_handle_tmf() argument
1611 tmf->resp_iov = vq->iov[vc->out]; in vhost_scsi_handle_tmf()
1612 tmf->vq_desc = vc->head; in vhost_scsi_handle_tmf()
1613 tmf->in_iovs = vc->in; in vhost_scsi_handle_tmf()
1640 vhost_scsi_send_tmf_resp(vs, vq, vc->in, vc->head, &vq->iov[vc->out], in vhost_scsi_handle_tmf()
1648 struct vhost_scsi_ctx *vc) in vhost_scsi_send_an_resp() argument
1658 iov_iter_init(&iov_iter, ITER_DEST, &vq->iov[vc->out], vc->in, sizeof(rsp)); in vhost_scsi_send_an_resp()
1662 vhost_add_used_and_signal(&vs->dev, vq, vc->head, 0); in vhost_scsi_send_an_resp()
1676 struct vhost_scsi_ctx vc; in vhost_scsi_ctl_handle_vq() local
1690 memset(&vc, 0, sizeof(vc)); in vhost_scsi_ctl_handle_vq()
1698 ret = vhost_scsi_get_desc(vs, vq, &vc, vq_log, &log_num); in vhost_scsi_ctl_handle_vq()
1706 vc.req = &v_req.type; in vhost_scsi_ctl_handle_vq()
1709 if (unlikely(!copy_from_iter_full(vc.req, typ_size, in vhost_scsi_ctl_handle_vq()
1710 &vc.out_iter))) { in vhost_scsi_ctl_handle_vq()
1723 vc.req = &v_req.tmf; in vhost_scsi_ctl_handle_vq()
1724 vc.req_size = sizeof(struct virtio_scsi_ctrl_tmf_req); in vhost_scsi_ctl_handle_vq()
1725 vc.rsp_size = sizeof(struct virtio_scsi_ctrl_tmf_resp); in vhost_scsi_ctl_handle_vq()
1726 vc.lunp = &v_req.tmf.lun[0]; in vhost_scsi_ctl_handle_vq()
1727 vc.target = &v_req.tmf.lun[1]; in vhost_scsi_ctl_handle_vq()
1731 vc.req = &v_req.an; in vhost_scsi_ctl_handle_vq()
1732 vc.req_size = sizeof(struct virtio_scsi_ctrl_an_req); in vhost_scsi_ctl_handle_vq()
1733 vc.rsp_size = sizeof(struct virtio_scsi_ctrl_an_resp); in vhost_scsi_ctl_handle_vq()
1734 vc.lunp = &v_req.an.lun[0]; in vhost_scsi_ctl_handle_vq()
1735 vc.target = NULL; in vhost_scsi_ctl_handle_vq()
1747 ret = vhost_scsi_chk_size(vq, &vc); in vhost_scsi_ctl_handle_vq()
1754 vc.req += typ_size; in vhost_scsi_ctl_handle_vq()
1755 vc.req_size -= typ_size; in vhost_scsi_ctl_handle_vq()
1757 ret = vhost_scsi_get_req(vq, &vc, &tpg); in vhost_scsi_ctl_handle_vq()
1762 vhost_scsi_handle_tmf(vs, tpg, vq, &v_req.tmf, &vc, in vhost_scsi_ctl_handle_vq()
1765 vhost_scsi_send_an_resp(vs, vq, &vc); in vhost_scsi_ctl_handle_vq()
1778 vhost_scsi_send_bad_target(vs, vq, &vc, in vhost_scsi_ctl_handle_vq()