On 12/13/2021 6:42 AM, Eli Cohen wrote:
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 <elic@xxxxxxxxxx>
----
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@xxxxxxxxxxxxxxxxxxxxxxxxxx
https://lists.linuxfoundation.org/mailman/listinfo/virtualization