aboutsummaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorPeter Maydell <peter.maydell@linaro.org>2018-01-12 09:52:58 +0000
committerPeter Maydell <peter.maydell@linaro.org>2018-01-12 09:52:58 +0000
commit36b5e43af8561bf1e381022a5010ff0d5cc3be17 (patch)
tree21965c6e60a2e29664b7685e52feacdb6a86e0bd /tests
parent997eba28a3ed5400a80f754bf3a1c8044b75b9ff (diff)
parentacc95bc85036c443da8bf7159a77edf9f00dcd80 (diff)
downloadqemu-36b5e43af8561bf1e381022a5010ff0d5cc3be17.zip
qemu-36b5e43af8561bf1e381022a5010ff0d5cc3be17.tar.gz
qemu-36b5e43af8561bf1e381022a5010ff0d5cc3be17.tar.bz2
Merge remote-tracking branch 'remotes/mst/tags/for_upstream' into staging
pc, pci, virtio: features, fixes, cleanups A bunch of fixes, cleanus and new features all over the place. Signed-off-by: Michael S. Tsirkin <mst@redhat.com> # gpg: Signature made Thu 11 Jan 2018 20:04:57 GMT # gpg: using RSA key 0x281F0DB8D28D5469 # gpg: Good signature from "Michael S. Tsirkin <mst@kernel.org>" # gpg: aka "Michael S. Tsirkin <mst@redhat.com>" # Primary key fingerprint: 0270 606B 6F3C DF3D 0B17 0970 C350 3912 AFBE 8E67 # Subkey fingerprint: 5D09 FD08 71C8 F85B 94CA 8A0D 281F 0DB8 D28D 5469 * remotes/mst/tags/for_upstream: (23 commits) smbus: do not immediately complete commands dump-guest-memory.py: fix "You can't do that without a process to debug" virtio-pci: Don't force Subsystem Vendor ID = Vendor ID intel_iommu: fix error param in string intel_iommu: remove X86_IOMMU_PCI_DEVFN_MAX vhost-user: document memory accesses vhost-user: fix indentation in protocol specification hw/pci-host/xilinx: QOM'ify the AXI-PCIe host bridge hw/pci-host/piix: QOM'ify the IGD Passthrough host bridge tests/pxe-test: Add some extra tests tests/pxe-test: Test net booting over IPv6 in some cases tests/pxe-test: Use table of testcases rather than open-coding tests/pxe-test: Remove unnecessary special case test functions virtio_error: don't invoke status callbacks pci: Eliminate pci_find_primary_bus() pci: Eliminate redundant PCIDevice::bus pointer pci: Add pci_dev_bus_num() helper pci: Move bridge data structures from pci_bus.h to pci_bridge.h pci: Rename root bus initialization functions for clarity tests: add test to check VirtQueue object ... Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Diffstat (limited to 'tests')
-rw-r--r--tests/pxe-test.c99
-rw-r--r--tests/virtio-blk-test.c25
2 files changed, 99 insertions, 25 deletions
diff --git a/tests/pxe-test.c b/tests/pxe-test.c
index 937f29e6..5ca8480 100644
--- a/tests/pxe-test.c
+++ b/tests/pxe-test.c
@@ -22,14 +22,53 @@
static char disk[] = "tests/pxe-test-disk-XXXXXX";
-static void test_pxe_one(const char *params, bool ipv6)
+typedef struct testdef {
+ const char *machine; /* Machine type */
+ const char *model; /* NIC device model */
+} testdef_t;
+
+static testdef_t x86_tests[] = {
+ { "pc", "e1000" },
+ { "pc", "virtio-net-pci" },
+ { "q35", "e1000e" },
+ { "q35", "virtio-net-pci", },
+ { NULL },
+};
+
+static testdef_t x86_tests_slow[] = {
+ { "pc", "ne2k_pci", },
+ { "pc", "i82550", },
+ { "pc", "rtl8139" },
+ { "pc", "vmxnet3" },
+ { NULL },
+};
+
+static testdef_t ppc64_tests[] = {
+ { "pseries", "spapr-vlan" },
+ { "pseries", "virtio-net-pci", },
+ { NULL },
+};
+
+static testdef_t ppc64_tests_slow[] = {
+ { "pseries", "e1000" },
+ { NULL },
+};
+
+static testdef_t s390x_tests[] = {
+ { "s390-ccw-virtio", "virtio-net-ccw" },
+ { NULL },
+};
+
+static void test_pxe_one(const testdef_t *test, bool ipv6)
{
char *args;
- args = g_strdup_printf("-machine accel=kvm:tcg -nodefaults -boot order=n "
- "-netdev user,id=" NETNAME ",tftp=./,bootfile=%s,"
- "ipv4=%s,ipv6=%s %s", disk, ipv6 ? "off" : "on",
- ipv6 ? "on" : "off", params);
+ args = g_strdup_printf(
+ "-machine %s,accel=kvm:tcg -nodefaults -boot order=n "
+ "-netdev user,id=" NETNAME ",tftp=./,bootfile=%s,ipv4=%s,ipv6=%s "
+ "-device %s,bootindex=1,netdev=" NETNAME,
+ test->machine, disk, ipv6 ? "off" : "on", ipv6 ? "on" : "off",
+ test->model);
qtest_start(args);
boot_sector_test();
@@ -39,22 +78,38 @@ static void test_pxe_one(const char *params, bool ipv6)
static void test_pxe_ipv4(gconstpointer data)
{
- const char *model = data;
- char *dev_arg;
+ const testdef_t *test = data;
- dev_arg = g_strdup_printf("-device %s,netdev=" NETNAME, model);
- test_pxe_one(dev_arg, false);
- g_free(dev_arg);
+ test_pxe_one(test, false);
}
-static void test_pxe_spapr_vlan(void)
+static void test_pxe_ipv6(gconstpointer data)
{
- test_pxe_one("-device spapr-vlan,netdev=" NETNAME, true);
+ const testdef_t *test = data;
+
+ test_pxe_one(test, true);
}
-static void test_pxe_virtio_ccw(void)
+static void test_batch(const testdef_t *tests, bool ipv6)
{
- test_pxe_one("-device virtio-net-ccw,bootindex=1,netdev=" NETNAME, false);
+ int i;
+
+ for (i = 0; tests[i].machine; i++) {
+ const testdef_t *test = &tests[i];
+ char *testname;
+
+ testname = g_strdup_printf("pxe/ipv4/%s/%s",
+ test->machine, test->model);
+ qtest_add_data_func(testname, test, test_pxe_ipv4);
+ g_free(testname);
+
+ if (ipv6) {
+ testname = g_strdup_printf("pxe/ipv6/%s/%s",
+ test->machine, test->model);
+ qtest_add_data_func(testname, test, test_pxe_ipv6);
+ g_free(testname);
+ }
+ }
}
int main(int argc, char *argv[])
@@ -69,23 +124,17 @@ int main(int argc, char *argv[])
g_test_init(&argc, &argv, NULL);
if (strcmp(arch, "i386") == 0 || strcmp(arch, "x86_64") == 0) {
- qtest_add_data_func("pxe/e1000", "e1000", test_pxe_ipv4);
- qtest_add_data_func("pxe/virtio", "virtio-net-pci", test_pxe_ipv4);
+ test_batch(x86_tests, false);
if (g_test_slow()) {
- qtest_add_data_func("pxe/ne2000", "ne2k_pci", test_pxe_ipv4);
- qtest_add_data_func("pxe/eepro100", "i82550", test_pxe_ipv4);
- qtest_add_data_func("pxe/pcnet", "pcnet", test_pxe_ipv4);
- qtest_add_data_func("pxe/rtl8139", "rtl8139", test_pxe_ipv4);
- qtest_add_data_func("pxe/vmxnet3", "vmxnet3", test_pxe_ipv4);
+ test_batch(x86_tests_slow, false);
}
} else if (strcmp(arch, "ppc64") == 0) {
- qtest_add_func("pxe/spapr-vlan", test_pxe_spapr_vlan);
+ test_batch(ppc64_tests, g_test_slow());
if (g_test_slow()) {
- qtest_add_data_func("pxe/virtio", "virtio-net-pci", test_pxe_ipv4);
- qtest_add_data_func("pxe/e1000", "e1000", test_pxe_ipv4);
+ test_batch(ppc64_tests_slow, true);
}
} else if (g_str_equal(arch, "s390x")) {
- qtest_add_func("pxe/virtio-ccw", test_pxe_virtio_ccw);
+ test_batch(s390x_tests, g_test_slow());
}
ret = g_test_run();
boot_sector_cleanup(disk);
diff --git a/tests/virtio-blk-test.c b/tests/virtio-blk-test.c
index e6fb9ba..45f368d 100644
--- a/tests/virtio-blk-test.c
+++ b/tests/virtio-blk-test.c
@@ -674,6 +674,30 @@ static void pci_hotplug(void)
qtest_shutdown(qs);
}
+/*
+ * Check that setting the vring addr on a non-existent virtqueue does
+ * not crash.
+ */
+static void test_nonexistent_virtqueue(void)
+{
+ QPCIBar bar0;
+ QOSState *qs;
+ QPCIDevice *dev;
+
+ qs = pci_test_start();
+ dev = qpci_device_find(qs->pcibus, QPCI_DEVFN(4, 0));
+ g_assert(dev != NULL);
+
+ qpci_device_enable(dev);
+ bar0 = qpci_iomap(dev, 0, NULL);
+
+ qpci_io_writeb(dev, bar0, VIRTIO_PCI_QUEUE_SEL, 2);
+ qpci_io_writel(dev, bar0, VIRTIO_PCI_QUEUE_PFN, 1);
+
+ g_free(dev);
+ qtest_shutdown(qs);
+}
+
static void mmio_basic(void)
{
QVirtioMMIODevice *dev;
@@ -724,6 +748,7 @@ int main(int argc, char **argv)
qtest_add_func("/virtio/blk/pci/basic", pci_basic);
qtest_add_func("/virtio/blk/pci/indirect", pci_indirect);
qtest_add_func("/virtio/blk/pci/config", pci_config);
+ qtest_add_func("/virtio/blk/pci/nxvirtq", test_nonexistent_virtqueue);
if (strcmp(arch, "i386") == 0 || strcmp(arch, "x86_64") == 0) {
qtest_add_func("/virtio/blk/pci/msix", pci_msix);
qtest_add_func("/virtio/blk/pci/idx", pci_idx);