Now that qemu can handle and emulate it if the vdpa backend does not support it we can offer it always.
Signed-off-by: Eugenio Pérez <epere...@redhat.com> --- 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); -- 2.31.1