All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Michael S. Tsirkin" <mst@redhat.com>
To: qemu-devel@nongnu.org
Cc: Laurent Vivier <lvivier@redhat.com>,
	Peter Maydell <peter.maydell@linaro.org>,
	Thomas Huth <thuth@redhat.com>,
	Stefan Hajnoczi <stefanha@redhat.com>,
	Paolo Bonzini <pbonzini@redhat.com>
Subject: [PULL 33/38] tests/qtest: add multi-queue test case to vhost-user-blk-test
Date: Tue, 3 Nov 2020 09:35:26 -0500	[thread overview]
Message-ID: <20201103142306.71782-34-mst@redhat.com> (raw)
In-Reply-To: <20201103142306.71782-1-mst@redhat.com>

From: Stefan Hajnoczi <stefanha@redhat.com>

Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
Message-id: 20201001144604.559733-3-stefanha@redhat.com
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
Message-Id: <20201027173528.213464-8-stefanha@redhat.com>
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
---
 tests/qtest/vhost-user-blk-test.c | 81 +++++++++++++++++++++++++++++--
 1 file changed, 76 insertions(+), 5 deletions(-)

diff --git a/tests/qtest/vhost-user-blk-test.c b/tests/qtest/vhost-user-blk-test.c
index e7e44f9bf0..31f2335f97 100644
--- a/tests/qtest/vhost-user-blk-test.c
+++ b/tests/qtest/vhost-user-blk-test.c
@@ -559,6 +559,67 @@ static void pci_hotplug(void *obj, void *data, QGuestAllocator *t_alloc)
     qpci_unplug_acpi_device_test(qts, "drv1", PCI_SLOT_HP);
 }
 
+static void multiqueue(void *obj, void *data, QGuestAllocator *t_alloc)
+{
+    QVirtioPCIDevice *pdev1 = obj;
+    QVirtioDevice *dev1 = &pdev1->vdev;
+    QVirtioPCIDevice *pdev8;
+    QVirtioDevice *dev8;
+    QTestState *qts = pdev1->pdev->bus->qts;
+    uint64_t features;
+    uint16_t num_queues;
+
+    /*
+     * The primary device has 1 queue and VIRTIO_BLK_F_MQ is not enabled. The
+     * VIRTIO specification allows VIRTIO_BLK_F_MQ to be enabled when there is
+     * only 1 virtqueue, but --device vhost-user-blk-pci doesn't do this (which
+     * is also spec-compliant).
+     */
+    features = qvirtio_get_features(dev1);
+    g_assert_cmpint(features & (1u << VIRTIO_BLK_F_MQ), ==, 0);
+    features = features & ~(QVIRTIO_F_BAD_FEATURE |
+                            (1u << VIRTIO_RING_F_INDIRECT_DESC) |
+                            (1u << VIRTIO_F_NOTIFY_ON_EMPTY) |
+                            (1u << VIRTIO_BLK_F_SCSI));
+    qvirtio_set_features(dev1, features);
+
+    /* Hotplug a secondary device with 8 queues */
+    qtest_qmp_device_add(qts, "vhost-user-blk-pci", "drv1",
+                         "{'addr': %s, 'chardev': 'char2', 'num-queues': 8}",
+                         stringify(PCI_SLOT_HP) ".0");
+
+    pdev8 = virtio_pci_new(pdev1->pdev->bus,
+                           &(QPCIAddress) {
+                               .devfn = QPCI_DEVFN(PCI_SLOT_HP, 0)
+                           });
+    g_assert_nonnull(pdev8);
+    g_assert_cmpint(pdev8->vdev.device_type, ==, VIRTIO_ID_BLOCK);
+
+    qos_object_start_hw(&pdev8->obj);
+
+    dev8 = &pdev8->vdev;
+    features = qvirtio_get_features(dev8);
+    g_assert_cmpint(features & (1u << VIRTIO_BLK_F_MQ),
+                    ==,
+                    (1u << VIRTIO_BLK_F_MQ));
+    features = features & ~(QVIRTIO_F_BAD_FEATURE |
+                            (1u << VIRTIO_RING_F_INDIRECT_DESC) |
+                            (1u << VIRTIO_F_NOTIFY_ON_EMPTY) |
+                            (1u << VIRTIO_BLK_F_SCSI) |
+                            (1u << VIRTIO_BLK_F_MQ));
+    qvirtio_set_features(dev8, features);
+
+    num_queues = qvirtio_config_readw(dev8,
+            offsetof(struct virtio_blk_config, num_queues));
+    g_assert_cmpint(num_queues, ==, 8);
+
+    qvirtio_pci_device_disable(pdev8);
+    qos_object_destroy(&pdev8->obj);
+
+    /* unplug secondary disk */
+    qpci_unplug_acpi_device_test(qts, "drv1", PCI_SLOT_HP);
+}
+
 /*
  * Check that setting the vring addr on a non-existent virtqueue does
  * not crash.
@@ -643,7 +704,8 @@ static void quit_storage_daemon(void *qmp_test_state)
     g_free(qmp_test_state);
 }
 
-static char *start_vhost_user_blk(GString *cmd_line, int vus_instances)
+static char *start_vhost_user_blk(GString *cmd_line, int vus_instances,
+                                  int num_queues)
 {
     const char *vhost_user_blk_bin = qtest_qemu_storage_daemon_binary();
     int fd, qmp_fd, i;
@@ -675,8 +737,8 @@ static char *start_vhost_user_blk(GString *cmd_line, int vus_instances)
         g_string_append_printf(storage_daemon_command,
             "--blockdev driver=file,node-name=disk%d,filename=%s "
             "--export type=vhost-user-blk,id=disk%d,addr.type=unix,addr.path=%s,"
-            "node-name=disk%i,writable=on ",
-            i, img_path, i, sock_path, i);
+            "node-name=disk%i,writable=on,num-queues=%d ",
+            i, img_path, i, sock_path, i, num_queues);
 
         g_string_append_printf(cmd_line, "-chardev socket,id=char%d,path=%s ",
                                i + 1, sock_path);
@@ -705,7 +767,7 @@ static char *start_vhost_user_blk(GString *cmd_line, int vus_instances)
 
 static void *vhost_user_blk_test_setup(GString *cmd_line, void *arg)
 {
-    start_vhost_user_blk(cmd_line, 1);
+    start_vhost_user_blk(cmd_line, 1, 1);
     return arg;
 }
 
@@ -719,7 +781,13 @@ static void *vhost_user_blk_test_setup(GString *cmd_line, void *arg)
 static void *vhost_user_blk_hotplug_test_setup(GString *cmd_line, void *arg)
 {
     /* "-chardev socket,id=char2" is used for pci_hotplug*/
