All of lore.kernel.org
 help / color / mirror / Atom feed
From: Bjorn Helgaas <helgaas@kernel.org>
To: Jacob Keller <jacob.e.keller@intel.com>
Cc: linux-pci@vger.kernel.org, netdev@vger.kernel.org,
	Jeff Kirsher <jeffrey.t.kirsher@intel.com>,
	QLogic-Storage-Upstream@cavium.com,
	Michael Chan <michael.chan@broadcom.com>
Subject: Re: [PATCH 1/5] pci: introduce pci_get_dsn
Date: Mon, 2 Mar 2020 17:20:57 -0600	[thread overview]
Message-ID: <20200302232057.GA182308@google.com> (raw)
In-Reply-To: <ccec830f-b932-366a-de61-46159a99b5c9@intel.com>

On Mon, Mar 02, 2020 at 02:33:12PM -0800, Jacob Keller wrote:
> On 3/2/2020 2:25 PM, Bjorn Helgaas wrote:

> >> +int pci_get_dsn(struct pci_dev *dev, u8 dsn[])
> >> +{
> >> +	u32 dword;
> >> +	int pos;
> >> +
> >> +
> >> +	pos = pci_find_ext_capability(dev, PCI_EXT_CAP_ID_DSN);
> >> +	if (!pos)
> >> +		return -EOPNOTSUPP;
> >> +
> >> +	/*
> >> +	 * The Device Serial Number is two dwords offset 4 bytes from the
> >> +	 * capability position.
> >> +	 */
> >> +	pos += 4;
> >> +	pci_read_config_dword(dev, pos, &dword);
> >> +	put_unaligned_le32(dword, &dsn[0]);
> >> +	pci_read_config_dword(dev, pos + 4, &dword);
> >> +	put_unaligned_le32(dword, &dsn[4]);
> > 
> > Since the serial number is a 64-bit value, can we just return a u64
> > and let the caller worry about any alignment and byte-order issues?
> > 
> > This would be the only use of asm/unaligned.h in driver/pci, and I
> > don't think DSN should be that special.
> 
> I suppose that's fair, but it ends up leaving most callers having to fix
> this immediately after calling this function.

PCIe doesn't impose any structure on the value; it just says the first
dword is the lower DW and the second is the upper DW.  As long as we
put that together correctly into a u64, I think further interpretation
is caller-specific.

> > I think it's OK if we return 0 if the device doesn't have a DSN
> > capability.  A DSN that actually contains a zero serial number would
> > be dubious at best.
> 
> Hmm. I was trying to match how pre-existing code behaved, based on the
> ice and bnxt drivers.
> 
> By returning 0s, we'd have to then perform a memcmp or something to
> catch it.

Can you just do this:

  dsn = pci_get_dsn(pdev);
  if (!dsn)
    return NULL;

  snprintf(opt_fw_filename, ...);
  return opt_fw_filename;

Or am I missing something?

> >> +	return 0;
> >> +}
> >> +EXPORT_SYMBOL_GPL(pci_get_dsn);
> >> +
> >>  static int __pci_find_next_ht_cap(struct pci_dev *dev, int pos, int ht_cap)
> >>  {
> >>  	int rc, ttl = PCI_FIND_CAP_TTL;
> >> diff --git a/include/linux/pci.h b/include/linux/pci.h
> >> index 3840a541a9de..883562323df3 100644
> >> --- a/include/linux/pci.h
> >> +++ b/include/linux/pci.h
> >> @@ -1045,6 +1045,8 @@ int pci_find_ht_capability(struct pci_dev *dev, int ht_cap);
> >>  int pci_find_next_ht_capability(struct pci_dev *dev, int pos, int ht_cap);
> >>  struct pci_bus *pci_find_next_bus(const struct pci_bus *from);
> >>  
> >> +int pci_get_dsn(struct pci_dev *dev, u8 dsn[]);
> >> +
> >>  struct pci_dev *pci_get_device(unsigned int vendor, unsigned int device,
> >>  			       struct pci_dev *from);
> >>  struct pci_dev *pci_get_subsys(unsigned int vendor, unsigned int device,
> >> @@ -1699,6 +1701,9 @@ static inline int pci_find_next_capability(struct pci_dev *dev, u8 post,
> >>  static inline int pci_find_ext_capability(struct pci_dev *dev, int cap)
> >>  { return 0; }
> >>  
> >> +static inline int pci_get_dsn(struct pci_dev *dev, u8 dsn[])
> >> +{ return -EOPNOTSUPP; }
> >> +
> >>  /* Power management related routines */
> >>  static inline int pci_save_state(struct pci_dev *dev) { return 0; }
> >>  static inline void pci_restore_state(struct pci_dev *dev) { }
> >> -- 
> >> 2.25.0.368.g28a2d05eebfb
> >>

  reply	other threads:[~2020-03-02 23:21 UTC|newest]

Thread overview: 28+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-02-27 22:36 [PATCH 0/5] pci: implement function to read Device Serial Number Jacob Keller
2020-02-27 22:36 ` [PATCH] ice-shared: add macro specifying max NVM offset Jacob Keller
2020-02-27 22:43   ` Jacob Keller
2020-02-27 22:36 ` [PATCH 1/5] pci: introduce pci_get_dsn Jacob Keller
2020-03-01  5:27   ` David Miller
2020-03-02 19:58     ` Jacob Keller
2020-03-02 22:25   ` Bjorn Helgaas
2020-03-02 22:33     ` Jacob Keller
2020-03-02 23:20       ` Bjorn Helgaas [this message]
2020-03-02 23:24         ` Jacob Keller
2020-03-02 23:39           ` Bjorn Helgaas
2020-03-03  2:24             ` [PATCH v2 0/6] PCI: Implement function to read Device Serial Number Jacob Keller
2020-03-03  2:25               ` [PATCH v2 1/6] PCI: Introduce pci_get_dsn Jacob Keller
2020-03-04 22:42                 ` Bjorn Helgaas
2020-03-03  2:25               ` [PATCH v2 2/6] bnxt_en: Use pci_get_dsn() Jacob Keller
2020-03-03  2:25               ` [PATCH v2 3/6] scsi: qedf: " Jacob Keller
2020-03-03  2:25               ` [PATCH v2 4/6] ice: " Jacob Keller
2020-03-03  2:25               ` [PATCH v2 5/6] ixgbe: " Jacob Keller
2020-03-03  2:25               ` [PATCH v2 6/6] nfp: " Jacob Keller
2020-03-03  3:40                 ` Jakub Kicinski
2020-03-03 17:36                   ` Jacob Keller
2020-03-04 22:28               ` [PATCH v2 0/6] PCI: Implement function to read Device Serial Number David Miller
2020-03-06  1:30               ` David Miller
2020-02-27 22:36 ` [PATCH 2/5] bnxt_en: use pci_get_dsn Jacob Keller
2020-03-02 22:25   ` Bjorn Helgaas
2020-02-27 22:36 ` [PATCH 3/5] scsi: qedf: " Jacob Keller
2020-02-27 22:36 ` [PATCH 4/5] ice: " Jacob Keller
2020-02-27 22:36 ` [PATCH 5/5] ixgbe: " Jacob Keller

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20200302232057.GA182308@google.com \
    --to=helgaas@kernel.org \
    --cc=QLogic-Storage-Upstream@cavium.com \
    --cc=jacob.e.keller@intel.com \
    --cc=jeffrey.t.kirsher@intel.com \
    --cc=linux-pci@vger.kernel.org \
    --cc=michael.chan@broadcom.com \
    --cc=netdev@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.