Skip to content

Commit

Permalink
tests/libqos: support multiqueue for virtio-net
Browse files Browse the repository at this point in the history
Initialize the additional virtqueues if they are supported.
This is needed to switch vhost-user-test's multiqueue test
to the virtio-net qgraph.

Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
  • Loading branch information
bonzini committed Mar 7, 2019
1 parent 6ae333f commit 6bd4a6d
Show file tree
Hide file tree
Showing 3 changed files with 22 additions and 9 deletions.
21 changes: 17 additions & 4 deletions tests/libqos/virtio-net.c
Expand Up @@ -27,23 +27,36 @@ static QGuestAllocator *alloc;

static void virtio_net_cleanup(QVirtioNet *interface)
{
qvirtqueue_cleanup(interface->vdev->bus, interface->rx, alloc);
qvirtqueue_cleanup(interface->vdev->bus, interface->tx, alloc);
int i;

for (i = 0; i < interface->n_queues; i++) {
qvirtqueue_cleanup(interface->vdev->bus, interface->queues[i], alloc);
}
g_free(interface->queues);
}

static void virtio_net_setup(QVirtioNet *interface)
{
QVirtioDevice *vdev = interface->vdev;
uint64_t features;
int i;

features = qvirtio_get_features(vdev);
features &= ~(QVIRTIO_F_BAD_FEATURE |
(1u << VIRTIO_RING_F_INDIRECT_DESC) |
(1u << VIRTIO_RING_F_EVENT_IDX));
qvirtio_set_features(vdev, features);

interface->rx = qvirtqueue_setup(vdev, alloc, 0);
interface->tx = qvirtqueue_setup(vdev, alloc, 1);
if (features & (1u << VIRTIO_NET_F_MQ)) {
interface->n_queues = qvirtio_config_readw(vdev, 8) * 2;
} else {
interface->n_queues = 2;
}

interface->queues = g_new(QVirtQueue *, interface->n_queues);
for (i = 0; i < interface->n_queues; i++) {
interface->queues[i] = qvirtqueue_setup(vdev, alloc, i);
}
qvirtio_set_driver_ok(vdev);
}

Expand Down
4 changes: 2 additions & 2 deletions tests/libqos/virtio-net.h
Expand Up @@ -26,8 +26,8 @@ typedef struct QVirtioNetDevice QVirtioNetDevice;

struct QVirtioNet {
QVirtioDevice *vdev;
QVirtQueue *rx;
QVirtQueue *tx;
int n_queues;
QVirtQueue **queues;
};

struct QVirtioNetPCI {
Expand Down
6 changes: 3 additions & 3 deletions tests/virtio-net-test.c
Expand Up @@ -136,8 +136,8 @@ static void send_recv_test(void *obj, void *data, QGuestAllocator *t_alloc)
{
QVirtioNet *net_if = obj;
QVirtioDevice *dev = net_if->vdev;
QVirtQueue *rx = net_if->rx;
QVirtQueue *tx = net_if->tx;
QVirtQueue *rx = net_if->queues[0];
QVirtQueue *tx = net_if->queues[1];
int *sv = data;

rx_test(dev, t_alloc, rx, sv[0]);
Expand All @@ -148,7 +148,7 @@ static void stop_cont_test(void *obj, void *data, QGuestAllocator *t_alloc)
{
QVirtioNet *net_if = obj;
QVirtioDevice *dev = net_if->vdev;
QVirtQueue *rx = net_if->rx;
QVirtQueue *rx = net_if->queues[0];
int *sv = data;

rx_stop_cont_test(dev, t_alloc, rx, sv[0]);
Expand Down

0 comments on commit 6bd4a6d

Please sign in to comment.