On 02/23/2016 08:47 AM, Bjorn Helgaas wrote: > Use usleep_range() instead of udelay() while waiting for a VPD access to > complete. This is not a performance path, so no need to hog the CPU. > > Rationale for usleep_range() parameters: > > We clear PCI_VPD_ADDR_F for a read (or set it for a write), then wait for > the device to change it. For a device that updates PCI_VPD_ADDR between > our config write and subsequent config read, we won't sleep at all and > can get the device's maximum rate. > > Sleeping a minimum of 10 usec per 4-byte access limits throughput to > about 400Kbytes/second. VPD is small (32K bytes at most), and most > devices use only a fraction of that. > > We back off exponentially up to 1024 usec per iteration. If we reach > 1024, we've already waited up to 1008 usec (16 + 32 + ... + 512), so if > we miss an update and wait an extra 1024 usec, we can still get about 1/2 > of the device's maximum rate. > > Signed-off-by: Bjorn Helgaas <bhelgaas@xxxxxxxxxx> > --- Reviewed-by: Hannes Reinecke <hare@xxxxxxxx> Cheers, Hannes -- Dr. Hannes Reinecke zSeries & Storage hare@xxxxxxx +49 911 74053 688 SUSE LINUX Products GmbH, Maxfeldstr. 5, 90409 Nürnberg GF: J. Hawn, J. Guild, F. Imendörffer, HRB 16746 (AG Nürnberg) -- To unsubscribe from this list: send the line "unsubscribe linux-pci" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html