RDMA: Manual changes for sysfs_emit and neatening
authorJoe Perches <joe@perches.com>
Thu, 8 Oct 2020 02:36:26 +0000 (19:36 -0700)
committerJason Gunthorpe <jgg@nvidia.com>
Sat, 31 Oct 2020 00:03:52 +0000 (21:03 -0300)
Make changes to use sysfs_emit in the RDMA code as cocci scripts can not
be written to handle _all_ the possible variants of various sprintf family
uses in sysfs show functions.

While there, make the code more legible and update its style to be more
like the typical kernel styles.

Miscellanea:

o Use intermediate pointers for dereferences
o Add and use string lookup functions
o return early when any intermediate call fails so normal return is
  at the bottom of the function
o mlx4/mcg.c:sysfs_show_group: use scnprintf to format intermediate strings

Link: https://lore.kernel.org/r/f5c9e4c9d8dafca1b7b70bd597ee7f8f219c31c8.1602122880.git.joe@perches.com
Signed-off-by: Joe Perches <joe@perches.com>
Acked-by: Jack Wang <jinpu.wang@cloud.ionos.com>
Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
drivers/infiniband/core/sysfs.c
drivers/infiniband/hw/hfi1/sysfs.c
drivers/infiniband/hw/mlx4/main.c
drivers/infiniband/hw/mlx4/mcg.c
drivers/infiniband/hw/mlx4/sysfs.c
drivers/infiniband/hw/mthca/mthca_provider.c
drivers/infiniband/hw/qib/qib_sysfs.c
drivers/infiniband/hw/usnic/usnic_ib_sysfs.c
drivers/infiniband/ulp/srp/ib_srp.c

index 4e335fc..4dd803f 100644 (file)
@@ -1224,29 +1224,34 @@ err_put:
        return ret;
 }
 
-static ssize_t node_type_show(struct device *device,
-                             struct device_attribute *attr, char *buf)
+static const char *node_type_string(int node_type)
 {
-       struct ib_device *dev = rdma_device_to_ibdev(device);
-
-       switch (dev->node_type) {
+       switch (node_type) {
        case RDMA_NODE_IB_CA:
-               return sysfs_emit(buf, "%d: CA\n", dev->node_type);
+               return "CA";
+       case RDMA_NODE_IB_SWITCH:
+               return "switch";
+       case RDMA_NODE_IB_ROUTER:
+               return "router";
        case RDMA_NODE_RNIC:
-               return sysfs_emit(buf, "%d: RNIC\n", dev->node_type);
+               return "RNIC";
        case RDMA_NODE_USNIC:
-               return sysfs_emit(buf, "%d: usNIC\n", dev->node_type);
+               return "usNIC";
        case RDMA_NODE_USNIC_UDP:
-               return sysfs_emit(buf, "%d: usNIC UDP\n", dev->node_type);
+               return "usNIC UDP";
        case RDMA_NODE_UNSPECIFIED:
-               return sysfs_emit(buf, "%d: unspecified\n", dev->node_type);
-       case RDMA_NODE_IB_SWITCH:
-               return sysfs_emit(buf, "%d: switch\n", dev->node_type);
-       case RDMA_NODE_IB_ROUTER:
-               return sysfs_emit(buf, "%d: router\n", dev->node_type);
-       default:
-               return sysfs_emit(buf, "%d: <unknown>\n", dev->node_type);
+               return "unspecified";
        }
+       return "<unknown>";
+}
+
+static ssize_t node_type_show(struct device *device,
+                             struct device_attribute *attr, char *buf)
+{
+       struct ib_device *dev = rdma_device_to_ibdev(device);
+
+       return sysfs_emit(buf, "%d: %s\n", dev->node_type,
+                         node_type_string(dev->node_type));
 }
 static DEVICE_ATTR_RO(node_type);
 
@@ -1254,13 +1259,13 @@ static ssize_t sys_image_guid_show(struct device *device,
                                   struct device_attribute *dev_attr, char *buf)
 {
        struct ib_device *dev = rdma_device_to_ibdev(device);
+       __be16 *guid = (__be16 *)&dev->attrs.sys_image_guid;
 
-       return sysfs_emit(
-               buf, "%04x:%04x:%04x:%04x\n",
-               be16_to_cpu(((__be16 *)&dev->attrs.sys_image_guid)[0]),
-               be16_to_cpu(((__be16 *)&dev->attrs.sys_image_guid)[1]),
-               be16_to_cpu(((__be16 *)&dev->attrs.sys_image_guid)[2]),
-               be16_to_cpu(((__be16 *)&dev->attrs.sys_image_guid)[3]));
+       return sysfs_emit(buf, "%04x:%04x:%04x:%04x\n",
+                         be16_to_cpu(guid[0]),
+                         be16_to_cpu(guid[1]),
+                         be16_to_cpu(guid[2]),
+                         be16_to_cpu(guid[3]));
 }
 static DEVICE_ATTR_RO(sys_image_guid);
 
@@ -1268,12 +1273,13 @@ static ssize_t node_guid_show(struct device *device,
                              struct device_attribute *attr, char *buf)
 {
        struct ib_device *dev = rdma_device_to_ibdev(device);
+       __be16 *node_guid = (__be16 *)&dev->node_guid;
 
        return sysfs_emit(buf, "%04x:%04x:%04x:%04x\n",
-                         be16_to_cpu(((__be16 *)&dev->node_guid)[0]),
-                         be16_to_cpu(((__be16 *)&dev->node_guid)[1]),
-                         be16_to_cpu(((__be16 *)&dev->node_guid)[2]),
-                         be16_to_cpu(((__be16 *)&dev->node_guid)[3]));
+                         be16_to_cpu(node_guid[0]),
+                         be16_to_cpu(node_guid[1]),
+                         be16_to_cpu(node_guid[2]),
+                         be16_to_cpu(node_guid[3]));
 }
 static DEVICE_ATTR_RO(node_guid);
 
