Lines Matching defs:virtqueue

66 vhost_log_req_desc(struct spdk_vhost_session *vsession, struct spdk_vhost_virtqueue *virtqueue,
77 rc = vhost_vq_get_desc(vsession, virtqueue, req_id, &desc, &desc_table, &desc_table_size);
97 struct spdk_vhost_virtqueue *virtqueue,
106 if (spdk_unlikely(virtqueue->packed.packed_ring)) {
111 len = sizeof(virtqueue->vring.used->ring[idx]);
114 rte_vhost_log_used_vring(vsession->vid, virtqueue->vring_idx, offset, len);
119 struct spdk_vhost_virtqueue *virtqueue)
129 len = sizeof(virtqueue->vring.used->idx);
130 vq_idx = virtqueue - vsession->virtqueue;
139 vhost_vq_avail_ring_get(struct spdk_vhost_virtqueue *virtqueue, uint16_t *reqs,
142 struct rte_vhost_vring *vring = &virtqueue->vring;
145 uint16_t last_idx = virtqueue->last_avail_idx, avail_idx = avail->idx;
152 if (virtqueue->vsession && spdk_unlikely(spdk_interrupt_mode_is_enabled())) {
175 virtqueue->last_avail_idx += count;
177 if (virtqueue->vsession && spdk_unlikely(spdk_interrupt_mode_is_enabled())) {
178 /* If avail_idx is larger than virtqueue's last_avail_idx, then there is unprocessed reqs.
182 if (avail_idx > virtqueue->last_avail_idx) {
222 vhost_vq_get_desc(struct spdk_vhost_session *vsession, struct spdk_vhost_virtqueue *virtqueue,
226 if (spdk_unlikely(req_idx >= virtqueue->vring.size)) {
230 *desc = &virtqueue->vring.desc[req_idx];
244 *desc_table = virtqueue->vring.desc;
245 *desc_table_size = virtqueue->vring.size;
268 struct spdk_vhost_virtqueue *virtqueue,
272 *desc = &virtqueue->vring.desc_packed[req_idx];
324 struct spdk_vhost_virtqueue *virtqueue)
326 if (virtqueue->used_req_cnt == 0) {
332 virtqueue - vsession->virtqueue, virtqueue->last_used_idx);
335 if (rte_vhost_vring_call(vsession->vid, virtqueue->vring_idx) == 0) {
337 if (rte_vhost_vring_call_nonblock(vsession->vid, virtqueue->vring_idx) == 0) {
340 virtqueue->req_cnt += virtqueue->used_req_cnt;
341 virtqueue->used_req_cnt = 0;
351 struct spdk_vhost_virtqueue *virtqueue, uint64_t now)
358 req_cnt = virtqueue->req_cnt + virtqueue->used_req_cnt;
364 virtqueue->irq_delay_time = (uint32_t) spdk_max(0, irq_delay);
366 virtqueue->req_cnt = 0;
367 virtqueue->next_event_time = now;
372 struct spdk_vhost_virtqueue *virtqueue, uint64_t now)
379 session_vq_io_stats_update(vsession, virtqueue, now);
401 vhost_session_vq_used_signal(struct spdk_vhost_virtqueue *virtqueue)
403 struct spdk_vhost_session *vsession = virtqueue->vsession;
407 if (virtqueue->vring.desc == NULL) {
411 if (vhost_vq_event_is_suppressed(virtqueue)) {
415 vhost_vq_used_signal(vsession, virtqueue);
418 check_session_vq_io_stats(vsession, virtqueue, now);
421 if (now < virtqueue->next_event_time) {
425 if (vhost_vq_event_is_suppressed(virtqueue)) {
429 if (!vhost_vq_used_signal(vsession, virtqueue)) {
435 virtqueue->next_event_time = now + virtqueue->irq_delay_time;
444 struct spdk_vhost_virtqueue *virtqueue,
447 struct rte_vhost_vring *vring = &virtqueue->vring;
449 uint16_t last_idx = virtqueue->last_used_idx & (vring->size - 1);
450 uint16_t vq_idx = virtqueue->vring_idx;
454 virtqueue - vsession->virtqueue, virtqueue->last_used_idx, id, len);
456 vhost_log_req_desc(vsession, virtqueue, id);
458 virtqueue->last_used_idx++;
467 vhost_log_used_vring_elem(vsession, virtqueue, last_idx);
468 * (volatile uint16_t *) &used->idx = virtqueue->last_used_idx;
469 vhost_log_used_vring_idx(vsession, virtqueue);
471 rte_vhost_clr_inflight_desc_split(vsession->vid, vq_idx, virtqueue->last_used_idx, id);
473 virtqueue->used_req_cnt++;
476 if (virtqueue->vring.desc == NULL || vhost_vq_event_is_suppressed(virtqueue)) {
480 vhost_vq_used_signal(vsession, virtqueue);
486 struct spdk_vhost_virtqueue *virtqueue,
490 struct vring_packed_desc *desc = &virtqueue->vring.desc_packed[virtqueue->last_used_idx];
495 virtqueue - vsession->virtqueue, buffer_id);
503 if (spdk_unlikely(used == virtqueue->packed.used_phase && used == avail)) {
530 rte_vhost_set_last_inflight_io_packed(vsession->vid, virtqueue->vring_idx, inflight_head);
535 if (virtqueue->packed.used_phase) {
540 rte_vhost_clr_inflight_desc_packed(vsession->vid, virtqueue->vring_idx, inflight_head);
542 vhost_log_used_vring_elem(vsession, virtqueue, virtqueue->last_used_idx);
543 virtqueue->last_used_idx += num_descs;
544 if (virtqueue->last_used_idx >= virtqueue->vring.size) {
545 virtqueue->last_used_idx -= virtqueue->vring.size;
546 virtqueue->packed.used_phase = !virtqueue->packed.used_phase;
549 virtqueue->used_req_cnt++;
553 vhost_vq_packed_ring_is_avail(struct spdk_vhost_virtqueue *virtqueue)
555 uint16_t flags = virtqueue->vring.desc_packed[virtqueue->last_avail_idx].flags;
561 return (!!(flags & VRING_DESC_F_AVAIL) == virtqueue->packed.avail_phase);
854 q = &vsession->virtqueue[i];
998 q = &vsession->virtqueue[qid];
1041 q = &vsession->virtqueue[qid];
1421 struct spdk_vhost_virtqueue *q = &vsession->virtqueue[i];