Lines Matching refs:vq

43 	struct spdk_vhost_virtqueue *vq;
155 if (task->vq->packed.packed_ring) {
156 vhost_vq_packed_ring_enqueue(&task->bvsession->vsession, task->vq,
161 vhost_vq_used_ring_enqueue(&task->bvsession->vsession, task->vq,
200 struct spdk_vhost_virtqueue *vq,
211 rc = vhost_vq_get_desc(vsession, vq, req_idx, &desc, &desc_table, &desc_table_size);
273 struct spdk_vhost_virtqueue *vq, uint16_t req_idx,
282 desc = &vq->vring.desc_packed[req_idx];
309 vhost_vring_packed_desc_get_next(&desc, &req_idx, vq, desc_table, desc_table_size);
332 struct spdk_vhost_virtqueue *vq, uint16_t req_idx,
341 rc = vhost_vq_get_desc_packed(vsession, vq, req_idx, &desc,
348 return blk_iovs_packed_desc_setup(vsession, vq, req_idx, desc_table, desc_table_size,
354 struct spdk_vhost_virtqueue *vq, uint16_t req_idx,
365 rc = vhost_inflight_queue_get_desc(vsession, vq->vring_inflight.inflight_packed->desc,
373 return blk_iovs_packed_desc_setup(vsession, vq, req_idx, desc_table, desc_table_size,
402 inflight_desc = &vq->vring_inflight.inflight_packed->desc[inflight_desc->next];
652 process_blk_task(struct spdk_vhost_virtqueue *vq, uint16_t req_idx)
658 assert(vq->packed.packed_ring == false);
660 task = &((struct spdk_vhost_user_blk_task *)vq->tasks)[req_idx];
674 rc = blk_iovs_split_queue_setup(task->bvsession, vq, task->req_idx,
693 process_packed_blk_task(struct spdk_vhost_virtqueue *vq, uint16_t req_idx)
700 assert(vq->packed.packed_ring);
703 * In kernel driver, it uses the vq->free_head to set the buffer_id so the value
715 task_idx = vhost_vring_packed_desc_get_buffer_id(vq, req_idx, &num_descs);
717 task = &((struct spdk_vhost_user_blk_task *)vq->tasks)[task_idx];
731 rte_vhost_set_inflight_desc_packed(task->bvsession->vsession.vid, vq->vring_idx,
732 req_idx, (req_idx + num_descs - 1) % vq->vring.size,
739 rc = blk_iovs_packed_queue_setup(task->bvsession, vq, task->req_idx, blk_task->iovs,
758 process_packed_inflight_blk_task(struct spdk_vhost_virtqueue *vq,
761 spdk_vhost_inflight_desc *desc_array = vq->vring_inflight.inflight_packed->desc;
774 vq->last_avail_idx += num_descs;
775 if (vq->last_avail_idx >= vq->vring.size) {
776 vq->last_avail_idx -= vq->vring.size;
777 vq->packed.avail_phase = !vq->packed.avail_phase;
780 task = &((struct spdk_vhost_user_blk_task *)vq->tasks)[task_idx];
800 rc = blk_iovs_inflight_queue_setup(task->bvsession, vq, task->req_idx, blk_task->iovs,
820 struct spdk_vhost_virtqueue *vq)
828 resubmit = vq->vring_inflight.resubmit_inflight;
842 if (spdk_unlikely(req_idx >= vq->vring.size)) {
844 vsession->name, req_idx, vq->vring.size);
845 vhost_vq_used_ring_enqueue(vsession, vq, req_idx, 0);
849 if (vq->packed.packed_ring) {
850 process_packed_inflight_blk_task(vq, req_idx);
852 process_blk_task(vq, req_idx);
861 process_vq(struct spdk_vhost_blk_session *bvsession, struct spdk_vhost_virtqueue *vq)
868 resubmit_cnt = submit_inflight_desc(bvsession, vq);
870 reqs_cnt = vhost_vq_avail_ring_get(vq, reqs, SPDK_COUNTOF(reqs));
879 if (spdk_unlikely(reqs[i] >= vq->vring.size)) {
881 vsession->name, reqs[i], vq->vring.size);
882 vhost_vq_used_ring_enqueue(vsession, vq, reqs[i], 0);
886 rte_vhost_set_inflight_desc_split(vsession->vid, vq->vring_idx, reqs[i]);
888 process_blk_task(vq, reqs[i]);
895 process_packed_vq(struct spdk_vhost_blk_session *bvsession, struct spdk_vhost_virtqueue *vq)
901 resubmit_cnt = submit_inflight_desc(bvsession, vq);
904 vhost_vq_packed_ring_is_avail(vq)) {
906 vq->last_avail_idx);
908 process_packed_blk_task(vq, vq->last_avail_idx);
915 _vdev_vq_worker(struct spdk_vhost_virtqueue *vq)
917 struct spdk_vhost_session *vsession = vq->vsession;
922 packed_ring = vq->packed.packed_ring;
924 rc = process_packed_vq(bvsession, vq);
926 rc = process_vq(bvsession, vq);
929 vhost_session_vq_used_signal(vq);
938 struct spdk_vhost_virtqueue *vq = arg;
940 return _vdev_vq_worker(vq);
959 no_bdev_process_vq(struct spdk_vhost_blk_session *bvsession, struct spdk_vhost_virtqueue *vq)
966 if (vhost_vq_avail_ring_get(vq, &req_idx, 1) != 1) {
971 if (blk_iovs_split_queue_setup(bvsession, vq, req_idx, iovs, &iovcnt, &length) == 0) {
976 vhost_vq_used_ring_enqueue(vsession, vq, req_idx, 0);
980 no_bdev_process_packed_vq(struct spdk_vhost_blk_session *bvsession, struct spdk_vhost_virtqueue *vq)
986 uint16_t req_idx = vq->last_avail_idx;
989 if (!vhost_vq_packed_ring_is_avail(vq)) {
993 task_idx = vhost_vring_packed_desc_get_buffer_id(vq, req_idx, &num_descs);
994 task = &((struct spdk_vhost_user_blk_task *)vq->tasks)[task_idx];
999 vhost_vq_packed_ring_enqueue(vsession, vq, num_descs,
1010 if (blk_iovs_packed_queue_setup(bvsession, vq, task->req_idx, blk_task->iovs, &blk_task->iovcnt,
1017 vhost_vq_packed_ring_enqueue(vsession, vq, num_descs,
1023 _no_bdev_vdev_vq_worker(struct spdk_vhost_virtqueue *vq)
1025 struct spdk_vhost_session *vsession = vq->vsession;
1029 packed_ring = vq->packed.packed_ring;
1031 no_bdev_process_packed_vq(bvsession, vq);
1033 no_bdev_process_vq(bvsession, vq);
1036 vhost_session_vq_used_signal(vq);
1049 struct spdk_vhost_virtqueue *vq = arg;
1051 return _no_bdev_vdev_vq_worker(vq);
1072 struct spdk_vhost_virtqueue *vq;
1077 vq = &vsession->virtqueue[i];
1078 if (vq->intr == NULL) {
1082 SPDK_DEBUGLOG(vhost_blk, "unregister vq[%d]'s kickfd is %d\n",
1083 i, vq->vring.kickfd);
1084 spdk_interrupt_unregister(&vq->intr);
1091 struct spdk_vhost_virtqueue *vq = arg;
1092 struct spdk_vhost_session *vsession = vq->vsession;
1098 vq->intr = spdk_interrupt_register(vq->vring.kickfd, vdev_vq_worker, vq, "vdev_vq_worker");
1100 vq->intr = spdk_interrupt_register(vq->vring.kickfd, no_bdev_vdev_vq_worker, vq,
1104 if (vq->intr == NULL) {
1111 vhost_blk_vq_enable(struct spdk_vhost_session *vsession, struct spdk_vhost_virtqueue *vq)
1114 spdk_thread_send_msg(vsession->vdev->thread, _vhost_blk_vq_register_interrupt, vq);
1124 struct spdk_vhost_virtqueue *vq = NULL;
1129 vq = &vsession->virtqueue[i];
1130 SPDK_DEBUGLOG(vhost_blk, "Register vq[%d]'s kickfd is %d\n",
1131 i, vq->vring.kickfd);
1132 vq->intr = spdk_interrupt_register(vq->vring.kickfd, no_bdev_vdev_vq_worker, vq,
1134 if (vq->intr == NULL) {
1276 struct spdk_vhost_virtqueue *vq;
1280 vq = &vsession->virtqueue[i];
1281 if (vq->tasks == NULL) {
1285 spdk_free(vq->tasks);
1286 vq->tasks = NULL;
1294 struct spdk_vhost_virtqueue *vq;
1303 vq = &vsession->virtqueue[qid];
1304 if (vq->vring.desc == NULL) {
1308 task_cnt = vq->vring.size;
1315 vq->tasks = spdk_zmalloc(sizeof(struct spdk_vhost_user_blk_task) * task_cnt,
1318 if (vq->tasks == NULL) {
1325 task = &((struct spdk_vhost_user_blk_task *)vq->tasks)[j];
1328 task->vq = vq;