@@ -1309,10 +1315,11 @@ static ssize_t fw_ver_show(struct device *device, struct device_attribute *attr,
                           char *buf)
 {
        struct ib_device *dev = rdma_device_to_ibdev(device);
+       char version[IB_FW_VERSION_NAME_MAX] = {};
+
+       ib_get_device_fw_str(dev, version);
 
-       ib_get_device_fw_str(dev, buf);
-       strlcat(buf, "\n", IB_FW_VERSION_NAME_MAX);
-       return strlen(buf);
+       return sysfs_emit(buf, "%s\n", version);
 }
 static DEVICE_ATTR_RO(fw_ver);
 
index e2a88f3..9a695e1 100644 (file)
@@ -510,13 +510,11 @@ static ssize_t board_id_show(struct device *device,
        struct hfi1_ibdev *dev =
                rdma_device_to_drv_device(device, struct hfi1_ibdev, rdi.ibdev);
        struct hfi1_devdata *dd = dd_from_dev(dev);
-       int ret;
 
        if (!dd->boardname)
-               ret = -EINVAL;
-       else
-               ret = sysfs_emit(buf, "%s\n", dd->boardname);
-       return ret;
+               return -EINVAL;
+
+       return sysfs_emit(buf, "%s\n", dd->boardname);
 }
 static DEVICE_ATTR_RO(board_id);
 
@@ -570,6 +568,7 @@ static ssize_t serial_show(struct device *device,
                rdma_device_to_drv_device(device, struct hfi1_ibdev, rdi.ibdev);
        struct hfi1_devdata *dd = dd_from_dev(dev);
 
+       /* dd->serial is already newline terminated in chip.c */
        return sysfs_emit(buf, "%s", dd->serial);
 }
 static DEVICE_ATTR_RO(serial);
@@ -598,9 +597,8 @@ static DEVICE_ATTR_WO(chip_reset);
  * Convert the reported temperature from an integer (reported in
  * units of 0.25C) to a floating point number.
  */
