Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

PCI/sysfs: Use sysfs_emit() and sysfs_emit_at() in "show" functions

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>

authored by

Krzysztof Wilczyński and committed by
Bjorn Helgaas
f8cf6e51 316ae330

+75 -70
+4 -4
drivers/pci/hotplug/pci_hotplug_core.c
··· 73 73 if (retval) 74 74 return retval; 75 75 76 - return sprintf(buf, "%d\n", value); 76 + return sysfs_emit(buf, "%d\n", value); 77 77 } 78 78 79 79 static ssize_t power_write_file(struct pci_slot *pci_slot, const char *buf, ··· 130 130 if (retval) 131 131 return retval; 132 132 133 - return sprintf(buf, "%d\n", value); 133 + return sysfs_emit(buf, "%d\n", value); 134 134 } 135 135 136 136 static ssize_t attention_write_file(struct pci_slot *pci_slot, const char *buf, ··· 175 175 if (retval) 176 176 return retval; 177 177 178 - return sprintf(buf, "%d\n", value); 178 + return sysfs_emit(buf, "%d\n", value); 179 179 } 180 180 181 181 static struct pci_slot_attribute hotplug_slot_attr_latch = { ··· 192 192 if (retval) 193 193 return retval; 194 194 195 - return sprintf(buf, "%d\n", value); 195 + return sysfs_emit(buf, "%d\n", value); 196 196 } 197 197 198 198 static struct pci_slot_attribute hotplug_slot_attr_presence = {
+2 -2
drivers/pci/hotplug/rpadlpar_sysfs.c
··· 50 50 static ssize_t add_slot_show(struct kobject *kobj, 51 51 struct kobj_attribute *attr, char *buf) 52 52 { 53 - return sprintf(buf, "0\n"); 53 + return sysfs_emit(buf, "0\n"); 54 54 } 55 55 56 56 static ssize_t remove_slot_store(struct kobject *kobj, ··· 80 80 static ssize_t remove_slot_show(struct kobject *kobj, 81 81 struct kobj_attribute *attr, char *buf) 82 82 { 83 - return sprintf(buf, "0\n"); 83 + return sysfs_emit(buf, "0\n"); 84 84 } 85 85 86 86 static struct kobj_attribute add_slot_attr =
+21 -17
drivers/pci/hotplug/shpchp_sysfs.c
··· 24 24 static ssize_t show_ctrl(struct device *dev, struct device_attribute *attr, char *buf) 25 25 { 26 26 struct pci_dev *pdev; 27 - char *out = buf; 28 27 int index, busnr; 29 28 struct resource *res; 30 29 struct pci_bus *bus; 30 + size_t len = 0; 31 31 32 32 pdev = to_pci_dev(dev); 33 33 bus = pdev->subordinate; 34 34 35 - out += sprintf(buf, "Free resources: memory\n"); 35 + len += sysfs_emit_at(buf, len, "Free resources: memory\n"); 36 36 pci_bus_for_each_resource(bus, res, index) { 37 37 if (res && (res->flags & IORESOURCE_MEM) && 38 38 !(res->flags & IORESOURCE_PREFETCH)) { 39 - out += sprintf(out, "start = %8.8llx, length = %8.8llx\n", 40 - (unsigned long long)res->start, 41 - (unsigned long long)resource_size(res)); 39 + len += sysfs_emit_at(buf, len, 40 + "start = %8.8llx, length = %8.8llx\n", 41 + (unsigned long long)res->start, 42 + (unsigned long long)resource_size(res)); 42 43 } 43 44 } 44 - out += sprintf(out, "Free resources: prefetchable memory\n"); 45 + len += sysfs_emit_at(buf, len, "Free resources: prefetchable memory\n"); 45 46 pci_bus_for_each_resource(bus, res, index) { 46 47 if (res && (res->flags & IORESOURCE_MEM) && 47 48 (res->flags & IORESOURCE_PREFETCH)) { 48 - out += sprintf(out, "start = %8.8llx, length = %8.8llx\n", 49 - (unsigned long long)res->start, 50 - (unsigned long long)resource_size(res)); 49 + len += sysfs_emit_at(buf, len, 50 + "start = %8.8llx, length = %8.8llx\n", 51 + (unsigned long long)res->start, 52 + (unsigned long long)resource_size(res)); 51 53 } 52 54 } 53 - out += sprintf(out, "Free resources: IO\n"); 55 + len += sysfs_emit_at(buf, len, "Free resources: IO\n"); 54 56 pci_bus_for_each_resource(bus, res, index) { 55 57 if (res && (res->flags & IORESOURCE_IO)) { 56 - out += sprintf(out, "start = %8.8llx, length = %8.8llx\n", 57 - (unsigned long long)res->start, 58 - (unsigned long long)resource_size(res)); 58 + len += sysfs_emit_at(buf, len, 59 + "start = %8.8llx, length = %8.8llx\n", 60 + (unsigned long long)res->start, 61 + (unsigned long long)resource_size(res)); 59 62 } 60 63 } 61 - out += sprintf(out, "Free resources: bus numbers\n"); 64 + len += sysfs_emit_at(buf, len, "Free resources: bus numbers\n"); 62 65 for (busnr = bus->busn_res.start; busnr <= bus->busn_res.end; busnr++) { 63 66 if (!pci_find_bus(pci_domain_nr(bus), busnr)) 64 67 break; 65 68 } 66 69 if (busnr < bus->busn_res.end) 67 - out += sprintf(out, "start = %8.8x, length = %8.8x\n", 68 - busnr, (int)(bus->busn_res.end - busnr)); 70 + len += sysfs_emit_at(buf, len, 71 + "start = %8.8x, length = %8.8x\n", 72 + busnr, (int)(bus->busn_res.end - busnr)); 69 73 70 - return out - buf; 74 + return len; 71 75 } 72 76 static DEVICE_ATTR(ctrl, S_IRUGO, show_ctrl, NULL); 73 77
+6 -6
drivers/pci/iov.c
··· 346 346 { 347 347 struct pci_dev *pdev = to_pci_dev(dev); 348 348 349 - return sprintf(buf, "%u\n", pci_sriov_get_totalvfs(pdev)); 349 + return sysfs_emit(buf, "%u\n", pci_sriov_get_totalvfs(pdev)); 350 350 } 351 351 352 352 static ssize_t sriov_numvfs_show(struct device *dev, ··· 361 361 num_vfs = pdev->sriov->num_VFs; 362 362 device_unlock(&pdev->dev); 363 363 364 - return sprintf(buf, "%u\n", num_vfs); 364 + return sysfs_emit(buf, "%u\n", num_vfs); 365 365 } 366 366 367 367 /* ··· 435 435 { 436 436 struct pci_dev *pdev = to_pci_dev(dev); 437 437 438 - return sprintf(buf, "%u\n", pdev->sriov->offset); 438 + return sysfs_emit(buf, "%u\n", pdev->sriov->offset); 439 439 } 440 440 441 441 static ssize_t sriov_stride_show(struct device *dev, ··· 444 444 { 445 445 struct pci_dev *pdev = to_pci_dev(dev); 446 446 447 - return sprintf(buf, "%u\n", pdev->sriov->stride); 447 + return sysfs_emit(buf, "%u\n", pdev->sriov->stride); 448 448 } 449 449 450 450 static ssize_t sriov_vf_device_show(struct device *dev, ··· 453 453 { 454 454 struct pci_dev *pdev = to_pci_dev(dev); 455 455 456 - return sprintf(buf, "%x\n", pdev->sriov->vf_device); 456 + return sysfs_emit(buf, "%x\n", pdev->sriov->vf_device); 457 457 } 458 458 459 459 static ssize_t sriov_drivers_autoprobe_show(struct device *dev, ··· 462 462 { 463 463 struct pci_dev *pdev = to_pci_dev(dev); 464 464 465 - return sprintf(buf, "%u\n", pdev->sriov->drivers_autoprobe); 465 + return sysfs_emit(buf, "%u\n", pdev->sriov->drivers_autoprobe); 466 466 } 467 467 468 468 static ssize_t sriov_drivers_autoprobe_store(struct device *dev,
+4 -4
drivers/pci/msi.c
··· 464 464 return retval; 465 465 466 466 entry = irq_get_msi_desc(irq); 467 - if (entry) 468 - return sprintf(buf, "%s\n", 469 - entry->msi_attrib.is_msix ? "msix" : "msi"); 467 + if (!entry) 468 + return -ENODEV; 470 469 471 - return -ENODEV; 470 + return sysfs_emit(buf, "%s\n", 471 + entry->msi_attrib.is_msix ? "msix" : "msi"); 472 472 } 473 473 474 474 static int populate_msi_sysfs(struct pci_dev *pdev)
+3 -4
drivers/pci/p2pdma.c
··· 53 53 if (pdev->p2pdma->pool) 54 54 size = gen_pool_size(pdev->p2pdma->pool); 55 55 56 - return scnprintf(buf, PAGE_SIZE, "%zd\n", size); 56 + return sysfs_emit(buf, "%zd\n", size); 57 57 } 58 58 static DEVICE_ATTR_RO(size); 59 59 ··· 66 66 if (pdev->p2pdma->pool) 67 67 avail = gen_pool_avail(pdev->p2pdma->pool); 68 68 69 - return scnprintf(buf, PAGE_SIZE, "%zd\n", avail); 69 + return sysfs_emit(buf, "%zd\n", avail); 70 70 } 71 71 static DEVICE_ATTR_RO(available); 72 72 ··· 75 75 { 76 76 struct pci_dev *pdev = to_pci_dev(dev); 77 77 78 - return scnprintf(buf, PAGE_SIZE, "%d\n", 79 - pdev->p2pdma->p2pmem_published); 78 + return sysfs_emit(buf, "%d\n", pdev->p2pdma->p2pmem_published); 80 79 } 81 80 static DEVICE_ATTR_RO(published); 82 81
+3 -3
drivers/pci/pci-label.c
··· 178 178 * this entry must return a null string. 179 179 */ 180 180 if (attr == ACPI_ATTR_INDEX_SHOW) { 181 - len = scnprintf(buf, PAGE_SIZE, "%llu\n", tmp->integer.value); 181 + len = sysfs_emit(buf, "%llu\n", tmp->integer.value); 182 182 } else if (attr == ACPI_ATTR_LABEL_SHOW) { 183 183 if (tmp[1].type == ACPI_TYPE_STRING) 184 - len = scnprintf(buf, PAGE_SIZE, "%s\n", 185 - tmp[1].string.pointer); 184 + len = sysfs_emit(buf, "%s\n", 185 + tmp[1].string.pointer); 186 186 else if (tmp[1].type == ACPI_TYPE_BUFFER) 187 187 len = dsm_label_utf16s_to_utf8s(tmp + 1, buf); 188 188 }
+1 -1
drivers/pci/pci.c
··· 6439 6439 6440 6440 spin_lock(&resource_alignment_lock); 6441 6441 if (resource_alignment_param) 6442 - count = scnprintf(buf, PAGE_SIZE, "%s", resource_alignment_param); 6442 + count = sysfs_emit(buf, "%s", resource_alignment_param); 6443 6443 spin_unlock(&resource_alignment_lock); 6444 6444 6445 6445 /*
+11 -9
drivers/pci/pcie/aer.c
··· 529 529 char *buf) \ 530 530 { \ 531 531 unsigned int i; \ 532 - char *str = buf; \ 533 532 struct pci_dev *pdev = to_pci_dev(dev); \ 534 533 u64 *stats = pdev->aer_stats->stats_array; \ 534 + size_t len = 0; \ 535 535 \ 536 536 for (i = 0; i < ARRAY_SIZE(strings_array); i++) { \ 537 537 if (strings_array[i]) \ 538 - str += sprintf(str, "%s %llu\n", \ 539 - strings_array[i], stats[i]); \ 538 + len += sysfs_emit_at(buf, len, "%s %llu\n", \ 539 + strings_array[i], \ 540 + stats[i]); \ 540 541 else if (stats[i]) \ 541 - str += sprintf(str, #stats_array "_bit[%d] %llu\n",\ 542 - i, stats[i]); \ 542 + len += sysfs_emit_at(buf, len, \ 543 + #stats_array "_bit[%d] %llu\n",\ 544 + i, stats[i]); \ 543 545 } \ 544 - str += sprintf(str, "TOTAL_%s %llu\n", total_string, \ 545 - pdev->aer_stats->total_field); \ 546 - return str-buf; \ 546 + len += sysfs_emit_at(buf, len, "TOTAL_%s %llu\n", total_string, \ 547 + pdev->aer_stats->total_field); \ 548 + return len; \ 547 549 } \ 548 550 static DEVICE_ATTR_RO(name) 549 551 ··· 565 563 char *buf) \ 566 564 { \ 567 565 struct pci_dev *pdev = to_pci_dev(dev); \ 568 - return sprintf(buf, "%llu\n", pdev->aer_stats->field); \ 566 + return sysfs_emit(buf, "%llu\n", pdev->aer_stats->field); \ 569 567 } \ 570 568 static DEVICE_ATTR_RO(name) 571 569
+2 -2
drivers/pci/pcie/aspm.c
··· 1208 1208 struct pci_dev *pdev = to_pci_dev(dev); 1209 1209 struct pcie_link_state *link = pcie_aspm_get_link(pdev); 1210 1210 1211 - return sprintf(buf, "%d\n", (link->aspm_enabled & state) ? 1 : 0); 1211 + return sysfs_emit(buf, "%d\n", (link->aspm_enabled & state) ? 1 : 0); 1212 1212 } 1213 1213 1214 1214 static ssize_t aspm_attr_store_common(struct device *dev, ··· 1265 1265 struct pci_dev *pdev = to_pci_dev(dev); 1266 1266 struct pcie_link_state *link = pcie_aspm_get_link(pdev); 1267 1267 1268 - return sprintf(buf, "%d\n", link->clkpm_enabled); 1268 + return sysfs_emit(buf, "%d\n", link->clkpm_enabled); 1269 1269 } 1270 1270 1271 1271 static ssize_t clkpm_store(struct device *dev,
+9 -9
drivers/pci/slot.c
··· 39 39 static ssize_t address_read_file(struct pci_slot *slot, char *buf) 40 40 { 41 41 if (slot->number == 0xff) 42 - return sprintf(buf, "%04x:%02x\n", 43 - pci_domain_nr(slot->bus), 44 - slot->bus->number); 45 - else 46 - return sprintf(buf, "%04x:%02x:%02x\n", 47 - pci_domain_nr(slot->bus), 48 - slot->bus->number, 49 - slot->number); 42 + return sysfs_emit(buf, "%04x:%02x\n", 43 + pci_domain_nr(slot->bus), 44 + slot->bus->number); 45 + 46 + return sysfs_emit(buf, "%04x:%02x:%02x\n", 47 + pci_domain_nr(slot->bus), 48 + slot->bus->number, 49 + slot->number); 50 50 } 51 51 52 52 static ssize_t bus_speed_read(enum pci_bus_speed speed, char *buf) 53 53 { 54 - return sprintf(buf, "%s\n", pci_speed_string(speed)); 54 + return sysfs_emit(buf, "%s\n", pci_speed_string(speed)); 55 55 } 56 56 57 57 static ssize_t max_speed_read_file(struct pci_slot *slot, char *buf)
+9 -9
drivers/pci/switch/switchtec.c
··· 280 280 281 281 ver = ioread32(&stdev->mmio_sys_info->device_version); 282 282 283 - return sprintf(buf, "%x\n", ver); 283 + return sysfs_emit(buf, "%x\n", ver); 284 284 } 285 285 static DEVICE_ATTR_RO(device_version); 286 286 ··· 292 292 293 293 ver = ioread32(&stdev->mmio_sys_info->firmware_version); 294 294 295 - return sprintf(buf, "%08x\n", ver); 295 + return sysfs_emit(buf, "%08x\n", ver); 296 296 } 297 297 static DEVICE_ATTR_RO(fw_version); 298 298 ··· 344 344 345 345 /* component_vendor field not supported after gen3 */ 346 346 if (stdev->gen != SWITCHTEC_GEN3) 347 - return sprintf(buf, "none\n"); 347 + return sysfs_emit(buf, "none\n"); 348 348 349 349 return io_string_show(buf, &si->gen3.component_vendor, 350 350 sizeof(si->gen3.component_vendor)); ··· 359 359 360 360 /* component_id field not supported after gen3 */ 361 361 if (stdev->gen != SWITCHTEC_GEN3) 362 - return sprintf(buf, "none\n"); 362 + return sysfs_emit(buf, "none\n"); 363 363 364 - return sprintf(buf, "PM%04X\n", id); 364 + return sysfs_emit(buf, "PM%04X\n", id); 365 365 } 366 366 static DEVICE_ATTR_RO(component_id); 367 367 ··· 373 373 374 374 /* component_revision field not supported after gen3 */ 375 375 if (stdev->gen != SWITCHTEC_GEN3) 376 - return sprintf(buf, "255\n"); 376 + return sysfs_emit(buf, "255\n"); 377 377 378 - return sprintf(buf, "%d\n", rev); 378 + return sysfs_emit(buf, "%d\n", rev); 379 379 } 380 380 static DEVICE_ATTR_RO(component_revision); 381 381 ··· 384 384 { 385 385 struct switchtec_dev *stdev = to_stdev(dev); 386 386 387 - return sprintf(buf, "%d\n", stdev->partition); 387 + return sysfs_emit(buf, "%d\n", stdev->partition); 388 388 } 389 389 static DEVICE_ATTR_RO(partition); 390 390 ··· 393 393 { 394 394 struct switchtec_dev *stdev = to_stdev(dev); 395 395 396 - return sprintf(buf, "%d\n", stdev->partition_count); 396 + return sysfs_emit(buf, "%d\n", stdev->partition_count); 397 397 } 398 398 static DEVICE_ATTR_RO(partition_count); 399 399