RDMA/netlink: Export FW version
authorLeon Romanovsky <leonro@mellanox.com>
Tue, 27 Jun 2017 13:58:59 +0000 (16:58 +0300)
committerLeon Romanovsky <leon@kernel.org>
Thu, 10 Aug 2017 10:28:11 +0000 (13:28 +0300)
Add FW version to the device properties exported
by RDMA netlink, to be used by RDMAtool.

Signed-off-by: Leon Romanovsky <leonro@mellanox.com>
drivers/infiniband/core/nldev.c
include/uapi/rdma/rdma_netlink.h

index 94c1e49074f51249fe1b5c8dbe71a8ccd2b763cf..cdc970ca5a1b741f2a3e27a667700c1c0da6293f 100644 (file)
@@ -40,10 +40,14 @@ static const struct nla_policy nldev_policy[RDMA_NLDEV_ATTR_MAX] = {
        [RDMA_NLDEV_ATTR_DEV_NAME]      = { .type = NLA_NUL_STRING,
                                            .len = IB_DEVICE_NAME_MAX - 1},
        [RDMA_NLDEV_ATTR_PORT_INDEX]    = { .type = NLA_U32 },
+       [RDMA_NLDEV_ATTR_FW_VERSION]    = { .type = NLA_NUL_STRING,
+                                           .len = IB_FW_VERSION_NAME_MAX - 1},
 };
 
 static int fill_dev_info(struct sk_buff *msg, struct ib_device *device)
 {
+       char fw[IB_FW_VERSION_NAME_MAX];
+
        if (nla_put_u32(msg, RDMA_NLDEV_ATTR_DEV_INDEX, device->index))
                return -EMSGSIZE;
        if (nla_put_string(msg, RDMA_NLDEV_ATTR_DEV_NAME, device->name))
@@ -56,6 +60,11 @@ static int fill_dev_info(struct sk_buff *msg, struct ib_device *device)
                              device->attrs.device_cap_flags, 0))
                return -EMSGSIZE;
 
+       ib_get_device_fw_str(device, fw);
+       /* Device without FW has strlen(fw) */
+       if (strlen(fw) && nla_put_string(msg, RDMA_NLDEV_ATTR_FW_VERSION, fw))
+               return -EMSGSIZE;
+
        return 0;
 }
 
index 90de11db6580933ccded52eebb5f0c466641c1a0..5159858730b09438e5ada89bb97134c7c50dba27 100644 (file)
@@ -262,6 +262,10 @@ enum rdma_nldev_attr {
         */
        RDMA_NLDEV_ATTR_CAP_FLAGS,              /* u64 */
 
+       /*
+        * FW version
+        */
+       RDMA_NLDEV_ATTR_FW_VERSION,             /* string */
        RDMA_NLDEV_ATTR_MAX
 };
 #endif /* _UAPI_RDMA_NETLINK_H */