Lines Matching refs:vc
1079 struct vhost_scsi_ctx *vc, u8 status) in vhost_scsi_send_status() argument
1088 iov_iter_init(&iov_iter, ITER_DEST, &vq->iov[vc->out], vc->in, in vhost_scsi_send_status()
1094 vhost_add_used_and_signal(&vs->dev, vq, vc->head, 0); in vhost_scsi_send_status()
1106 struct vhost_scsi_ctx *vc, int type) in vhost_scsi_send_bad_target() argument
1130 iov_iter_init(&iov_iter, ITER_DEST, &vq->iov[vc->out], vc->in, in vhost_scsi_send_bad_target()
1136 vhost_add_used_and_signal(&vs->dev, vq, vc->head, 0); in vhost_scsi_send_bad_target()
1143 struct vhost_scsi_ctx *vc, in vhost_scsi_get_desc() argument
1151 vc->head = vhost_get_vq_desc(vq, vq->iov, in vhost_scsi_get_desc()
1152 ARRAY_SIZE(vq->iov), &vc->out, &vc->in, in vhost_scsi_get_desc()
1156 vc->head, vc->out, vc->in); in vhost_scsi_get_desc()
1159 if (unlikely(vc->head < 0)) in vhost_scsi_get_desc()
1163 if (vc->head == vq->num) { in vhost_scsi_get_desc()
1175 vc->out_size = iov_length(vq->iov, vc->out); in vhost_scsi_get_desc()
1176 vc->in_size = iov_length(&vq->iov[vc->out], vc->in); in vhost_scsi_get_desc()
1188 iov_iter_init(&vc->out_iter, ITER_SOURCE, vq->iov, vc->out, vc->out_size); in vhost_scsi_get_desc()
1196 vhost_scsi_chk_size(struct vhost_virtqueue *vq, struct vhost_scsi_ctx *vc) in vhost_scsi_chk_size() argument
1198 if (unlikely(vc->in_size < vc->rsp_size)) { in vhost_scsi_chk_size()
1201 vc->rsp_size, vc->in_size); in vhost_scsi_chk_size()
1203 } else if (unlikely(vc->out_size < vc->req_size)) { in vhost_scsi_chk_size()
1206 vc->req_size, vc->out_size); in vhost_scsi_chk_size()
1214 vhost_scsi_get_req(struct vhost_virtqueue *vq, struct vhost_scsi_ctx *vc, in vhost_scsi_get_req() argument
1219 if (unlikely(!copy_from_iter_full(vc->req, vc->req_size, in vhost_scsi_get_req()
1220 &vc->out_iter))) { in vhost_scsi_get_req()
1222 } else if (unlikely(*vc->lunp != 1)) { in vhost_scsi_get_req()
1224 vq_err(vq, "Illegal virtio-scsi lun: %u\n", *vc->lunp); in vhost_scsi_get_req()
1228 if (vc->target) { in vhost_scsi_get_req()
1231 tpg = READ_ONCE(vs_tpg[*vc->target]); in vhost_scsi_get_req()
1293 struct vhost_scsi_ctx vc; in vhost_scsi_handle_vq() local
1315 memset(&vc, 0, sizeof(vc)); in vhost_scsi_handle_vq()
1316 vc.rsp_size = sizeof(struct virtio_scsi_cmd_resp); in vhost_scsi_handle_vq()
1324 ret = vhost_scsi_get_desc(vs, vq, &vc, vq_log, &log_num); in vhost_scsi_handle_vq()
1333 vc.req = &v_req_pi; in vhost_scsi_handle_vq()
1334 vc.req_size = sizeof(v_req_pi); in vhost_scsi_handle_vq()
1335 vc.lunp = &v_req_pi.lun[0]; in vhost_scsi_handle_vq()
1336 vc.target = &v_req_pi.lun[1]; in vhost_scsi_handle_vq()
1338 vc.req = &v_req; in vhost_scsi_handle_vq()
1339 vc.req_size = sizeof(v_req); in vhost_scsi_handle_vq()
1340 vc.lunp = &v_req.lun[0]; in vhost_scsi_handle_vq()
1341 vc.target = &v_req.lun[1]; in vhost_scsi_handle_vq()
1349 ret = vhost_scsi_chk_size(vq, &vc); in vhost_scsi_handle_vq()
1353 ret = vhost_scsi_get_req(vq, &vc, &tpg); in vhost_scsi_handle_vq()
1376 if (vc.out_size > vc.req_size) { in vhost_scsi_handle_vq()
1378 exp_data_len = vc.out_size - vc.req_size; in vhost_scsi_handle_vq()
1379 data_iter = vc.out_iter; in vhost_scsi_handle_vq()
1380 } else if (vc.in_size > vc.rsp_size) { in vhost_scsi_handle_vq()
1382 exp_data_len = vc.in_size - vc.rsp_size; in vhost_scsi_handle_vq()
1384 iov_iter_init(&in_iter, ITER_DEST, &vq->iov[vc.out], vc.in, in vhost_scsi_handle_vq()
1385 vc.rsp_size + exp_data_len); in vhost_scsi_handle_vq()
1386 iov_iter_advance(&in_iter, vc.rsp_size); in vhost_scsi_handle_vq()
1466 ret = vhost_scsi_setup_resp_iovs(cmd, &vq->iov[vc.out], vc.in); in vhost_scsi_handle_vq()
1501 cmd->tvc_vq_desc = vc.head; in vhost_scsi_handle_vq()
1517 vhost_scsi_send_bad_target(vs, vq, &vc, TYPE_IO_CMD); in vhost_scsi_handle_vq()
1520 vhost_scsi_send_status(vs, vq, &vc, in vhost_scsi_handle_vq()
1590 struct vhost_scsi_ctx *vc, in vhost_scsi_handle_tmf() argument
1614 tmf->resp_iov = vq->iov[vc->out]; in vhost_scsi_handle_tmf()
1615 tmf->vq_desc = vc->head; in vhost_scsi_handle_tmf()
1616 tmf->in_iovs = vc->in; in vhost_scsi_handle_tmf()
1643 vhost_scsi_send_tmf_resp(vs, vq, vc->in, vc->head, &vq->iov[vc->out], in vhost_scsi_handle_tmf()
1651 struct vhost_scsi_ctx *vc) in vhost_scsi_send_an_resp() argument
1661 iov_iter_init(&iov_iter, ITER_DEST, &vq->iov[vc->out], vc->in, sizeof(rsp)); in vhost_scsi_send_an_resp()
1665 vhost_add_used_and_signal(&vs->dev, vq, vc->head, 0); in vhost_scsi_send_an_resp()
1679 struct vhost_scsi_ctx vc; in vhost_scsi_ctl_handle_vq() local
1693 memset(&vc, 0, sizeof(vc)); in vhost_scsi_ctl_handle_vq()
1701 ret = vhost_scsi_get_desc(vs, vq, &vc, vq_log, &log_num); in vhost_scsi_ctl_handle_vq()
1709 vc.req = &v_req.type; in vhost_scsi_ctl_handle_vq()
1712 if (unlikely(!copy_from_iter_full(vc.req, typ_size, in vhost_scsi_ctl_handle_vq()
1713 &vc.out_iter))) { in vhost_scsi_ctl_handle_vq()
1726 vc.req = &v_req.tmf; in vhost_scsi_ctl_handle_vq()
1727 vc.req_size = sizeof(struct virtio_scsi_ctrl_tmf_req); in vhost_scsi_ctl_handle_vq()
1728 vc.rsp_size = sizeof(struct virtio_scsi_ctrl_tmf_resp); in vhost_scsi_ctl_handle_vq()
1729 vc.lunp = &v_req.tmf.lun[0]; in vhost_scsi_ctl_handle_vq()
1730 vc.target = &v_req.tmf.lun[1]; in vhost_scsi_ctl_handle_vq()
1734 vc.req = &v_req.an; in vhost_scsi_ctl_handle_vq()
1735 vc.req_size = sizeof(struct virtio_scsi_ctrl_an_req); in vhost_scsi_ctl_handle_vq()
1736 vc.rsp_size = sizeof(struct virtio_scsi_ctrl_an_resp); in vhost_scsi_ctl_handle_vq()
1737 vc.lunp = &v_req.an.lun[0]; in vhost_scsi_ctl_handle_vq()
1738 vc.target = NULL; in vhost_scsi_ctl_handle_vq()
1750 ret = vhost_scsi_chk_size(vq, &vc); in vhost_scsi_ctl_handle_vq()
1757 vc.req += typ_size; in vhost_scsi_ctl_handle_vq()
1758 vc.req_size -= typ_size; in vhost_scsi_ctl_handle_vq()
1760 ret = vhost_scsi_get_req(vq, &vc, &tpg); in vhost_scsi_ctl_handle_vq()
1765 vhost_scsi_handle_tmf(vs, tpg, vq, &v_req.tmf, &vc, in vhost_scsi_ctl_handle_vq()
1768 vhost_scsi_send_an_resp(vs, vq, &vc); in vhost_scsi_ctl_handle_vq()
1781 vhost_scsi_send_bad_target(vs, vq, &vc, in vhost_scsi_ctl_handle_vq()