On Tue, Jan 02, 2024 at 04:44:32PM +0530, Srujana Challa wrote:
> Enables VIRTIO_F_NOTIFICATION_DATA and VIRTIO_F_IN_ORDER feature bits
> for vhost vdpa backend. Also adds code to consider all feature bits
> supported by vhost net client type for feature negotiation, so that
> vhost backend device supported features can be negotiated with guest.
>
> Signed-off-by: Srujana Challa <[email protected]>
> ---
> hw/net/vhost_net.c | 10 ++++++++++
> net/vhost-vdpa.c | 2 ++
> 2 files changed, 12 insertions(+)
>
> diff --git a/hw/net/vhost_net.c b/hw/net/vhost_net.c
> index e8e1661646..65ae8bcece 100644
> --- a/hw/net/vhost_net.c
> +++ b/hw/net/vhost_net.c
> @@ -117,6 +117,16 @@ static const int *vhost_net_get_feature_bits(struct
> vhost_net *net)
>
> uint64_t vhost_net_get_features(struct vhost_net *net, uint64_t features)
> {
> + const int *bit = vhost_net_get_feature_bits(net);
> +
> + /*
> + * Consider all feature bits for feature negotiation with vhost backend,
> + * so that all backend device supported features can be negotiated.
> + */
> + while (*bit != VHOST_INVALID_FEATURE_BIT) {
> + features |= (1ULL << *bit);
> + bit++;
> + }
> return vhost_get_features(&net->dev, vhost_net_get_feature_bits(net),
> features);
> }
I don't think we should do this part. With vdpa QEMU is in control of
which features are exposed and that is intentional since features are
often tied to other behaviour.
> diff --git a/net/vhost-vdpa.c b/net/vhost-vdpa.c
> index 3726ee5d67..51334fcfe2 100644
> --- a/net/vhost-vdpa.c
> +++ b/net/vhost-vdpa.c
> @@ -57,7 +57,9 @@ typedef struct VhostVDPAState {
> */
> const int vdpa_feature_bits[] = {
> VIRTIO_F_ANY_LAYOUT,
> + VIRTIO_F_IN_ORDER,
> VIRTIO_F_IOMMU_PLATFORM,
> + VIRTIO_F_NOTIFICATION_DATA,
> VIRTIO_F_NOTIFY_ON_EMPTY,
> VIRTIO_F_RING_PACKED,
> VIRTIO_F_RING_RESET,
> --
> 2.25.1