---
include/net/vhost-vdpa.h | 1 +
hw/net/vhost_net.c | 16 ++++++++++++++--
net/vhost-vdpa.c | 3 +++
3 files changed, 18 insertions(+), 2 deletions(-)
diff --git a/include/net/vhost-vdpa.h b/include/net/vhost-vdpa.h
index b81f9a6f2a..cfbcce6427 100644
--- a/include/net/vhost-vdpa.h
+++ b/include/net/vhost-vdpa.h
@@ -17,5 +17,6 @@
struct vhost_net *vhost_vdpa_get_vhost_net(NetClientState *nc);
extern const int vdpa_feature_bits[];
+extern const uint64_t vhost_vdpa_net_added_feature_bits;
#endif /* VHOST_VDPA_H */
diff --git a/hw/net/vhost_net.c b/hw/net/vhost_net.c
index d28f8b974b..7c15cc6e8f 100644
--- a/hw/net/vhost_net.c
+++ b/hw/net/vhost_net.c
@@ -109,10 +109,22 @@ static const int *vhost_net_get_feature_bits(struct
vhost_net *net)
return feature_bits;
}
+static uint64_t vhost_net_add_feature_bits(struct vhost_net *net)
+{
+ if (net->nc->info->type == NET_CLIENT_DRIVER_VHOST_VDPA) {
+ return vhost_vdpa_net_added_feature_bits;
+ }
+
+ return 0;
+}
+
uint64_t vhost_net_get_features(struct vhost_net *net, uint64_t features)
{
- return vhost_get_features(&net->dev, vhost_net_get_feature_bits(net),
- features);
+ uint64_t ret = vhost_get_features(&net->dev,
+ vhost_net_get_feature_bits(net),
+ features);
+
+ return ret | vhost_net_add_feature_bits(net);
}
int vhost_net_get_config(struct vhost_net *net, uint8_t *config,
uint32_t config_len)
diff --git a/net/vhost-vdpa.c b/net/vhost-vdpa.c
index 6d64000202..24d2857593 100644
--- a/net/vhost-vdpa.c
+++ b/net/vhost-vdpa.c
@@ -99,6 +99,9 @@ static const uint64_t vdpa_svq_device_features =
BIT_ULL(VIRTIO_NET_F_RSC_EXT) |
BIT_ULL(VIRTIO_NET_F_STANDBY);
+const uint64_t vhost_vdpa_net_added_feature_bits =
+ BIT_ULL(VIRTIO_NET_F_STATUS);
+
VHostNetState *vhost_vdpa_get_vhost_net(NetClientState *nc)
{
VhostVDPAState *s = DO_UPCAST(VhostVDPAState, nc, nc);