Parav Pandit
2022-Jun-13 20:36 UTC
[PATCH V2 5/6] vDPA: answer num of queue pairs = 1 to userspace when VIRTIO_NET_F_MQ == 0
> From: Zhu Lingshan <lingshan.zhu at intel.com> > Sent: Monday, June 13, 2022 6:17 AM > To: jasowang at redhat.com; mst at redhat.com > Cc: virtualization at lists.linux-foundation.org; netdev at vger.kernel.org; Parav > Pandit <parav at nvidia.com>; xieyongji at bytedance.com; > gautam.dawar at amd.com; Zhu Lingshan <lingshan.zhu at intel.com> > Subject: [PATCH V2 5/6] vDPA: answer num of queue pairs = 1 to userspace > when VIRTIO_NET_F_MQ == 0 > > If VIRTIO_NET_F_MQ == 0, the virtio device should have one queue pair, so > when userspace querying queue pair numbers, it should return mq=1 than > zero. > > Function vdpa_dev_net_config_fill() fills the attributions of the vDPA > devices, so that it should call vdpa_dev_net_mq_config_fill() so the > parameter in vdpa_dev_net_mq_config_fill() should be feature_device than > feature_driver for the vDPA devices themselves > > Before this change, when MQ = 0, iproute2 output: > $vdpa dev config show vdpa0 > vdpa0: mac 00:e8:ca:11:be:05 link up link_announce false max_vq_pairs 0 > mtu 1500 >Max_vq_pairs should not be printed when _MQ feature is not negotiated. Existing code that returns 0 is correct following this line of the spec. " The following driver-read-only field, max_virtqueue_pairs only exists if VIRTIO_NET_F_MQ or VIRTIO_- NET_F_RSS is set." The field doesn't exist when _MQ is not there. Hence, it should not be printed. Is _RSS offered and is that why you see it? If not a fix in the iproute2/vdpa should be done.> After applying this commit, when MQ = 0, iproute2 output: > $vdpa dev config show vdpa0 > vdpa0: mac 00:e8:ca:11:be:05 link up link_announce false max_vq_pairs 1 > mtu 1500 > > Signed-off-by: Zhu Lingshan <lingshan.zhu at intel.com> > --- > drivers/vdpa/vdpa.c | 7 ++++--- > 1 file changed, 4 insertions(+), 3 deletions(-) > > diff --git a/drivers/vdpa/vdpa.c b/drivers/vdpa/vdpa.c index > d76b22b2f7ae..846dd37f3549 100644 > --- a/drivers/vdpa/vdpa.c > +++ b/drivers/vdpa/vdpa.c > @@ -806,9 +806,10 @@ static int vdpa_dev_net_mq_config_fill(struct > vdpa_device *vdev, > u16 val_u16; > > if ((features & BIT_ULL(VIRTIO_NET_F_MQ)) == 0) > - return 0; > + val_u16 = 1; > + else > + val_u16 = __virtio16_to_cpu(true, config- > >max_virtqueue_pairs); > > - val_u16 = le16_to_cpu(config->max_virtqueue_pairs); > return nla_put_u16(msg, VDPA_ATTR_DEV_NET_CFG_MAX_VQP, > val_u16); } > > @@ -842,7 +843,7 @@ static int vdpa_dev_net_config_fill(struct > vdpa_device *vdev, struct sk_buff *ms > VDPA_ATTR_PAD)) > return -EMSGSIZE; > > - return vdpa_dev_net_mq_config_fill(vdev, msg, features_driver, > &config); > + return vdpa_dev_net_mq_config_fill(vdev, msg, features_device, > +&config); > } > > static int > -- > 2.31.1