-#define temp2str(temp, buf, size, idx)                                 \
-       scnprintf((buf) + (idx), (size) - (idx), "%u.%02u ",            \
-                             ((temp) >> 2), ((temp) & 0x3) * 25)
+#define temp_d(t) ((t) >> 2)
+#define temp_f(t) (((t)&0x3) * 25u)
 
 /*
  * Dump tempsense values, in decimal, to ease shell-scripts.
@@ -615,19 +613,17 @@ static ssize_t tempsense_show(struct device *device,
        int ret;
 
        ret = hfi1_tempsense_rd(dd, &temp);
-       if (!ret) {
-               int idx = 0;
-
-               idx += temp2str(temp.curr, buf, PAGE_SIZE, idx);
-               idx += temp2str(temp.lo_lim, buf, PAGE_SIZE, idx);
-               idx += temp2str(temp.hi_lim, buf, PAGE_SIZE, idx);
-               idx += temp2str(temp.crit_lim, buf, PAGE_SIZE, idx);
-               idx += scnprintf(buf + idx, PAGE_SIZE - idx,
-                               "%u %u %u\n", temp.triggers & 0x1,
-                               temp.triggers & 0x2, temp.triggers & 0x4);
-               ret = idx;
-       }
-       return ret;
+       if (ret)
+               return ret;
+
+       return sysfs_emit(buf, "%u.%02u %u.%02u %u.%02u %u.%02u %u %u %u\n",
+                         temp_d(temp.curr), temp_f(temp.curr),
+                         temp_d(temp.lo_lim), temp_f(temp.lo_lim),
+                         temp_d(temp.hi_lim), temp_f(temp.hi_lim),
+                         temp_d(temp.crit_lim), temp_f(temp.crit_lim),
+                         temp.triggers & 0x1,
+                         temp.triggers & 0x2,
+                         temp.triggers & 0x4);
 }
 static DEVICE_ATTR_RO(tempsense);
 
index 2ac9328..f0864f4 100644 (file)
@@ -2024,6 +2024,7 @@ static ssize_t hca_type_show(struct device *device,
 {
        struct mlx4_ib_dev *dev =
                rdma_device_to_drv_device(device, struct mlx4_ib_dev, ib_dev);
+
        return sysfs_emit(buf, "MT%d\n", dev->dev->persist->pdev->device);
 }
 static DEVICE_ATTR_RO(hca_type);
@@ -2033,6 +2034,7 @@ static ssize_t hw_rev_show(struct device *device,
 {
        struct mlx4_ib_dev *dev =
                rdma_device_to_drv_device(device, struct mlx4_ib_dev, ib_dev);
+
        return sysfs_emit(buf, "%x\n", dev->dev->rev_id);
 }
 static DEVICE_ATTR_RO(hw_rev);
index 5e4ec97..33f525b 100644 (file)
@@ -988,53 +988,63 @@ int mlx4_ib_mcg_multiplex_handler(struct ib_device *ibdev, int port,
 }
 
 static ssize_t sysfs_show_group(struct device *dev,
-               struct device_attribute *attr, char *buf)
+                               struct device_attribute *attr, char *buf)
 {
        struct mcast_group *group =
                container_of(attr, struct mcast_group, dentry);
        struct mcast_req *req = NULL;
-       char pending_str[40];
        char state_str[40];
-       ssize_t len = 0;
-       int f;
+       char pending_str[40];
+       int len;
+       int i;
+       u32 hoplimit;
 
        if (group->state == MCAST_IDLE)
-               sprintf(state_str, "%s", get_state_string(group->state));
+               scnprintf(state_str, sizeof(state_str), "%s",
+                         get_state_string(group->state));
        else
-               sprintf(state_str, "%s(TID=0x%llx)",
-                               get_state_string(group->state),
-                               be64_to_cpu(group->last_req_tid));
+               scnprintf(state_str, sizeof(state_str), "%s(TID=0x%llx)",
+                         get_state_string(group->state),
+                         be64_to_cpu(group->last_req_tid));
+
        if (list_empty(&group->pending_list)) {
-               sprintf(pending_str, "No");
+               scnprintf(pending_str, sizeof(pending_str), "No");
        } else {
-               req = list_first_entry(&group->pending_list, struct mcast_req, group_list);
-               sprintf(pending_str, "Yes(TID=0x%llx)",
-                               be64_to_cpu(req->sa_mad.mad_hdr.tid));
+               req = list_first_entry(&group->pending_list, struct mcast_req,
+                                      group_list);
+               scnprintf(pending_str, sizeof(pending_str), "Yes(TID=0x%llx)",
+                         be64_to_cpu(req->sa_mad.mad_hdr.tid));
        }
-       len += sprintf(buf + len, "%1d [%02d,%02d,%02d] %4d %4s %5s     ",
-                       group->rec.scope_join_state & 0xf,
-                       group->members[2], group->members[1], group->members[0],
-                       atomic_read(&group->refcount),
-                       pending_str,
-                       state_str);
-       for (f = 0; f < MAX_VFS; ++f)
-               if (group->func[f].state == MCAST_MEMBER)
-                       len += sprintf(buf + len, "%d[%1x] ",
-                                       f, group->func[f].join_state);
-
-       len += sprintf(buf + len, "\t\t(%4hx %4x %2x %2x %2x %2x %2x "
-               "%4x %4x %2x %2x)\n",
-               be16_to_cpu(group->rec.pkey),
-               be32_to_cpu(group->rec.qkey),
-               (group->rec.mtusel_mtu & 0xc0) >> 6,
-               group->rec.mtusel_mtu & 0x3f,
-               group->rec.tclass,
-               (group->rec.ratesel_rate & 0xc0) >> 6,
-               group->rec.ratesel_rate & 0x3f,
-               (be32_to_cpu(group->rec.sl_flowlabel_hoplimit) & 0xf0000000) >> 28,
-               (be32_to_cpu(group->rec.sl_flowlabel_hoplimit) & 0x0fffff00) >> 8,
-               be32_to_cpu(group->rec.sl_flowlabel_hoplimit) & 0x000000ff,
-               group->rec.proxy_join);
+
+       len = sysfs_emit(buf, "%1d [%02d,%02d,%02d] %4d %4s %5s     ",
+                        group->rec.scope_join_state & 0xf,
+                        group->members[2],
+                        group->members[1],
+                        group->members[0],
+                        atomic_read(&group->refcount),
+                        pending_str,
+                        state_str);
+
+       for (i = 0; i < MAX_VFS; i++) {
+               if (group->func[i].state == MCAST_MEMBER)
+                       len += sysfs_emit_at(buf, len, "%d[%1x] ", i,
+                                            group->func[i].join_state);
+       }
+
+       hoplimit = be32_to_cpu(group->rec.sl_flowlabel_hoplimit);
+       len += sysfs_emit_at(buf, len,
+                            "\t\t(%4hx %4x %2x %2x %2x %2x %2x %4x %4x %2x %2x)\n",
+                            be16_to_cpu(group->rec.pkey),
+                            be32_to_cpu(group->rec.qkey),
+                            (group->rec.mtusel_mtu & 0xc0) >> 6,
+                            (group->rec.mtusel_mtu & 0x3f),
+                            group->rec.tclass,
+                            (group->rec.ratesel_rate & 0xc0) >> 6,
+                            (group->rec.ratesel_rate & 0x3f),
+                            (hoplimit & 0xf0000000) >> 28,
+                            (hoplimit & 0x0fffff00) >> 8,
+                            (hoplimit & 0x000000ff),
+                            group->rec.proxy_join);
 
        return len;
 }
index 22ae363..0279b78 100644 (file)
@@ -117,22 +117,24 @@ static ssize_t show_port_gid(struct device *dev,
        struct mlx4_ib_iov_port *port = mlx4_ib_iov_dentry->ctx;
        struct mlx4_ib_dev *mdev = port->dev;
        union ib_gid gid;
-       ssize_t ret;
+       int ret;
+       __be16 *raw;
 
        ret = __mlx4_ib_query_gid(&mdev->ib_dev, port->num,
                                  mlx4_ib_iov_dentry->entry_num, &gid, 1);
        if (ret)
                return ret;
-       ret = sysfs_emit(buf, "%04x:%04x:%04x:%04x:%04x:%04x:%04x:%04x\n",
-                        be16_to_cpu(((__be16 *)gid.raw)[0]),
-                        be16_to_cpu(((__be16 *)gid.raw)[1]),
-                        be16_to_cpu(((__be16 *)gid.raw)[2]),
-                        be16_to_cpu(((__be16 *)gid.raw)[3]),
-                        be16_to_cpu(((__be16 *)gid.raw)[4]),
-                        be16_to_cpu(((__be16 *)gid.raw)[5]),
-                        be16_to_cpu(((__be16 *)gid.raw)[6]),
-                        be16_to_cpu(((__be16 *)gid.raw)[7]));
-       return ret;
+
+       raw = (__be16 *)gid.raw;
+       return sysfs_emit(buf, "%04x:%04x:%04x:%04x:%04x:%04x:%04x:%04x\n",
+                         be16_to_cpu(raw[0]),
+                         be16_to_cpu(raw[1]),
+                         be16_to_cpu(raw[2]),
+                         be16_to_cpu(raw[3]),
+                         be16_to_cpu(raw[4]),
+                         be16_to_cpu(raw[5]),
+                         be16_to_cpu(raw[6]),
+                         be16_to_cpu(raw[7]));
 }
 
 static ssize_t show_phys_port_pkey(struct device *dev,
@@ -542,14 +544,10 @@ static ssize_t sysfs_show_smi_enabled(struct device *dev,
 {
        struct mlx4_port *p =
                container_of(attr, struct mlx4_port, smi_enabled);
-       ssize_t len = 0;
 
-       if (mlx4_vf_smi_enabled(p->dev->dev, p->slave, p->port_num))
-               len = sysfs_emit(buf, "%d\n", 1);
-       else
-               len = sysfs_emit(buf, "%d\n", 0);
-
-       return len;
+       return sysfs_emit(buf, "%d\n",
+                         !!mlx4_vf_smi_enabled(p->dev->dev, p->slave,
+                                               p->port_num));
 }
 
 static ssize_t sysfs_show_enable_smi_admin(struct device *dev,
@@ -558,14 +556,10 @@ static ssize_t sysfs_show_enable_smi_admin(struct device *dev,
 {
        struct mlx4_port *p =
                container_of(attr, struct mlx4_port, enable_smi_admin);
-       ssize_t len = 0;
-
-       if (mlx4_vf_get_enable_smi_admin(p->dev->dev, p->slave, p->port_num))
-               len = sysfs_emit(buf, "%d\n", 1);
-       else
-               len = sysfs_emit(buf, "%d\n", 0);
 
-       return len;
+       return sysfs_emit(buf, "%d\n",
+                         !!mlx4_vf_get_enable_smi_admin(p->dev->dev, p->slave,
+                                                        p->port_num));
 }
 
 static ssize_t sysfs_store_enable_smi_admin(struct device *dev,
index 12179a4..1a3dd07 100644 (file)
@@ -965,25 +965,30 @@ static ssize_t hw_rev_show(struct device *device,
 }
 static DEVICE_ATTR_RO(hw_rev);
 
-static ssize_t hca_type_show(struct device *device,
-                            struct device_attribute *attr, char *buf)
+static const char *hca_type_string(int hca_type)
 {
-       struct mthca_dev *dev =
-               rdma_device_to_drv_device(device, struct mthca_dev, ib_dev);
-
-       switch (dev->pdev->device) {
+       switch (hca_type) {
        case PCI_DEVICE_ID_MELLANOX_TAVOR:
-               return sysfs_emit(buf, "MT23108\n");
+               return "MT23108";
        case PCI_DEVICE_ID_MELLANOX_ARBEL_COMPAT:
-               return sysfs_emit(buf, "MT25208 (MT23108 compat mode)\n");
+               return "MT25208 (MT23108 compat mode)";
        case PCI_DEVICE_ID_MELLANOX_ARBEL:
-               return sysfs_emit(buf, "MT25208\n");
+               return "MT25208";
        case PCI_DEVICE_ID_MELLANOX_SINAI:
        case PCI_DEVICE_ID_MELLANOX_SINAI_OLD:
-               return sysfs_emit(buf, "MT25204\n");
-       default:
-               return sysfs_emit(buf, "unknown\n");
+               return "MT25204";
        }
+
+       return "unknown";
+}
+
+static ssize_t hca_type_show(struct device *device,
+                            struct device_attribute *attr, char *buf)
+{
+       struct mthca_dev *dev =
+               rdma_device_to_drv_device(device, struct mthca_dev, ib_dev);
+
+       return sysfs_emit(buf, "%s\n", hca_type_string(dev->pdev->device));
 }
 static DEVICE_ATTR_RO(hca_type);
 
index 818282b..3761f21 100644 (file)
@@ -575,13 +575,10 @@ static ssize_t hca_type_show(struct device *device,
        struct qib_ibdev *dev =
                rdma_device_to_drv_device(device, struct qib_ibdev, rdi.ibdev);
        struct qib_devdata *dd = dd_from_dev(dev);
-       int ret;
 
        if (!dd->boardname)
-               ret = -EINVAL;
-       else
-               ret = sysfs_emit(buf, "%s\n", dd->boardname);
-       return ret;
+               return -EINVAL;
+       return sysfs_emit(buf, "%s\n", dd->boardname);
 }
 static DEVICE_ATTR_RO(hca_type);
 static DEVICE_ATTR(board_id, 0444, hca_type_show, NULL);
@@ -647,17 +644,16 @@ static ssize_t nfreectxts_show(struct device *device,
 }
 static DEVICE_ATTR_RO(nfreectxts);
 
-static ssize_t serial_show(struct device *device,
-                          struct device_attribute *attr, char *buf)
+static ssize_t serial_show(struct device *device, struct device_attribute *attr,
+                          char *buf)
 {
        struct qib_ibdev *dev =
                rdma_device_to_drv_device(device, struct qib_ibdev, rdi.ibdev);
        struct qib_devdata *dd = dd_from_dev(dev);
+       const u8 *end = memchr(dd->serial, 0, ARRAY_SIZE(dd->serial));
+       int size = end ? end - dd->serial : ARRAY_SIZE(dd->serial);
 
-       buf[sizeof(dd->serial)] = '\0';
-       memcpy(buf, dd->serial, sizeof(dd->serial));
-       strcat(buf, "\n");
-       return strlen(buf);
+       return sysfs_emit(buf, ".%*s\n", size, dd->serial);
 }
 static DEVICE_ATTR_RO(serial);
 
@@ -690,26 +686,26 @@ static ssize_t tempsense_show(struct device *device,
        struct qib_ibdev *dev =
                rdma_device_to_drv_device(device, struct qib_ibdev, rdi.ibdev);
        struct qib_devdata *dd = dd_from_dev(dev);
-       int ret;
-       int idx;
+       int i;
        u8 regvals[8];
 
-       ret = -ENXIO;
-       for (idx = 0; idx < 8; ++idx) {
-               if (idx == 6)
+       for (i = 0; i < 8; i++) {
+               int ret;
+
+               if (i == 6)
                        continue;
-               ret = dd->f_tempsense_rd(dd, idx);
+               ret = dd->f_tempsense_rd(dd, i);
                if (ret < 0)
-                       break;
-               regvals[idx] = ret;
+                       return ret;     /* return error on bad read */
+               regvals[i] = ret;
        }
