Message ID | 20200717092929.19453-4-mhartmay@linux.ibm.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | Enable virtio-fs on s390x | expand |
On Fri, Jul 17, 2020 at 11:29:29AM +0200, Marc Hartmayer wrote: > 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(+) > > diff --git a/contrib/libvhost-user/libvhost-access.h b/contrib/libvhost-user/libvhost-access.h > index 868ba3e7bfb8..aa505ea1ec02 100644 > --- a/contrib/libvhost-user/libvhost-access.h > +++ b/contrib/libvhost-user/libvhost-access.h > @@ -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)); Great, please drop it since the memory accesses are called from performance-critical code paths.
diff --git a/contrib/libvhost-user/libvhost-access.h b/contrib/libvhost-user/libvhost-access.h index 868ba3e7bfb8..aa505ea1ec02 100644 --- a/contrib/libvhost-user/libvhost-access.h +++ b/contrib/libvhost-user/libvhost-access.h @@ -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; } diff --git a/contrib/libvhost-user/libvhost-user.c b/contrib/libvhost-user/libvhost-user.c index 0214b04c5291..93c4503b1f53 100644 --- a/contrib/libvhost-user/libvhost-user.c +++ b/contrib/libvhost-user/libvhost-user.c @@ -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(+)