vdpa: Add support for returning device configuration information
authorEli Cohen <elic@nvidia.com>
Wed, 5 Jan 2022 11:46:40 +0000 (13:46 +0200)
committerMichael S. Tsirkin <mst@redhat.com>
Fri, 14 Jan 2022 23:50:53 +0000 (18:50 -0500)
Add netlink attribute to store the negotiated features. This can be used
by userspace to get the current state of the vdpa instance.

Examples:

$ vdpa dev config show vdpa-a
vdpa-a: mac 00:00:00:00:88:88 link up link_announce false max_vq_pairs 16 mtu 1500
  negotiated_features CSUM GUEST_CSUM MTU MAC HOST_TSO4 HOST_TSO6 STATUS \
  CTRL_VQ MQ CTRL_MAC_ADDR VERSION_1 ACCESS_PLATFORM

$ vdpa -j dev config show vdpa-a
{"config":{"vdpa-a":{"mac":"00:00:00:00:88:88","link ":"up","link_announce":false, \
 "max_vq_pairs":16,"mtu":1500,"negotiated_features":["CSUM","GUEST_CSUM","MTU","MAC", \
 "HOST_TSO4","HOST_TSO6","STATUS","CTRL_VQ","MQ","CTRL_MAC_ADDR","VERSION_1", \
 "ACCESS_PLATFORM"]}}}

$ vdpa -jp dev config show vdpa-a
{
    "config": {
        "vdpa-a": {
            "mac": "00:00:00:00:88:88",
            "link ": "up",
            "link_announce ": false,
            "max_vq_pairs": 16,
            "mtu": 1500,
            "negotiated_features": [
"CSUM","GUEST_CSUM","MTU","MAC","HOST_TSO4","HOST_TSO6","STATUS","CTRL_VQ","MQ", \
"CTRL_MAC_ADDR","VERSION_1","ACCESS_PLATFORM"
]
        }
    }
}

Signed-off-by: Eli Cohen <elic@nvidia.com>
Link: https://lore.kernel.org/r/20220105114646.577224-9-elic@nvidia.com
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
Acked-by: Jason Wang <jasowang@redhat.com>
drivers/vdpa/vdpa.c
include/uapi/linux/vdpa.h

index 96d31b8..60cf821 100644 (file)
@@ -846,6 +846,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);
+       if (nla_put_u64_64bit(msg, VDPA_ATTR_DEV_NEGOTIATED_FEATURES, features,
+                             VDPA_ATTR_PAD))
+               return -EMSGSIZE;
 
        return vdpa_dev_net_mq_config_fill(vdev, msg, features, &config);
 }
index a252f06..db3738e 100644 (file)
@@ -23,6 +23,9 @@ enum vdpa_command {
 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 */
@@ -40,6 +43,7 @@ enum vdpa_attr {
        VDPA_ATTR_DEV_NET_CFG_MAX_VQP,          /* u16 */
        VDPA_ATTR_DEV_NET_CFG_MTU,              /* u16 */
 
+       VDPA_ATTR_DEV_NEGOTIATED_FEATURES,      /* u64 */
        /* new attributes must be added above here */
        VDPA_ATTR_MAX,
 };