Commit 9b7d2d8b authored by Marc Marí's avatar Marc Marí Committed by Kevin Wolf
Browse files

tests: Check QVIRTIO_F_ANY_LAYOUT flag in virtio-blk test



Check the QVIRTIO_F_ANY_LAYOUT flag before performing operations with 2
descriptor layout. This is to follow the specification strictly.

This patch depends on:
[PATCH v5 0/5] libqos: Virtio MMIO driver

Signed-off-by: default avatarMarc Marí <marc.mari.barcelo@gmail.com>
Message-id: 1424815154-27243-1-git-send-email-marc.mari.barcelo@gmail.com
Signed-off-by: default avatarStefan Hajnoczi <stefanha@redhat.com>
Signed-off-by: default avatarKevin Wolf <kwolf@redhat.com>
parent 1e34cf96
Loading
Loading
Loading
Loading
+52 −46
Original line number Diff line number Diff line
@@ -191,7 +191,7 @@ static void test_basic(const QVirtioBus *bus, QVirtioDevice *dev,

    qvirtio_set_driver_ok(bus, dev);

    /* Write and read with 2 descriptor layout */
    /* Write and read with 3 descriptor layout */
    /* Write request */
    req.type = QVIRTIO_BLK_T_OUT;
    req.ioprio = 1;
@@ -203,8 +203,10 @@ static void test_basic(const QVirtioBus *bus, QVirtioDevice *dev,

    g_free(req.data);

    free_head = qvirtqueue_add(vq, req_addr, 528, false, true);
    free_head = qvirtqueue_add(vq, req_addr, 16, false, true);
    qvirtqueue_add(vq, req_addr + 16, 512, false, true);
    qvirtqueue_add(vq, req_addr + 528, 1, true, false);

    qvirtqueue_kick(bus, dev, vq, free_head);

    qvirtio_wait_queue_isr(bus, dev, vq, QVIRTIO_BLK_TIMEOUT_US);
@@ -224,7 +226,8 @@ static void test_basic(const QVirtioBus *bus, QVirtioDevice *dev,
    g_free(req.data);

    free_head = qvirtqueue_add(vq, req_addr, 16, false, true);
    qvirtqueue_add(vq, req_addr + 16, 513, true, false);
    qvirtqueue_add(vq, req_addr + 16, 512, true, true);
    qvirtqueue_add(vq, req_addr + 528, 1, true, false);

    qvirtqueue_kick(bus, dev, vq, free_head);

@@ -239,7 +242,8 @@ static void test_basic(const QVirtioBus *bus, QVirtioDevice *dev,

    guest_free(alloc, req_addr);

    /* Write and read with 3 descriptor layout */
    if (features & QVIRTIO_F_ANY_LAYOUT) {
        /* Write and read with 2 descriptor layout */
        /* Write request */
        req.type = QVIRTIO_BLK_T_OUT;
        req.ioprio = 1;
@@ -251,10 +255,8 @@ static void test_basic(const QVirtioBus *bus, QVirtioDevice *dev,

        g_free(req.data);

    free_head = qvirtqueue_add(vq, req_addr, 16, false, true);
    qvirtqueue_add(vq, req_addr + 16, 512, false, true);
        free_head = qvirtqueue_add(vq, req_addr, 528, false, true);
        qvirtqueue_add(vq, req_addr + 528, 1, true, false);

        qvirtqueue_kick(bus, dev, vq, free_head);

        qvirtio_wait_queue_isr(bus, dev, vq, QVIRTIO_BLK_TIMEOUT_US);
@@ -274,8 +276,7 @@ static void test_basic(const QVirtioBus *bus, QVirtioDevice *dev,
        g_free(req.data);

        free_head = qvirtqueue_add(vq, req_addr, 16, false, true);
    qvirtqueue_add(vq, req_addr + 16, 512, true, true);
    qvirtqueue_add(vq, req_addr + 528, 1, true, false);
        qvirtqueue_add(vq, req_addr + 16, 513, true, false);

        qvirtqueue_kick(bus, dev, vq, free_head);

@@ -290,6 +291,7 @@ static void test_basic(const QVirtioBus *bus, QVirtioDevice *dev,

        guest_free(alloc, req_addr);
    }
}

static void pci_basic(void)
{
@@ -521,7 +523,8 @@ static void pci_msix(void)

    g_free(req.data);

    free_head = qvirtqueue_add(&vqpci->vq, req_addr, 528, false, true);
    free_head = qvirtqueue_add(&vqpci->vq, req_addr, 16, false, true);
    qvirtqueue_add(&vqpci->vq, req_addr + 16, 512, false, true);
    qvirtqueue_add(&vqpci->vq, req_addr + 528, 1, true, false);
    qvirtqueue_kick(&qvirtio_pci, &dev->vdev, &vqpci->vq, free_head);

@@ -544,7 +547,8 @@ static void pci_msix(void)
    g_free(req.data);

    free_head = qvirtqueue_add(&vqpci->vq, req_addr, 16, false, true);
    qvirtqueue_add(&vqpci->vq, req_addr + 16, 513, true, false);
    qvirtqueue_add(&vqpci->vq, req_addr + 16, 512, true, true);
    qvirtqueue_add(&vqpci->vq, req_addr + 528, 1, true, false);

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

@@ -625,7 +629,8 @@ static void pci_idx(void)

    g_free(req.data);

    free_head = qvirtqueue_add(&vqpci->vq, req_addr, 528, false, true);
    free_head = qvirtqueue_add(&vqpci->vq, req_addr, 16, false, true);
    qvirtqueue_add(&vqpci->vq, req_addr + 16, 512, false, true);
    qvirtqueue_add(&vqpci->vq, req_addr + 528, 1, true, false);
    qvirtqueue_kick(&qvirtio_pci, &dev->vdev, &vqpci->vq, free_head);

@@ -645,7 +650,8 @@ static void pci_idx(void)

    /* Notify after processing the third request */
    qvirtqueue_set_used_event(&vqpci->vq, 2);
    free_head = qvirtqueue_add(&vqpci->vq, req_addr, 528, false, true);
    free_head = qvirtqueue_add(&vqpci->vq, req_addr, 16, false, true);
    qvirtqueue_add(&vqpci->vq, req_addr + 16, 512, false, true);
    qvirtqueue_add(&vqpci->vq, req_addr + 528, 1, true, false);
    qvirtqueue_kick(&qvirtio_pci, &dev->vdev, &vqpci->vq, free_head);

@@ -668,11 +674,11 @@ static void pci_idx(void)
    g_free(req.data);

    free_head = qvirtqueue_add(&vqpci->vq, req_addr, 16, false, true);
    qvirtqueue_add(&vqpci->vq, req_addr + 16, 513, true, false);
    qvirtqueue_add(&vqpci->vq, req_addr + 16, 512, true, true);
    qvirtqueue_add(&vqpci->vq, req_addr + 528, 1, true, false);

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


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