Skip to content

Commit

Permalink
tests: fix virtio-blk-test ISR dependence
Browse files Browse the repository at this point in the history
Use the new used ring APIs instead of assuming ISR being set means the
request has completed.

Signed-off-by: Stefan Hajnoczi <[email protected]>
Reviewed-by: Michael S. Tsirkin <[email protected]>
Reviewed-by: Fam Zheng <[email protected]>
Tested-by: Eric Blake <[email protected]>
Tested-by: Kevin Wolf <[email protected]>
Message-id: [email protected]
Signed-off-by: Stefan Hajnoczi <[email protected]>
  • Loading branch information
stefanhaRH committed Jun 30, 2017
1 parent 29509a7 commit 12dfbdc
Showing 1 changed file with 17 additions and 10 deletions.
27 changes: 17 additions & 10 deletions tests/virtio-blk-test.c
Original file line number Diff line number Diff line change
Expand Up @@ -196,7 +196,7 @@ static void test_basic(QVirtioDevice *dev, QGuestAllocator *alloc,

qvirtqueue_kick(dev, vq, free_head);

qvirtio_wait_queue_isr(dev, vq, QVIRTIO_BLK_TIMEOUT_US);
qvirtio_wait_used_elem(dev, vq, free_head, QVIRTIO_BLK_TIMEOUT_US);
status = readb(req_addr + 528);
g_assert_cmpint(status, ==, 0);

Expand All @@ -218,7 +218,7 @@ static void test_basic(QVirtioDevice *dev, QGuestAllocator *alloc,

qvirtqueue_kick(dev, vq, free_head);

qvirtio_wait_queue_isr(dev, vq, QVIRTIO_BLK_TIMEOUT_US);
qvirtio_wait_used_elem(dev, vq, free_head, QVIRTIO_BLK_TIMEOUT_US);
status = readb(req_addr + 528);
g_assert_cmpint(status, ==, 0);

Expand Down Expand Up @@ -246,7 +246,7 @@ static void test_basic(QVirtioDevice *dev, QGuestAllocator *alloc,
qvirtqueue_add(vq, req_addr + 528, 1, true, false);
qvirtqueue_kick(dev, vq, free_head);

qvirtio_wait_queue_isr(dev, vq, QVIRTIO_BLK_TIMEOUT_US);
qvirtio_wait_used_elem(dev, vq, free_head, QVIRTIO_BLK_TIMEOUT_US);
status = readb(req_addr + 528);
g_assert_cmpint(status, ==, 0);

Expand All @@ -267,7 +267,7 @@ static void test_basic(QVirtioDevice *dev, QGuestAllocator *alloc,

qvirtqueue_kick(dev, vq, free_head);

qvirtio_wait_queue_isr(dev, vq, QVIRTIO_BLK_TIMEOUT_US);
qvirtio_wait_used_elem(dev, vq, free_head, QVIRTIO_BLK_TIMEOUT_US);
status = readb(req_addr + 528);
g_assert_cmpint(status, ==, 0);

Expand Down Expand Up @@ -348,7 +348,7 @@ static void pci_indirect(void)
free_head = qvirtqueue_add_indirect(&vqpci->vq, indirect);
qvirtqueue_kick(&dev->vdev, &vqpci->vq, free_head);

qvirtio_wait_queue_isr(&dev->vdev, &vqpci->vq,
qvirtio_wait_used_elem(&dev->vdev, &vqpci->vq, free_head,
QVIRTIO_BLK_TIMEOUT_US);
status = readb(req_addr + 528);
g_assert_cmpint(status, ==, 0);
Expand All @@ -373,7 +373,7 @@ static void pci_indirect(void)
free_head = qvirtqueue_add_indirect(&vqpci->vq, indirect);
qvirtqueue_kick(&dev->vdev, &vqpci->vq, free_head);

qvirtio_wait_queue_isr(&dev->vdev, &vqpci->vq,
qvirtio_wait_used_elem(&dev->vdev, &vqpci->vq, free_head,
QVIRTIO_BLK_TIMEOUT_US);
status = readb(req_addr + 528);
g_assert_cmpint(status, ==, 0);
Expand Down Expand Up @@ -484,7 +484,7 @@ static void pci_msix(void)
qvirtqueue_add(&vqpci->vq, req_addr + 528, 1, true, false);
qvirtqueue_kick(&dev->vdev, &vqpci->vq, free_head);

qvirtio_wait_queue_isr(&dev->vdev, &vqpci->vq,
qvirtio_wait_used_elem(&dev->vdev, &vqpci->vq, free_head,
QVIRTIO_BLK_TIMEOUT_US);

status = readb(req_addr + 528);
Expand All @@ -509,7 +509,7 @@ static void pci_msix(void)
qvirtqueue_kick(&dev->vdev, &vqpci->vq, free_head);


qvirtio_wait_queue_isr(&dev->vdev, &vqpci->vq,
qvirtio_wait_used_elem(&dev->vdev, &vqpci->vq, free_head,
QVIRTIO_BLK_TIMEOUT_US);

status = readb(req_addr + 528);
Expand Down Expand Up @@ -540,6 +540,8 @@ static void pci_idx(void)
uint64_t capacity;
uint32_t features;
uint32_t free_head;
uint32_t write_head;
uint32_t desc_idx;
uint8_t status;
char *data;

Expand Down Expand Up @@ -581,7 +583,8 @@ static void pci_idx(void)
qvirtqueue_add(&vqpci->vq, req_addr + 528, 1, true, false);
qvirtqueue_kick(&dev->vdev, &vqpci->vq, free_head);

qvirtio_wait_queue_isr(&dev->vdev, &vqpci->vq, QVIRTIO_BLK_TIMEOUT_US);
qvirtio_wait_used_elem(&dev->vdev, &vqpci->vq, free_head,
QVIRTIO_BLK_TIMEOUT_US);

/* Write request */
req.type = VIRTIO_BLK_T_OUT;
Expand All @@ -600,6 +603,7 @@ static void pci_idx(void)
qvirtqueue_add(&vqpci->vq, req_addr + 16, 512, false, true);
qvirtqueue_add(&vqpci->vq, req_addr + 528, 1, true, false);
qvirtqueue_kick(&dev->vdev, &vqpci->vq, free_head);
write_head = free_head;

/* No notification expected */
status = qvirtio_wait_status_byte_no_isr(&dev->vdev,
Expand All @@ -625,8 +629,11 @@ static void pci_idx(void)

qvirtqueue_kick(&dev->vdev, &vqpci->vq, free_head);

qvirtio_wait_queue_isr(&dev->vdev, &vqpci->vq,
/* We get just one notification for both requests */
qvirtio_wait_used_elem(&dev->vdev, &vqpci->vq, write_head,
QVIRTIO_BLK_TIMEOUT_US);
g_assert(qvirtqueue_get_buf(&vqpci->vq, &desc_idx));
g_assert_cmpint(desc_idx, ==, free_head);

status = readb(req_addr + 528);
g_assert_cmpint(status, ==, 0);
Expand Down

0 comments on commit 12dfbdc

Please sign in to comment.