-    start_vhost_user_blk(cmd_line, 2);
+    start_vhost_user_blk(cmd_line, 2, 1);
+    return arg;
+}
+
+static void *vhost_user_blk_multiqueue_test_setup(GString *cmd_line, void *arg)
+{
+    start_vhost_user_blk(cmd_line, 2, 8);
     return arg;
 }
 
@@ -746,6 +814,9 @@ static void register_vhost_user_blk_test(void)
 
     opts.before = vhost_user_blk_hotplug_test_setup;
     qos_add_test("hotplug", "vhost-user-blk-pci", pci_hotplug, &opts);
+
+    opts.before = vhost_user_blk_multiqueue_test_setup;
+    qos_add_test("multiqueue", "vhost-user-blk-pci", multiqueue, &opts);
 }
 
 libqos_init(register_vhost_user_blk_test);
-- 
MST



  parent reply	other threads:[~2020-11-03 14:53 UTC|newest]

Thread overview: 41+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-11-03 14:33 [PULL 00/38] pc,pci,vhost,virtio: fixes Michael S. Tsirkin
2020-11-03 14:34 ` [PULL 01/38] pc: comment style fixup Michael S. Tsirkin
2020-11-03 14:34 ` [PULL 02/38] virtio-mem: Make sure "addr" is always multiples of the block size Michael S. Tsirkin
2020-11-03 14:34 ` [PULL 03/38] virtio-mem: Make sure "usable_region_size" " Michael S. Tsirkin
2020-11-03 14:34 ` [PULL 04/38] virtio-mem: Probe THP size to determine default " Michael S. Tsirkin
2020-11-03 14:34 ` [PULL 05/38] memory-device: Support big alignment requirements Michael S. Tsirkin
2020-11-03 14:34 ` [PULL 06/38] memory-device: Add get_min_alignment() callback Michael S. Tsirkin
2020-11-03 14:34 ` [PULL 07/38] virito-mem: Implement get_min_alignment() Michael S. Tsirkin
2020-11-03 14:34 ` [PULL 08/38] hw/acpi : Don't use '#' flag of printf format Michael S. Tsirkin
2020-11-03 14:34 ` [PULL 09/38] hw/acpi : add space before the open parenthesis '(' Michael S. Tsirkin
2020-11-03 14:34 ` [PULL 10/38] hw/acpi : add spaces around operator Michael S. Tsirkin
2020-11-03 14:34 ` [PULL 11/38] hw/virtio/vhost-backend: Fix Coverity CID 1432871 Michael S. Tsirkin
2020-11-03 14:34 ` [PULL 12/38] hw/smbios: Fix leaked fd in save_opt_one() error path Michael S. Tsirkin
2020-11-03 14:34 ` [PULL 13/38] virtio-iommu: Fix virtio_iommu_mr() Michael S. Tsirkin
2020-11-03 14:34 ` [PULL 14/38] virtio-iommu: Store memory region in endpoint struct Michael S. Tsirkin
2020-11-03 14:34 ` [PULL 15/38] virtio-iommu: Add memory notifiers for map/unmap Michael S. Tsirkin
2020-11-03 14:34 ` [PULL 16/38] virtio-iommu: Call memory notifiers in attach/detach Michael S. Tsirkin
2020-11-03 14:34 ` [PULL 17/38] virtio-iommu: Add replay() memory region callback Michael S. Tsirkin
2020-11-03 14:34 ` [PULL 18/38] virtio-iommu: Add notify_flag_changed() " Michael S. Tsirkin
2020-11-03 14:34 ` [PULL 19/38] memory: Add interface to set iommu page size mask Michael S. Tsirkin
2020-11-03 14:34 ` [PULL 20/38] vfio: Set IOMMU page size as per host supported page size Michael S. Tsirkin
2020-11-03 14:34 ` [PULL 21/38] virtio-iommu: Set supported page size mask Michael S. Tsirkin
2020-11-03 14:34 ` [PULL 22/38] vfio: Don't issue full 2^64 unmap Michael S. Tsirkin
2020-11-03 14:35 ` [PULL 23/38] vhost-vdpa: Add qemu_close in vhost_vdpa_cleanup Michael S. Tsirkin
2020-11-03 14:35 ` [PULL 24/38] net: Add vhost-vdpa in show_netdevs() Michael S. Tsirkin
2020-11-03 14:35 ` [PULL 25/38] Revert "vhost-blk: set features before setting inflight feature" Michael S. Tsirkin
2020-11-03 14:35 ` [PULL 26/38] vhost-blk: set features before setting inflight feature Michael S. Tsirkin
2020-11-03 14:35 ` [PULL 27/38] libvhost-user: follow QEMU comment style Michael S. Tsirkin
2020-11-03 14:35 ` [PULL 28/38] configure: introduce --enable-vhost-user-blk-server Michael S. Tsirkin
2020-11-03 14:35 ` [PULL 29/38] block/export: make vhost-user-blk config space little-endian Michael S. Tsirkin
2020-11-03 14:35 ` [PULL 30/38] block/export: fix vhost-user-blk get_config() information leak Michael S. Tsirkin
2020-11-03 14:35 ` [PULL 31/38] contrib/vhost-user-blk: fix " Michael S. Tsirkin
2020-11-03 14:35 ` [PULL 32/38] test: new qTest case to test the vhost-user-blk-server Michael S. Tsirkin
2020-11-03 14:35 ` Michael S. Tsirkin [this message]
2020-11-03 14:35 ` [PULL 34/38] libqtest: add qtest_socket_server() Michael S. Tsirkin
2020-11-03 14:35 ` [PULL 35/38] vhost-user-blk-test: rename destroy_drive() to destroy_file() Michael S. Tsirkin
2020-11-03 14:35 ` [PULL 36/38] vhost-user-blk-test: close fork child file descriptors Michael S. Tsirkin
2020-11-03 14:35 ` [PULL 37/38] vhost-user-blk-test: drop unused return value Michael S. Tsirkin
2020-11-03 14:35 ` [PULL 38/38] vhost-user-blk-test: fix races by using fd passing Michael S. Tsirkin
2020-11-03 15:59 ` [PULL 00/38] pc,pci,vhost,virtio: fixes Peter Maydell
2020-11-03 21:40   ` Michael S. Tsirkin

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20201103142306.71782-34-mst@redhat.com \
    --to=mst@redhat.com \
    --cc=lvivier@redhat.com \
    --cc=pbonzini@redhat.com \
    --cc=peter.maydell@linaro.org \
    --cc=qemu-devel@nongnu.org \
    --cc=stefanha@redhat.com \
    --cc=thuth@redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.