PCI/sysfs: Use sysfs_emit() and sysfs_emit_at() in "show" functions
authorKrzysztof Wilczyński <kw@linux.com>
Thu, 3 Jun 2021 00:01:07 +0000 (00:01 +0000)
committerBjorn Helgaas <bhelgaas@google.com>
Fri, 4 Jun 2021 03:14:47 +0000 (22:14 -0500)
The sysfs_emit() and sysfs_emit_at() functions were introduced to make
it less ambiguous which function is preferred when writing to the output
buffer in a device attribute's "show" callback [1].

Convert the PCI sysfs object "show" functions from sprintf(), snprintf()
and scnprintf() to sysfs_emit() and sysfs_emit_at() accordingly, as the
latter is aware of the PAGE_SIZE buffer and correctly returns the number
of bytes written into the buffer.

No functional change intended.

[1] Documentation/filesystems/sysfs.rst

Related commit: ad025f8e46f3 ("PCI/sysfs: Use sysfs_emit() and
sysfs_emit_at() in "show" functions").

Link: https://lore.kernel.org/r/20210603000112.703037-2-kw@linux.com
Signed-off-by: Krzysztof Wilczyński <kw@linux.com>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
Reviewed-by: Logan Gunthorpe <logang@deltatee.com>
12 files changed:
drivers/pci/hotplug/pci_hotplug_core.c
drivers/pci/hotplug/rpadlpar_sysfs.c
drivers/pci/hotplug/shpchp_sysfs.c
drivers/pci/iov.c
drivers/pci/msi.c
drivers/pci/p2pdma.c
drivers/pci/pci-label.c
drivers/pci/pci.c
drivers/pci/pcie/aer.c
drivers/pci/pcie/aspm.c
drivers/pci/slot.c
drivers/pci/switch/switchtec.c

index 5ac31f683b85362c1bca32cbc01a9c77a51a4202..058d5937d8a9531b00dbbf576f290210352dfe34 100644 (file)
@@ -73,7 +73,7 @@ static ssize_t power_read_file(struct pci_slot *pci_slot, char *buf)
        if (retval)
                return retval;
 
-       return sprintf(buf, "%d\n", value);
+       return sysfs_emit(buf, "%d\n", value);
 }
 
 static ssize_t power_write_file(struct pci_slot *pci_slot, const char *buf,
@@ -130,7 +130,7 @@ static ssize_t attention_read_file(struct pci_slot *pci_slot, char *buf)
        if (retval)
                return retval;
 
-       return sprintf(buf, "%d\n", value);
+       return sysfs_emit(buf, "%d\n", value);
 }
 
 static ssize_t attention_write_file(struct pci_slot *pci_slot, const char *buf,
@@ -175,7 +175,7 @@ static ssize_t latch_read_file(struct pci_slot *pci_slot, char *buf)
        if (retval)
                return retval;
 
-       return sprintf(buf, "%d\n", value);
+       return sysfs_emit(buf, "%d\n", value);
 }
 
 static struct pci_slot_attribute hotplug_slot_attr_latch = {
@@ -192,7 +192,7 @@ static ssize_t presence_read_file(struct pci_slot *pci_slot, char *buf)
        if (retval)
                return retval;
 
-       return sprintf(buf, "%d\n", value);
+       return sysfs_emit(buf, "%d\n", value);
 }
 
 static struct pci_slot_attribute hotplug_slot_attr_presence = {
index dbfa0b55d31a5126f35785653857117dac463d35..068b7810a5746ba06d00d7e2c532dc590ac24c72 100644 (file)
@@ -50,7 +50,7 @@ static ssize_t add_slot_store(struct kobject *kobj, struct kobj_attribute *attr,
 static ssize_t add_slot_show(struct kobject *kobj,
                             struct kobj_attribute *attr, char *buf)
 {
-       return sprintf(buf, "0\n");
+       return sysfs_emit(buf, "0\n");
 }
 
 static ssize_t remove_slot_store(struct kobject *kobj,
@@ -80,7 +80,7 @@ static ssize_t remove_slot_store(struct kobject *kobj,
 static ssize_t remove_slot_show(struct kobject *kobj,
                                struct kobj_attribute *attr, char *buf)
 {
-       return sprintf(buf, "0\n");
+       return sysfs_emit(buf, "0\n");
 }
 
 static struct kobj_attribute add_slot_attr =
index 45658bb5c554f2ade9ea0e2b4b20ab1565abb493..64beed7a26bed140bd974337856a16a50aac25b0 100644 (file)
 static ssize_t show_ctrl(struct device *dev, struct device_attribute *attr, char *buf)
 {
        struct pci_dev *pdev;
-       char *out = buf;
        int index, busnr;
        struct resource *res;
        struct pci_bus *bus;
+       size_t len = 0;
 
        pdev = to_pci_dev(dev);
        bus = pdev->subordinate;
 
-       out += sprintf(buf, "Free resources: memory\n");
+       len += sysfs_emit_at(buf, len, "Free resources: memory\n");
        pci_bus_for_each_resource(bus, res, index) {
                if (res && (res->flags & IORESOURCE_MEM) &&
                                !(res->flags & IORESOURCE_PREFETCH)) {
-                       out += sprintf(out, "start = %8.8llx, length = %8.8llx\n",
-                                      (unsigned long long)res->start,
-                                      (unsigned long long)resource_size(res));
+                       len += sysfs_emit_at(buf, len,
+                                            "start = %8.8llx, length = %8.8llx\n",
+                                            (unsigned long long)res->start,
+                                            (unsigned long long)resource_size(res));
                }
        }
-       out += sprintf(out, "Free resources: prefetchable memory\n");
+       len += sysfs_emit_at(buf, len, "Free resources: prefetchable memory\n");
        pci_bus_for_each_resource(bus, res, index) {
                if (res && (res->flags & IORESOURCE_MEM) &&
                               (res->flags & IORESOURCE_PREFETCH)) {
-                       out += sprintf(out, "start = %8.8llx, length = %8.8llx\n",
-                                      (unsigned long long)res->start,
-                                      (unsigned long long)resource_size(res));
+                       len += sysfs_emit_at(buf, len,
+                                            "start = %8.8llx, length = %8.8llx\n",
+                                            (unsigned long long)res->start,
+                                            (unsigned long long)resource_size(res));
                }
        }
-       out += sprintf(out, "Free resources: IO\n");
+       len += sysfs_emit_at(buf, len, "Free resources: IO\n");
        pci_bus_for_each_resource(bus, res, index) {
                if (res && (res->flags & IORESOURCE_IO)) {
-                       out += sprintf(out, "start = %8.8llx, length = %8.8llx\n",
-                                      (unsigned long long)res->start,
-                                      (unsigned long long)resource_size(res));
+                       len += sysfs_emit_at(buf, len,
+                                            "start = %8.8llx, length = %8.8llx\n",
+                                            (unsigned long long)res->start,
+                                            (unsigned long long)resource_size(res));
                }
        }
-       out += sprintf(out, "Free resources: bus numbers\n");
+       len += sysfs_emit_at(buf, len, "Free resources: bus numbers\n");
        for (busnr = bus->busn_res.start; busnr <= bus->busn_res.end; busnr++) {
                if (!pci_find_bus(pci_domain_nr(bus), busnr))
                        break;
        }
        if (busnr < bus->busn_res.end)
-               out += sprintf(out, "start = %8.8x, length = %8.8x\n",
-                               busnr, (int)(bus->busn_res.end - busnr));
+               len += sysfs_emit_at(buf, len,
+                                    "start = %8.8x, length = %8.8x\n",
+                                    busnr, (int)(bus->busn_res.end - busnr));
 
-       return out - buf;
+       return len;
 }
 static DEVICE_ATTR(ctrl, S_IRUGO, show_ctrl, NULL);
 
index afc06e6ce115fdce7b99e403833a1018f1c780b6..a71258347323b86e1a63c42dfcb780f6a2f62dae 100644 (file)
@@ -346,7 +346,7 @@ static ssize_t sriov_totalvfs_show(struct device *dev,
 {
        struct pci_dev *pdev = to_pci_dev(dev);
 
-       return sprintf(buf, "%u\n", pci_sriov_get_totalvfs(pdev));
+       return sysfs_emit(buf, "%u\n", pci_sriov_get_totalvfs(pdev));
 }
 
 static ssize_t sriov_numvfs_show(struct device *dev,
@@ -361,7 +361,7 @@ static ssize_t sriov_numvfs_show(struct device *dev,
        num_vfs = pdev->sriov->num_VFs;
        device_unlock(&pdev->dev);
 
-       return sprintf(buf, "%u\n", num_vfs);
+       return sysfs_emit(buf, "%u\n", num_vfs);
 }
 
 /*
@@ -435,7 +435,7 @@ static ssize_t sriov_offset_show(struct device *dev,
 {
        struct pci_dev *pdev = to_pci_dev(dev);
 
-       return sprintf(buf, "%u\n", pdev->sriov->offset);
+       return sysfs_emit(buf, "%u\n", pdev->sriov->offset);
 }
 
 static ssize_t sriov_stride_show(struct device *dev,
@@ -444,7 +444,7 @@ static ssize_t sriov_stride_show(struct device *dev,
 {
        struct pci_dev *pdev = to_pci_dev(dev);
 
-       return sprintf(buf, "%u\n", pdev->sriov->stride);
+       return sysfs_emit(buf, "%u\n", pdev->sriov->stride);
 }
 
 static ssize_t sriov_vf_device_show(struct device *dev,
@@ -453,7 +453,7 @@ static ssize_t sriov_vf_device_show(struct device *dev,
 {
        struct pci_dev *pdev = to_pci_dev(dev);
 
-       return sprintf(buf, "%x\n", pdev->sriov->vf_device);
+       return sysfs_emit(buf, "%x\n", pdev->sriov->vf_device);
 }
 
 static ssize_t sriov_drivers_autoprobe_show(struct device *dev,
@@ -462,7 +462,7 @@ static ssize_t sriov_drivers_autoprobe_show(struct device *dev,
 {
        struct pci_dev *pdev = to_pci_dev(dev);
 
-       return sprintf(buf, "%u\n", pdev->sriov->drivers_autoprobe);
+       return sysfs_emit(buf, "%u\n", pdev->sriov->drivers_autoprobe);
 }
 
 static ssize_t sriov_drivers_autoprobe_store(struct device *dev,
index 217dc9f0231fde66e563d184d764123bc06304cf..9232255c8515df4b7f24012967f5b6149c6b9496 100644 (file)
@@ -464,11 +464,11 @@ static ssize_t msi_mode_show(struct device *dev, struct device_attribute *attr,
                return retval;
 
        entry = irq_get_msi_desc(irq);
-       if (entry)
-               return sprintf(buf, "%s\n",
-                               entry->msi_attrib.is_msix ? "msix" : "msi");
+       if (!entry)
+               return -ENODEV;
 
-       return -ENODEV;
+       return sysfs_emit(buf, "%s\n",
+                         entry->msi_attrib.is_msix ? "msix" : "msi");
 }
 
 static int populate_msi_sysfs(struct pci_dev *pdev)
index 1963826303631465da2956b0e3abcec3e0fcfbc4..a1351b3e2c4c1a4e0968fc3262a714c166ae026f 100644 (file)
@@ -53,7 +53,7 @@ static ssize_t size_show(struct device *dev, struct device_attribute *attr,
        if (pdev->p2pdma->pool)
                size = gen_pool_size(pdev->p2pdma->pool);
 
-       return scnprintf(buf, PAGE_SIZE, "%zd\n", size);
+       return sysfs_emit(buf, "%zd\n", size);
 }
 static DEVICE_ATTR_RO(size);
 
@@ -66,7 +66,7 @@ static ssize_t available_show(struct device *dev, struct device_attribute *attr,
        if (pdev->p2pdma->pool)
                avail = gen_pool_avail(pdev->p2pdma->pool);
 
-       return scnprintf(buf, PAGE_SIZE, "%zd\n", avail);
+       return sysfs_emit(buf, "%zd\n", avail);
 }
 static DEVICE_ATTR_RO(available);
 
@@ -75,8 +75,7 @@ static ssize_t published_show(struct device *dev, struct device_attribute *attr,
 {
        struct pci_dev *pdev = to_pci_dev(dev);
 
-       return scnprintf(buf, PAGE_SIZE, "%d\n",
-                        pdev->p2pdma->p2pmem_published);
+       return sysfs_emit(buf, "%d\n", pdev->p2pdma->p2pmem_published);
 }
 static DEVICE_ATTR_RO(published);
 
index 94b59e37939cd3e5332bc58461c4e982716bdd5d..0c6446519640437d177f1b28c9582995a721766d 100644 (file)
@@ -178,11 +178,11 @@ static int dsm_get_label(struct device *dev, char *buf,
                 * this entry must return a null string.
                 */
                if (attr == ACPI_ATTR_INDEX_SHOW) {
-                       len = scnprintf(buf, PAGE_SIZE, "%llu\n", tmp->integer.value);
+                       len = sysfs_emit(buf, "%llu\n", tmp->integer.value);
                } else if (attr == ACPI_ATTR_LABEL_SHOW) {
                        if (tmp[1].type == ACPI_TYPE_STRING)
-                               len = scnprintf(buf, PAGE_SIZE, "%s\n",
-                                         tmp[1].string.pointer);
+                               len = sysfs_emit(buf, "%s\n",
+                                                tmp[1].string.pointer);
                        else if (tmp[1].type == ACPI_TYPE_BUFFER)
                                len = dsm_label_utf16s_to_utf8s(tmp + 1, buf);
                }
index b717680377a9e7380d59dca5a1c7c67d6cd9b92c..5ed316ea58315c70c5669e09982ec03a721585b9 100644 (file)
@@ -6439,7 +6439,7 @@ static ssize_t resource_alignment_show(struct bus_type *bus, char *buf)
 
        spin_lock(&resource_alignment_lock);
        if (resource_alignment_param)
-               count = scnprintf(buf, PAGE_SIZE, "%s", resource_alignment_param);
+               count = sysfs_emit(buf, "%s", resource_alignment_param);
        spin_unlock(&resource_alignment_lock);
 
        /*
index ec943cee5eccab9238cced28025ad02bb3ccee73..40ef7bed7a779f6a0936e14bcd773a2ec0982b35 100644 (file)
@@ -529,21 +529,23 @@ static const char *aer_agent_string[] = {
                     char *buf)                                         \
 {                                                                      \
        unsigned int i;                                                 \
-       char *str = buf;                                                \
        struct pci_dev *pdev = to_pci_dev(dev);                         \
        u64 *stats = pdev->aer_stats->stats_array;                      \
+       size_t len = 0;                                                 \
                                                                        \
        for (i = 0; i < ARRAY_SIZE(strings_array); i++) {               \
                if (strings_array[i])                                   \
-                       str += sprintf(str, "%s %llu\n",                \
-                                      strings_array[i], stats[i]);     \
+                       len += sysfs_emit_at(buf, len, "%s %llu\n",     \
+                                            strings_array[i],          \
+                                            stats[i]);                 \
                else if (stats[i])                                      \
-                       str += sprintf(str, #stats_array "_bit[%d] %llu\n",\
-                                      i, stats[i]);                    \
+                       len += sysfs_emit_at(buf, len,                  \
+                                            #stats_array "_bit[%d] %llu\n",\
+                                            i, stats[i]);              \
        }                                                               \
-       str += sprintf(str, "TOTAL_%s %llu\n", total_string,            \
-                      pdev->aer_stats->total_field);                   \
-       return str-buf;                                                 \
+       len += sysfs_emit_at(buf, len, "TOTAL_%s %llu\n", total_string, \
+                            pdev->aer_stats->total_field);             \
+       return len;                                                     \
 }                                                                      \
 static DEVICE_ATTR_RO(name)
 
@@ -563,7 +565,7 @@ aer_stats_dev_attr(aer_dev_nonfatal, dev_nonfatal_errs,
                     char *buf)                                         \
 {                                                                      \
        struct pci_dev *pdev = to_pci_dev(dev);                         \
-       return sprintf(buf, "%llu\n", pdev->aer_stats->field);          \
+       return sysfs_emit(buf, "%llu\n", pdev->aer_stats->field);       \
 }                                                                      \
 static DEVICE_ATTR_RO(name)
 
index ac0557a305aff383f7a0d9e7ea4112904081f351..013a47f587ceae2b9c87e623c6ac4223efa9f487 100644 (file)
@@ -1208,7 +1208,7 @@ static ssize_t aspm_attr_show_common(struct device *dev,
        struct pci_dev *pdev = to_pci_dev(dev);
        struct pcie_link_state *link = pcie_aspm_get_link(pdev);
 
-       return sprintf(buf, "%d\n", (link->aspm_enabled & state) ? 1 : 0);
+       return sysfs_emit(buf, "%d\n", (link->aspm_enabled & state) ? 1 : 0);
 }
 
 static ssize_t aspm_attr_store_common(struct device *dev,
@@ -1265,7 +1265,7 @@ static ssize_t clkpm_show(struct device *dev,
        struct pci_dev *pdev = to_pci_dev(dev);
        struct pcie_link_state *link = pcie_aspm_get_link(pdev);
 
-       return sprintf(buf, "%d\n", link->clkpm_enabled);
+       return sysfs_emit(buf, "%d\n", link->clkpm_enabled);
 }
 
 static ssize_t clkpm_store(struct device *dev,
index d627dd9179b486524bf861cb3538e6916a0ac78b..751a26668e3a4fcd7021060bb522aad88efffb21 100644 (file)
@@ -39,19 +39,19 @@ static const struct sysfs_ops pci_slot_sysfs_ops = {
 static ssize_t address_read_file(struct pci_slot *slot, char *buf)
 {
        if (slot->number == 0xff)
-               return sprintf(buf, "%04x:%02x\n",
-                               pci_domain_nr(slot->bus),
-                               slot->bus->number);
-       else
-               return sprintf(buf, "%04x:%02x:%02x\n",
-                               pci_domain_nr(slot->bus),
-                               slot->bus->number,
-                               slot->number);
+               return sysfs_emit(buf, "%04x:%02x\n",
+                                 pci_domain_nr(slot->bus),
+                                 slot->bus->number);
+
+       return sysfs_emit(buf, "%04x:%02x:%02x\n",
+                         pci_domain_nr(slot->bus),
+                         slot->bus->number,
+                         slot->number);
 }
 
 static ssize_t bus_speed_read(enum pci_bus_speed speed, char *buf)
 {
-       return sprintf(buf, "%s\n", pci_speed_string(speed));
+       return sysfs_emit(buf, "%s\n", pci_speed_string(speed));
 }
 
 static ssize_t max_speed_read_file(struct pci_slot *slot, char *buf)
index ba52459928f7fd796b1d389040a3f8b99a13dc26..0b301f8be9ed566600626f651fc785e962a5100f 100644 (file)
@@ -280,7 +280,7 @@ static ssize_t device_version_show(struct device *dev,
 
        ver = ioread32(&stdev->mmio_sys_info->device_version);
 
-       return sprintf(buf, "%x\n", ver);
+       return sysfs_emit(buf, "%x\n", ver);
 }
 static DEVICE_ATTR_RO(device_version);
 
@@ -292,7 +292,7 @@ static ssize_t fw_version_show(struct device *dev,
 
        ver = ioread32(&stdev->mmio_sys_info->firmware_version);
 
-       return sprintf(buf, "%08x\n", ver);
+       return sysfs_emit(buf, "%08x\n", ver);
 }
 static DEVICE_ATTR_RO(fw_version);
 
@@ -344,7 +344,7 @@ static ssize_t component_vendor_show(struct device *dev,
 
        /* component_vendor field not supported after gen3 */
        if (stdev->gen != SWITCHTEC_GEN3)
-               return sprintf(buf, "none\n");
+               return sysfs_emit(buf, "none\n");
 
        return io_string_show(buf, &si->gen3.component_vendor,
                              sizeof(si->gen3.component_vendor));
@@ -359,9 +359,9 @@ static ssize_t component_id_show(struct device *dev,
 
        /* component_id field not supported after gen3 */
        if (stdev->gen != SWITCHTEC_GEN3)
-               return sprintf(buf, "none\n");
+               return sysfs_emit(buf, "none\n");
 
-       return sprintf(buf, "PM%04X\n", id);
+       return sysfs_emit(buf, "PM%04X\n", id);
 }
 static DEVICE_ATTR_RO(component_id);
 
@@ -373,9 +373,9 @@ static ssize_t component_revision_show(struct device *dev,
 
        /* component_revision field not supported after gen3 */
        if (stdev->gen != SWITCHTEC_GEN3)
-               return sprintf(buf, "255\n");
+               return sysfs_emit(buf, "255\n");
 
-       return sprintf(buf, "%d\n", rev);
+       return sysfs_emit(buf, "%d\n", rev);
 }
 static DEVICE_ATTR_RO(component_revision);
 
@@ -384,7 +384,7 @@ static ssize_t partition_show(struct device *dev,
 {
        struct switchtec_dev *stdev = to_stdev(dev);
 
-       return sprintf(buf, "%d\n", stdev->partition);
+       return sysfs_emit(buf, "%d\n", stdev->partition);
 }
 static DEVICE_ATTR_RO(partition);
 
@@ -393,7 +393,7 @@ static ssize_t partition_count_show(struct device *dev,
 {
        struct switchtec_dev *stdev = to_stdev(dev);
 
-       return sprintf(buf, "%d\n", stdev->partition_count);
+       return sysfs_emit(buf, "%d\n", stdev->partition_count);
 }
 static DEVICE_ATTR_RO(partition_count);