scsi: qedf: Use pci_get_dsn()
authorJacob Keller <jacob.e.keller@intel.com>
Tue, 3 Mar 2020 02:25:02 +0000 (18:25 -0800)
committerDavid S. Miller <davem@davemloft.net>
Fri, 6 Mar 2020 01:36:24 +0000 (17:36 -0800)
Replace the open-coded implementation for reading the PCIe DSN with
pci_get_dsn().

The original code used a for-loop that looped over each of the 8 bytes
and copied them into a temporary buffer. pci_get_dsn() uses two calls to
pci_read_config_dword, and correctly bitwise ORs them into a u64. Thus,
we can simplify the snprintf significantly using %016llX on a u64 value.

Signed-off-by: Jacob Keller <jacob.e.keller@intel.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/scsi/qedf/qedf_main.c

index 604856e72cfbe6475a1dcf731e3aaa32de3741c9..5b19f5175c5cd7decfcb6e34d9ff1cac6e4deb8a 100644 (file)
@@ -1577,8 +1577,7 @@ static void qedf_setup_fdmi(struct qedf_ctx *qedf)
 {
        struct fc_lport *lport = qedf->lport;
        struct fc_host_attrs *fc_host = shost_to_fc_host(lport->host);
-       u8 buf[8];
-       int i, pos;
+       u64 dsn;
 
        /*
         * fdmi_enabled needs to be set for libfc to execute FDMI registration.
@@ -1591,18 +1590,11 @@ static void qedf_setup_fdmi(struct qedf_ctx *qedf)
         */
 
        /* Get the PCI-e Device Serial Number Capability */
-       pos = pci_find_ext_capability(qedf->pdev, PCI_EXT_CAP_ID_DSN);
-       if (pos) {
-               pos += 4;
-               for (i = 0; i < 8; i++)
-                       pci_read_config_byte(qedf->pdev, pos + i, &buf[i]);
-
+       dsn = pci_get_dsn(qedf->pdev);
+       if (dsn)
                snprintf(fc_host->serial_number,
-                   sizeof(fc_host->serial_number),
-                   "%02X%02X%02X%02X%02X%02X%02X%02X",
-                   buf[7], buf[6], buf[5], buf[4],
-                   buf[3], buf[2], buf[1], buf[0]);
-       } else
+                   sizeof(fc_host->serial_number), "%016llX", dsn);
+       else
                snprintf(fc_host->serial_number,
                    sizeof(fc_host->serial_number), "Unknown");