On Mon, Nov 14, 2016 at 03:33:22PM -0500, Peter Xu wrote: > On Thu, Nov 10, 2016 at 08:24:19PM +0100, Andrew Jones wrote: > > [...] > > > > +void pci_scan_bars(struct pci_dev *dev) > > > +{ > > > + int i = 0; > > > + > > > + for (i = 0; i < PCI_BAR_NUM; i++) { > > > + if (!pci_bar_is_valid(dev, i)) > > > + continue; > > > + dev->bar[i] = pci_bar_get_addr(dev, i); > > > > What happens when you get_addr a 64-bit bar in the middle? > > Shouldn't we skip that? > > Hmm yes... Do you like this? > > ---------8<---------- > > diff --git a/lib/pci.c b/lib/pci.c > index 0593699..2a58b30 100644 > --- a/lib/pci.c > +++ b/lib/pci.c > @@ -230,11 +230,15 @@ void pci_print(void) > > void pci_scan_bars(struct pci_dev *dev) > { > - int i = 0; > + int i; > + > + memset(&dev->bar[0], 0, sizeof(dev->bar)); I'm not sure what this memset is for. Anyway, if you need to zero a bar, why not just bar = (phys_addr_t)0; > > for (i = 0; i < PCI_BAR_NUM; i++) { > if (!pci_bar_is_valid(dev, i)) > continue; > dev->bar[i] = pci_bar_get_addr(dev, i); > + if (pci_bar_is64(dev, i)) > + i++; > } yes, this is consistent with how Alex did it in pci_probe. So looks good to me. > } > > --------->8---------- > > pci_bar_is64() is called twice per bar, but I think it's okay here > since it's during init and the whole scan is called only once for 6 > bars. yeah, the "inefficiency" is no biggy. Thanks, drew -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html