Several drivers read the Device Serial Number from the PCIe extended configuration space. Each of these drivers implements a similar approach to finding the position and then extracting the 8 bytes of data. Implement a new helper function, pci_get_dsn, which can be used to extract this data into an 8 byte array. Modify the bnxt_en, qedf, ice, and ixgbe driver to use this new function. I left the implementation in the netronome nfp driver alone because they appear to extract parts of the DSN into separate locations and the transformation was not as obvious. The intent for this is to reduce duplicate code across the various drivers, and make it easier to write future code that wants to read the DSN. In particular the ice driver will be using the DSN as its serial number when implementing the DEVLINK_CMD_INFO_GET. I'm not entirely sure what tree these patches should go through, since it includes a core PCI change, as well as changes for both networking drivers and a scsi driver. Jacob Keller (5): pci: introduce pci_get_dsn bnxt_en: use pci_get_dsn scsi: qedf: use pci_get_dsn ice: use pci_get_dsn ixgbe: use pci_get_dsn drivers/net/ethernet/broadcom/bnxt/bnxt.c | 14 +++----- drivers/net/ethernet/intel/ice/ice_main.c | 32 ++++++++---------- drivers/net/ethernet/intel/ixgbe/ixgbe_fcoe.c | 16 ++++----- drivers/pci/pci.c | 33 +++++++++++++++++++ drivers/scsi/qedf/qedf_main.c | 16 ++++----- include/linux/pci.h | 5 +++ 6 files changed, 68 insertions(+), 48 deletions(-) -- 2.25.0.368.g28a2d05eebfb