diff options
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/data/acpi/aarch64/virt/DSDT | bin | 5293 -> 5337 bytes | |||
| -rw-r--r-- | tests/data/acpi/aarch64/virt/DSDT.acpihmatvirt | bin | 5379 -> 5423 bytes | |||
| -rw-r--r-- | tests/data/acpi/aarch64/virt/DSDT.acpipcihp | bin | 6202 -> 6246 bytes | |||
| -rw-r--r-- | tests/data/acpi/aarch64/virt/DSDT.hpoffacpiindex | bin | 5347 -> 5391 bytes | |||
| -rw-r--r-- | tests/data/acpi/aarch64/virt/DSDT.memhp | bin | 6654 -> 6698 bytes | |||
| -rw-r--r-- | tests/data/acpi/aarch64/virt/DSDT.pxb | bin | 7768 -> 7812 bytes | |||
| -rw-r--r-- | tests/data/acpi/aarch64/virt/DSDT.smmuv3-dev | bin | 10230 -> 10274 bytes | |||
| -rw-r--r-- | tests/data/acpi/aarch64/virt/DSDT.smmuv3-legacy | bin | 10230 -> 10274 bytes | |||
| -rw-r--r-- | tests/data/acpi/aarch64/virt/DSDT.topology | bin | 5495 -> 5539 bytes | |||
| -rw-r--r-- | tests/data/acpi/aarch64/virt/DSDT.viot | bin | 5310 -> 5354 bytes | |||
| -rw-r--r-- | tests/data/acpi/aarch64/virt/HEST | bin | 132 -> 224 bytes | |||
| -rw-r--r-- | tests/qtest/libqos/virtio.c | 16 | ||||
| -rw-r--r-- | tests/qtest/libqos/virtio.h | 2 | ||||
| -rw-r--r-- | tests/qtest/virtio-scsi-test.c | 32 |
14 files changed, 46 insertions, 4 deletions
diff --git a/tests/data/acpi/aarch64/virt/DSDT b/tests/data/acpi/aarch64/virt/DSDT index 18d97e8f22..38f01adb61 100644 --- a/tests/data/acpi/aarch64/virt/DSDT +++ b/tests/data/acpi/aarch64/virt/DSDT Binary files differdiff --git a/tests/data/acpi/aarch64/virt/DSDT.acpihmatvirt b/tests/data/acpi/aarch64/virt/DSDT.acpihmatvirt index 2cef095bcc..37a9af713b 100644 --- a/tests/data/acpi/aarch64/virt/DSDT.acpihmatvirt +++ b/tests/data/acpi/aarch64/virt/DSDT.acpihmatvirt Binary files differdiff --git a/tests/data/acpi/aarch64/virt/DSDT.acpipcihp b/tests/data/acpi/aarch64/virt/DSDT.acpipcihp index 8d55a877a4..04427e2d8e 100644 --- a/tests/data/acpi/aarch64/virt/DSDT.acpipcihp +++ b/tests/data/acpi/aarch64/virt/DSDT.acpipcihp Binary files differdiff --git a/tests/data/acpi/aarch64/virt/DSDT.hpoffacpiindex b/tests/data/acpi/aarch64/virt/DSDT.hpoffacpiindex index 970d43f68b..43ab60496e 100644 --- a/tests/data/acpi/aarch64/virt/DSDT.hpoffacpiindex +++ b/tests/data/acpi/aarch64/virt/DSDT.hpoffacpiindex Binary files differdiff --git a/tests/data/acpi/aarch64/virt/DSDT.memhp b/tests/data/acpi/aarch64/virt/DSDT.memhp index 372ca3d7fb..3c39167444 100644 --- a/tests/data/acpi/aarch64/virt/DSDT.memhp +++ b/tests/data/acpi/aarch64/virt/DSDT.memhp Binary files differdiff --git a/tests/data/acpi/aarch64/virt/DSDT.pxb b/tests/data/acpi/aarch64/virt/DSDT.pxb index c277988249..71c632cedc 100644 --- a/tests/data/acpi/aarch64/virt/DSDT.pxb +++ b/tests/data/acpi/aarch64/virt/DSDT.pxb Binary files differdiff --git a/tests/data/acpi/aarch64/virt/DSDT.smmuv3-dev b/tests/data/acpi/aarch64/virt/DSDT.smmuv3-dev index 53d4c07f42..e8c2b376df 100644 --- a/tests/data/acpi/aarch64/virt/DSDT.smmuv3-dev +++ b/tests/data/acpi/aarch64/virt/DSDT.smmuv3-dev Binary files differdiff --git a/tests/data/acpi/aarch64/virt/DSDT.smmuv3-legacy b/tests/data/acpi/aarch64/virt/DSDT.smmuv3-legacy index 53d4c07f42..e8c2b376df 100644 --- a/tests/data/acpi/aarch64/virt/DSDT.smmuv3-legacy +++ b/tests/data/acpi/aarch64/virt/DSDT.smmuv3-legacy Binary files differdiff --git a/tests/data/acpi/aarch64/virt/DSDT.topology b/tests/data/acpi/aarch64/virt/DSDT.topology index ebbeedc1ed..9f22cd3dc8 100644 --- a/tests/data/acpi/aarch64/virt/DSDT.topology +++ b/tests/data/acpi/aarch64/virt/DSDT.topology Binary files differdiff --git a/tests/data/acpi/aarch64/virt/DSDT.viot b/tests/data/acpi/aarch64/virt/DSDT.viot index b897d66797..dd3775a076 100644 --- a/tests/data/acpi/aarch64/virt/DSDT.viot +++ b/tests/data/acpi/aarch64/virt/DSDT.viot Binary files differdiff --git a/tests/data/acpi/aarch64/virt/HEST b/tests/data/acpi/aarch64/virt/HEST index 4c5d8c5b5d..674272922d 100644 --- a/tests/data/acpi/aarch64/virt/HEST +++ b/tests/data/acpi/aarch64/virt/HEST Binary files differdiff --git a/tests/qtest/libqos/virtio.c b/tests/qtest/libqos/virtio.c index 5a709d0bc5..010ff40834 100644 --- a/tests/qtest/libqos/virtio.c +++ b/tests/qtest/libqos/virtio.c @@ -265,8 +265,9 @@ void qvring_init(QTestState *qts, const QGuestAllocator *alloc, QVirtQueue *vq, /* vq->avail->flags */ qvirtio_writew(vq->vdev, qts, vq->avail, 0); - /* vq->avail->idx */ - qvirtio_writew(vq->vdev, qts, vq->avail + 2, 0); + + qvirtqueue_set_avail_idx(qts, vq->vdev, vq, 0); + /* vq->avail->used_event */ qvirtio_writew(vq->vdev, qts, vq->avail + 4 + (2 * vq->size), 0); @@ -388,6 +389,13 @@ uint32_t qvirtqueue_add_indirect(QTestState *qts, QVirtQueue *vq, return vq->free_head++; /* Return and increase, in this order */ } +void qvirtqueue_set_avail_idx(QTestState *qts, QVirtioDevice *d, + QVirtQueue *vq, uint16_t idx) +{ + /* vq->avail->idx */ + qvirtio_writew(d, qts, vq->avail + 2, idx); +} + void qvirtqueue_kick(QTestState *qts, QVirtioDevice *d, QVirtQueue *vq, uint32_t free_head) { @@ -400,8 +408,8 @@ void qvirtqueue_kick(QTestState *qts, QVirtioDevice *d, QVirtQueue *vq, /* vq->avail->ring[idx % vq->size] */ qvirtio_writew(d, qts, vq->avail + 4 + (2 * (idx % vq->size)), free_head); - /* vq->avail->idx */ - qvirtio_writew(d, qts, vq->avail + 2, idx + 1); + + qvirtqueue_set_avail_idx(qts, d, vq, idx + 1); /* Must read after idx is updated */ flags = qvirtio_readw(d, qts, vq->used); diff --git a/tests/qtest/libqos/virtio.h b/tests/qtest/libqos/virtio.h index 7adc7cbd10..e238f1726f 100644 --- a/tests/qtest/libqos/virtio.h +++ b/tests/qtest/libqos/virtio.h @@ -143,6 +143,8 @@ uint32_t qvirtqueue_add(QTestState *qts, QVirtQueue *vq, uint64_t data, uint32_t len, bool write, bool next); uint32_t qvirtqueue_add_indirect(QTestState *qts, QVirtQueue *vq, QVRingIndirectDesc *indirect); +void qvirtqueue_set_avail_idx(QTestState *qts, QVirtioDevice *d, + QVirtQueue *vq, uint16_t idx); void qvirtqueue_kick(QTestState *qts, QVirtioDevice *d, QVirtQueue *vq, uint32_t free_head); bool qvirtqueue_get_buf(QTestState *qts, QVirtQueue *vq, uint32_t *desc_idx, diff --git a/tests/qtest/virtio-scsi-test.c b/tests/qtest/virtio-scsi-test.c index db10d572d0..e2350c52f6 100644 --- a/tests/qtest/virtio-scsi-test.c +++ b/tests/qtest/virtio-scsi-test.c @@ -311,6 +311,31 @@ fail: unlink(tmp_path); } +static void test_iothread_virtio_error(void *obj, void *data, + QGuestAllocator *t_alloc) +{ + QVirtioSCSIPCI *scsi_pci = obj; + QVirtioSCSI *scsi = &scsi_pci->scsi; + QVirtioSCSIQueues *vs; + QVirtQueue *vq; + + alloc = t_alloc; + vs = qvirtio_scsi_init(scsi->vdev); + vq = vs->vq[2]; + + /* Move avail.idx out of bounds to trigger virtio_error() */ + qvirtqueue_set_avail_idx(global_qtest, scsi->vdev, vq, vq->size * 2); + scsi->vdev->bus->virtqueue_kick(scsi->vdev, vq); + + /* + * Reset the device out of the error state. If QEMU hangs or crashes then + * this will fail. + */ + qvirtio_reset(scsi->vdev); + + qvirtio_scsi_pci_free(vs); +} + static void *virtio_scsi_hotplug_setup(GString *cmd_line, void *arg) { g_string_append(cmd_line, @@ -383,6 +408,13 @@ static void register_virtio_scsi_test(void) }; qos_add_test("iothread-attach-node", "virtio-scsi-pci", test_iothread_attach_node, &opts); + + opts.before = virtio_scsi_setup_iothread; + opts.edge = (QOSGraphEdgeOptions) { + .extra_device_opts = "iothread=thread0", + }; + qos_add_test("iothread-virtio-error", "virtio-scsi-pci", + test_iothread_virtio_error, &opts); } libqos_init(register_virtio_scsi_test); |