Lines Matching refs:vq

468 	struct spdk_vhost_virtqueue vq = {};
474 vq.vring.avail = (struct vring_avail *)avail_mem;
475 vq.vring.size = 32;
476 vq.last_avail_idx = 24;
477 vq.vring.avail->idx = 29;
481 vq.vring.avail->ring[i] = i;
484 ret = vhost_vq_avail_ring_get(&vq, reqs, reqs_len);
486 CU_ASSERT(vq.last_avail_idx == 29);
488 CU_ASSERT(reqs[i] == vq.vring.avail->ring[i + 24]);
492 vq.last_avail_idx = 20;
493 vq.vring.avail->idx = 29;
496 ret = vhost_vq_avail_ring_get(&vq, reqs, reqs_len);
498 CU_ASSERT(vq.last_avail_idx == 26);
500 CU_ASSERT(reqs[i] == vq.vring.avail->ring[i + 20]);
504 vq.last_avail_idx = 20;
505 vq.vring.avail->idx = 156;
508 ret = vhost_vq_avail_ring_get(&vq, reqs, reqs_len);
512 vq.last_avail_idx = 65535;
513 vq.vring.avail->idx = 4;
515 ret = vhost_vq_avail_ring_get(&vq, reqs, reqs_len);
517 CU_ASSERT(vq.last_avail_idx == 4);
518 CU_ASSERT(reqs[0] == vq.vring.avail->ring[31]);
520 CU_ASSERT(reqs[i] == vq.vring.avail->ring[i - 1]);
525 vq_desc_guest_is_used(struct spdk_vhost_virtqueue *vq, int16_t guest_last_used_idx,
528 return (!!(vq->vring.desc_packed[guest_last_used_idx].flags & VRING_DESC_F_USED) ==
533 vq_desc_guest_set_avail(struct spdk_vhost_virtqueue *vq, int16_t *guest_last_avail_idx,
537 vq->vring.desc_packed[*guest_last_avail_idx].flags |= VRING_DESC_F_AVAIL;
538 vq->vring.desc_packed[*guest_last_avail_idx].flags &= ~VRING_DESC_F_USED;
540 vq->vring.desc_packed[*guest_last_avail_idx].flags &= ~VRING_DESC_F_AVAIL;
541 vq->vring.desc_packed[*guest_last_avail_idx].flags |= VRING_DESC_F_USED;
544 if (++(*guest_last_avail_idx) >= vq->vring.size) {
545 *guest_last_avail_idx -= vq->vring.size;
551 vq_desc_guest_handle_completed_desc(struct spdk_vhost_virtqueue *vq, int16_t *guest_last_used_idx,
556 if (vq_desc_guest_is_used(vq, *guest_last_used_idx, *guest_used_phase)) {
557 buffer_id = vq->vring.desc_packed[*guest_last_used_idx].id;
558 if (++(*guest_last_used_idx) >= vq->vring.size) {
559 *guest_last_used_idx -= vq->vring.size;
574 struct spdk_vhost_virtqueue *vq;
587 rc = posix_memalign((void **)&vq, SPDK_CACHE_LINE_SIZE, sizeof(*vq));
590 memset(vq, 0, sizeof(*vq));
592 vq->vring.desc_packed = descs;
593 vq->vring.size = 4;
596 vq->packed.avail_phase = 1;
597 vq->packed.used_phase = 1;
598 vq->packed.packed_ring = true;
601 CU_ASSERT(vhost_vq_packed_ring_is_avail(vq) == false);
604 for (i = 0; i < vq->vring.size; i++) {
607 vq_desc_guest_set_avail(vq, &guest_last_avail_idx, &guest_avail_phase);
613 CU_ASSERT(vhost_vq_packed_ring_is_avail(vq) == true);
615 while (vhost_vq_packed_ring_is_avail(vq)) {
616 CU_ASSERT(vhost_vring_packed_desc_get_buffer_id(vq, vq->last_avail_idx, &chain_num) == i++);
621 vhost_vq_packed_ring_enqueue(vs, vq, 1, 1, 1, 0);
622 vhost_vq_packed_ring_enqueue(vs, vq, 1, 0, 1, 0);
623 vhost_vq_packed_ring_enqueue(vs, vq, 1, 2, 1, 0);
626 CU_ASSERT(vq->last_avail_idx == 0);
627 CU_ASSERT(vq->packed.avail_phase == 0);
628 CU_ASSERT(vq->last_used_idx == 3);
629 CU_ASSERT(vq->packed.used_phase == 1);
632 CU_ASSERT(vq_desc_guest_handle_completed_desc(vq, &guest_last_used_idx, &guest_used_phase) == 1);
633 CU_ASSERT(vq_desc_guest_handle_completed_desc(vq, &guest_last_used_idx, &guest_used_phase) == 0);
634 CU_ASSERT(vq_desc_guest_handle_completed_desc(vq, &guest_last_used_idx, &guest_used_phase) == 2);
642 vq_desc_guest_set_avail(vq, &guest_last_avail_idx, &guest_avail_phase);
646 CU_ASSERT(vhost_vq_packed_ring_is_avail(vq) == true);
648 while (vhost_vq_packed_ring_is_avail(vq)) {
649 CU_ASSERT(vhost_vring_packed_desc_get_buffer_id(vq, vq->last_avail_idx, &chain_num) == i--);
654 CU_ASSERT(vq->last_avail_idx == 3);
656 CU_ASSERT(vq->packed.avail_phase == 0);
659 vhost_vq_packed_ring_enqueue(vs, vq, 1, 1, 1, 0);
660 vhost_vq_packed_ring_enqueue(vs, vq, 1, 0, 1, 0);
661 vhost_vq_packed_ring_enqueue(vs, vq, 1, 3, 1, 0);
662 vhost_vq_packed_ring_enqueue(vs, vq, 1, 2, 1, 0);
664 CU_ASSERT(vq->last_used_idx == vq->last_avail_idx);
665 CU_ASSERT(vq->packed.used_phase == vq->packed.avail_phase);
668 CU_ASSERT(vq_desc_guest_handle_completed_desc(vq, &guest_last_used_idx, &guest_used_phase) == 1);
669 CU_ASSERT(vq_desc_guest_handle_completed_desc(vq, &guest_last_used_idx, &guest_used_phase) == 0);
670 CU_ASSERT(vq_desc_guest_handle_completed_desc(vq, &guest_last_used_idx, &guest_used_phase) == 3);
671 CU_ASSERT(vq_desc_guest_handle_completed_desc(vq, &guest_last_used_idx, &guest_used_phase) == 2);
675 free(vq);