-       if (idx == 8)
-               ret = sysfs_emit(buf, "%d %d %02X %02X %d %d\n",
-                                *(signed char *)(regvals),
-                                *(signed char *)(regvals + 1), regvals[2],
-                                regvals[3], *(signed char *)(regvals + 5),
-                                *(signed char *)(regvals + 7));
-       return ret;
+       return sysfs_emit(buf, "%d %d %02X %02X %d %d\n",
+                         (signed char)regvals[0],
+                         (signed char)regvals[1],
+                         regvals[2],
+                         regvals[3],
+                         (signed char)regvals[5],
+                         (signed char)regvals[7]);
 }
 static DEVICE_ATTR_RO(tempsense);
 
index 0af72fc..250948c 100644 (file)
@@ -57,7 +57,7 @@ static ssize_t board_id_show(struct device *device,
        subsystem_device_id = us_ibdev->pdev->subsystem_device;
        mutex_unlock(&us_ibdev->usdev_lock);
 
-       return sysfs_emit(buf, "%hu\n", subsystem_device_id);
+       return sysfs_emit(buf, "%u\n", subsystem_device_id);
 }
 static DEVICE_ATTR_RO(board_id);
 
@@ -69,19 +69,13 @@ config_show(struct device *device, struct device_attribute *attr, char *buf)
 {
        struct usnic_ib_dev *us_ibdev =
                rdma_device_to_drv_device(device, struct usnic_ib_dev, ib_dev);
-       char *ptr;
-       unsigned left;
-       unsigned n;
        enum usnic_vnic_res_type res_type;
-
-       /* Buffer space limit is 1 page */
-       ptr = buf;
-       left = PAGE_SIZE;
+       int len;
 
        mutex_lock(&us_ibdev->usdev_lock);
        if (kref_read(&us_ibdev->vf_cnt) > 0) {
                char *busname;
-
+               char *sep = "";
                /*
                 * bus name seems to come with annoying prefix.
                 * Remove it if it is predictable
@@ -90,39 +84,35 @@ config_show(struct device *device, struct device_attribute *attr, char *buf)
                if (strncmp(busname, "PCI Bus ", 8) == 0)
                        busname += 8;
 
-               n = scnprintf(ptr, left,
-                       "%s: %s:%d.%d, %s, %pM, %u VFs\n Per VF:",
-                       dev_name(&us_ibdev->ib_dev.dev),
-                       busname,
-                       PCI_SLOT(us_ibdev->pdev->devfn),
-                       PCI_FUNC(us_ibdev->pdev->devfn),
-                       netdev_name(us_ibdev->netdev),
-                       us_ibdev->ufdev->mac,
-                       kref_read(&us_ibdev->vf_cnt));
-               UPDATE_PTR_LEFT(n, ptr, left);
+               len = sysfs_emit(buf, "%s: %s:%d.%d, %s, %pM, %u VFs\n",
+                                dev_name(&us_ibdev->ib_dev.dev),
+                                busname,
+                                PCI_SLOT(us_ibdev->pdev->devfn),
+                                PCI_FUNC(us_ibdev->pdev->devfn),
+                                netdev_name(us_ibdev->netdev),
+                                us_ibdev->ufdev->mac,
+                                kref_read(&us_ibdev->vf_cnt));
 
+               len += sysfs_emit_at(buf, len, " Per VF:");
                for (res_type = USNIC_VNIC_RES_TYPE_EOL;
-                               res_type < USNIC_VNIC_RES_TYPE_MAX;
-                               res_type++) {
+                    res_type < USNIC_VNIC_RES_TYPE_MAX; res_type++) {
                        if (us_ibdev->vf_res_cnt[res_type] == 0)
                                continue;
-                       n = scnprintf(ptr, left, " %d %s%s",
-                               us_ibdev->vf_res_cnt[res_type],
-                               usnic_vnic_res_type_to_str(res_type),
-                               (res_type < (USNIC_VNIC_RES_TYPE_MAX - 1)) ?
-                                "," : "");
-                       UPDATE_PTR_LEFT(n, ptr, left);
+                       len += sysfs_emit_at(buf, len, "%s %d %s",
+                                            sep,
+                                            us_ibdev->vf_res_cnt[res_type],
+                                            usnic_vnic_res_type_to_str(res_type));
+                       sep = ",";
                }
-               n = scnprintf(ptr, left, "\n");
-               UPDATE_PTR_LEFT(n, ptr, left);
+               len += sysfs_emit_at(buf, len, "\n");
        } else {
-               n = scnprintf(ptr, left, "%s: no VFs\n",
-                               dev_name(&us_ibdev->ib_dev.dev));
-               UPDATE_PTR_LEFT(n, ptr, left);
+               len = sysfs_emit(buf, "%s: no VFs\n",
+                                dev_name(&us_ibdev->ib_dev.dev));
        }
+
        mutex_unlock(&us_ibdev->usdev_lock);
 
-       return ptr - buf;
+       return len;
 }
 static DEVICE_ATTR_RO(config);
 
index f686d1d..ee22ea4 100644 (file)
@@ -2925,6 +2925,7 @@ static ssize_t show_pkey(struct device *dev, struct device_attribute *attr,
 
        if (target->using_rdma_cm)
                return -ENOENT;
+
        return sysfs_emit(buf, "0x%04x\n", be16_to_cpu(target->ib_cm.pkey));
 }
 
@@ -2944,6 +2945,7 @@ static ssize_t show_dgid(struct device *dev, struct device_attribute *attr,
 
        if (target->using_rdma_cm)
                return -ENOENT;
+
        return sysfs_emit(buf, "%pI6\n", ch->ib_cm.path.dgid.raw);
 }
 
@@ -2954,6 +2956,7 @@ static ssize_t show_orig_dgid(struct device *dev,
 
        if (target->using_rdma_cm)
                return -ENOENT;
+
        return sysfs_emit(buf, "%pI6\n", target->ib_cm.orig_dgid.raw);
 }
 
@@ -2968,6 +2971,7 @@ static ssize_t show_req_lim(struct device *dev,
                ch = &target->ch[i];
                req_lim = min(req_lim, ch->req_lim);
        }
+
        return sysfs_emit(buf, "%d\n", req_lim);
 }