@@ -1,11 +1,21 @@
#ifndef LIBVHOST_ACCESS_H
+#include <assert.h>
+
#include "qemu/bswap.h"
#include "libvhost-user.h"
+static inline bool vu_has_feature(VuDev *dev, unsigned int fbit);
+
static inline bool vu_access_is_big_endian(VuDev *dev)
{
+ /*
+ * TODO: can probably be removed as the fencing is already done in
+ * `vu_set_features_exec`
+ */
+ assert(vu_has_feature(dev, VIRTIO_F_VERSION_1));
+
/* Devices conforming to VIRTIO 1.0 or later are always LE. */
return false;
}
@@ -540,6 +540,12 @@ vu_set_features_exec(VuDev *dev, VhostUserMsg *vmsg)
DPRINT("u64: 0x%016"PRIx64"\n", vmsg->payload.u64);
dev->features = vmsg->payload.u64;
+ if (!vu_has_feature(dev, VIRTIO_F_VERSION_1)) {
+ /* We only support devices conforming to VIRTIO 1.0 or
+ * later */
+ vu_panic(dev, "virtio legacy devices aren't supported by libvhost-user");
+ return false;
+ }
if (!(dev->features & VHOST_USER_F_PROTOCOL_FEATURES)) {
vu_set_enable_all_rings(dev, true);
libvhost-user has no support for legacy virtio devices therefore let's fence them. Signed-off-by: Marc Hartmayer <mhartmay@linux.ibm.com> --- contrib/libvhost-user/libvhost-access.h | 10 ++++++++++ contrib/libvhost-user/libvhost-user.c | 6 ++++++ 2 files changed, 16 insertions(+)