[dpdk-stable] [PATCH v2 2/3] virtio_user: don't set/get_status until FEATURES_OK
Adrian Moreno
amorenoz at redhat.com
Tue Oct 20 17:20:51 CEST 2020
According to the virtio spec, ACK and DRIVER status bits should be set
before feature negotiation.
However, until the protocol features are negotiated, the driver does not
know if the device actually supports the those vhost-user messages.
Therefore, until FEATURES_OK is set, the GET/SET_STATUS messages should
not be sent.
Fixes: 57912824615f ("net/virtio-user: support vhost status setting")
Cc: maxime.coquelin at redhat.com
Cc: stable at dpdk.org
Signed-off-by: Adrian Moreno <amorenoz at redhat.com>
---
drivers/net/virtio/virtio_user/vhost_user.c | 10 ++++++----
1 file changed, 6 insertions(+), 4 deletions(-)
diff --git a/drivers/net/virtio/virtio_user/vhost_user.c b/drivers/net/virtio/virtio_user/vhost_user.c
index ef290c357..450d77e92 100644
--- a/drivers/net/virtio/virtio_user/vhost_user.c
+++ b/drivers/net/virtio/virtio_user/vhost_user.c
@@ -278,8 +278,9 @@ vhost_user_sock(struct virtio_user_dev *dev,
switch (req) {
case VHOST_USER_GET_STATUS:
- if (!(dev->protocol_features &
- (1ULL << VHOST_USER_PROTOCOL_F_STATUS)))
+ if (!(dev->status & VIRTIO_CONFIG_STATUS_FEATURES_OK) ||
+ (!(dev->protocol_features &
+ (1ULL << VHOST_USER_PROTOCOL_F_STATUS))))
return 0;
/* Fallthrough */
case VHOST_USER_GET_FEATURES:
@@ -288,8 +289,9 @@ vhost_user_sock(struct virtio_user_dev *dev,
break;
case VHOST_USER_SET_STATUS:
- if (!(dev->protocol_features &
- (1ULL << VHOST_USER_PROTOCOL_F_STATUS)))
+ if (!(dev->status & VIRTIO_CONFIG_STATUS_FEATURES_OK) ||
+ (!(dev->protocol_features &
+ (1ULL << VHOST_USER_PROTOCOL_F_STATUS))))
return 0;
if (has_reply_ack)
--
2.26.2
More information about the stable
mailing list