Thread (1 message) 1 message, 1 author, 2021-12-13

Re: [PATCH v2 07/10] vdpa: Add support for returning device configuration information

From: Si-Wei Liu <hidden>
Date: 2021-12-13 23:49:33


On 12/13/2021 6:42 AM, Eli Cohen wrote:
quoted hunk
Add netlink attribute to store flags indicating current state of the
device.
In addition, introduce a flag to indicate whether control virtqueue is
used.

This indication can be retrieved by:

vdpa dev config show vdpa-a
vdpa-a: mac 00:00:00:00:88:88 link up link_announce false max_vq_pairs 1
	mtu 1500 ctrl_vq yes

Signed-off-by: Eli Cohen <redacted>

----
V1 -> V2
Patch was changed to return only an indication of ctrl VQ
---
  drivers/vdpa/vdpa.c       | 17 +++++++++++++++++
  include/uapi/linux/vdpa.h |  8 ++++++++
  2 files changed, 25 insertions(+)
diff --git a/drivers/vdpa/vdpa.c b/drivers/vdpa/vdpa.c
index 7b7bef7673b4..130a8d4aeaed 100644
--- a/drivers/vdpa/vdpa.c
+++ b/drivers/vdpa/vdpa.c
@@ -787,6 +787,19 @@ static int vdpa_nl_cmd_dev_get_dumpit(struct sk_buff *msg, struct netlink_callba
  	return msg->len;
  }
  
+static int vdpa_dev_net_ctrl_vq_fill(struct vdpa_device *vdev,
+				     struct sk_buff *msg,
+				     struct virtio_net_config *config,
+				     u64 features)
+{
+	if (!(features & BIT_ULL(VIRTIO_NET_F_CTRL_VQ)))
+		return 0;
+
+	/* currently the only flag can be returned */
+	return nla_put_u64_64bit(msg, VDPA_ATTR_DEV_FLAGS,
+				 BIT_ULL(VDPA_DEV_ATTR_CVQ), VDPA_ATTR_PAD);
+}
+
  static int vdpa_dev_net_mq_config_fill(struct vdpa_device *vdev,
  				       struct sk_buff *msg, u64 features,
  				       const struct virtio_net_config *config)
@@ -805,6 +818,7 @@ static int vdpa_dev_net_config_fill(struct vdpa_device *vdev, struct sk_buff *ms
  	struct virtio_net_config config = {};
  	u64 features;
  	u16 val_u16;
+	int err;
  
  	vdpa_get_config(vdev, 0, &config, sizeof(config));
  
@@ -821,6 +835,9 @@ static int vdpa_dev_net_config_fill(struct vdpa_device *vdev, struct sk_buff *ms
  		return -EMSGSIZE;
  
  	features = vdev->config->get_driver_features(vdev);
+	err = vdpa_dev_net_ctrl_vq_fill(vdev, msg, &config, features);
+	if (err)
+		return err;
  
  	return vdpa_dev_net_mq_config_fill(vdev, msg, features, &config);
  }
diff --git a/include/uapi/linux/vdpa.h b/include/uapi/linux/vdpa.h
index a252f06f9dfd..23b854e3e5e2 100644
--- a/include/uapi/linux/vdpa.h
+++ b/include/uapi/linux/vdpa.h
@@ -20,9 +20,16 @@ enum vdpa_command {
  	VDPA_CMD_DEV_CONFIG_GET,	/* can dump */
  };
  
+enum {
+	VDPA_DEV_ATTR_CVQ,
+};
+
  enum vdpa_attr {
  	VDPA_ATTR_UNSPEC,
  
+	/* Pad attribute for 64b alignment */
+	VDPA_ATTR_PAD = VDPA_ATTR_UNSPEC,
+
  	/* bus name (optional) + dev name together make the parent device handle */
  	VDPA_ATTR_MGMTDEV_BUS_NAME,		/* string */
  	VDPA_ATTR_MGMTDEV_DEV_NAME,		/* string */
@@ -34,6 +41,7 @@ enum vdpa_attr {
  	VDPA_ATTR_DEV_MAX_VQS,			/* u32 */
  	VDPA_ATTR_DEV_MAX_VQ_SIZE,		/* u16 */
  	VDPA_ATTR_DEV_MIN_VQ_SIZE,		/* u16 */
+	VDPA_ATTR_DEV_FLAGS,			/* u64 */
Adding new attr here would break existing userspace that is compiled 
with the older value. Need to append to the end.

-Siwei
  
  	VDPA_ATTR_DEV_NET_CFG_MACADDR,		/* binary */
  	VDPA_ATTR_DEV_NET_STATUS,		/* u8 */
_______________________________________________
Virtualization mailing list
Virtualization@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/virtualization
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help