mirror of https://github.com/xemu-project/xemu.git
tests/qtest: add a get_features op to vhost-user-test
As we expand this test for more virtio devices we will need to support different feature sets. Add a mandatory op field to fetch the list of features needed for the test itself. Signed-off-by: Alex Bennée <alex.bennee@linaro.org> Message-Id: <20220802095010.3330793-22-alex.bennee@linaro.org> Reviewed-by: Michael S. Tsirkin <mst@redhat.com> Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
This commit is contained in:
parent
ff070f602a
commit
19d55a19a4
|
@ -171,6 +171,7 @@ struct vhost_user_ops {
|
||||||
const char *chr_opts);
|
const char *chr_opts);
|
||||||
|
|
||||||
/* VHOST-USER commands. */
|
/* VHOST-USER commands. */
|
||||||
|
uint64_t (*get_features)(TestServer *s);
|
||||||
void (*set_features)(TestServer *s, CharBackend *chr,
|
void (*set_features)(TestServer *s, CharBackend *chr,
|
||||||
VhostUserMsg *msg);
|
VhostUserMsg *msg);
|
||||||
void (*get_protocol_features)(TestServer *s,
|
void (*get_protocol_features)(TestServer *s,
|
||||||
|
@ -338,20 +339,22 @@ static void chr_read(void *opaque, const uint8_t *buf, int size)
|
||||||
|
|
||||||
switch (msg.request) {
|
switch (msg.request) {
|
||||||
case VHOST_USER_GET_FEATURES:
|
case VHOST_USER_GET_FEATURES:
|
||||||
|
/* Mandatory for tests to define get_features */
|
||||||
|
g_assert(s->vu_ops->get_features);
|
||||||
|
|
||||||
/* send back features to qemu */
|
/* send back features to qemu */
|
||||||
msg.flags |= VHOST_USER_REPLY_MASK;
|
msg.flags |= VHOST_USER_REPLY_MASK;
|
||||||
msg.size = sizeof(m.payload.u64);
|
msg.size = sizeof(m.payload.u64);
|
||||||
msg.payload.u64 = 0x1ULL << VHOST_F_LOG_ALL |
|
|
||||||
0x1ULL << VHOST_USER_F_PROTOCOL_FEATURES;
|
|
||||||
if (s->queues > 1) {
|
|
||||||
msg.payload.u64 |= 0x1ULL << VIRTIO_NET_F_MQ;
|
|
||||||
}
|
|
||||||
if (s->test_flags >= TEST_FLAGS_BAD) {
|
if (s->test_flags >= TEST_FLAGS_BAD) {
|
||||||
msg.payload.u64 = 0;
|
msg.payload.u64 = 0;
|
||||||
s->test_flags = TEST_FLAGS_END;
|
s->test_flags = TEST_FLAGS_END;
|
||||||
|
} else {
|
||||||
|
msg.payload.u64 = s->vu_ops->get_features(s);
|
||||||
}
|
}
|
||||||
p = (uint8_t *) &msg;
|
|
||||||
qemu_chr_fe_write_all(chr, p, VHOST_USER_HDR_SIZE + msg.size);
|
qemu_chr_fe_write_all(chr, (uint8_t *) &msg,
|
||||||
|
VHOST_USER_HDR_SIZE + msg.size);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case VHOST_USER_SET_FEATURES:
|
case VHOST_USER_SET_FEATURES:
|
||||||
|
@ -995,6 +998,19 @@ static void test_multiqueue(void *obj, void *arg, QGuestAllocator *alloc)
|
||||||
wait_for_rings_started(s, s->queues * 2);
|
wait_for_rings_started(s, s->queues * 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static uint64_t vu_net_get_features(TestServer *s)
|
||||||
|
{
|
||||||
|
uint64_t features = 0x1ULL << VHOST_F_LOG_ALL |
|
||||||
|
0x1ULL << VHOST_USER_F_PROTOCOL_FEATURES;
|
||||||
|
|
||||||
|
if (s->queues > 1) {
|
||||||
|
features |= 0x1ULL << VIRTIO_NET_F_MQ;
|
||||||
|
}
|
||||||
|
|
||||||
|
return features;
|
||||||
|
}
|
||||||
|
|
||||||
static void vu_net_set_features(TestServer *s, CharBackend *chr,
|
static void vu_net_set_features(TestServer *s, CharBackend *chr,
|
||||||
VhostUserMsg *msg)
|
VhostUserMsg *msg)
|
||||||
{
|
{
|
||||||
|
@ -1025,6 +1041,7 @@ static struct vhost_user_ops g_vu_net_ops = {
|
||||||
|
|
||||||
.append_opts = append_vhost_net_opts,
|
.append_opts = append_vhost_net_opts,
|
||||||
|
|
||||||
|
.get_features = vu_net_get_features,
|
||||||
.set_features = vu_net_set_features,
|
.set_features = vu_net_set_features,
|
||||||
.get_protocol_features = vu_net_get_protocol_features,
|
.get_protocol_features = vu_net_get_protocol_features,
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in New Issue