From mboxrd@z Thu Jan 1 00:00:00 1970 From: Peter Xu Subject: Re: [PATCH kvm-unit-tests v2 08/17] pci: provide pci_scan_bars() Date: Mon, 14 Nov 2016 15:33:22 -0500 Message-ID: <20161114203322.GD3125@pxdev.xzpeter.org> References: <1478704224-20472-1-git-send-email-peterx@redhat.com> <1478704224-20472-9-git-send-email-peterx@redhat.com> <20161110192419.ex77s7inrmejmt7r@hawk.localdomain> Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 Cc: kvm@vger.kernel.org, rkrcmar@redhat.com, agordeev@redhat.com, jan.kiszka@web.de, pbonzini@redhat.com To: Andrew Jones Return-path: Received: from mx1.redhat.com ([209.132.183.28]:42606 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932462AbcKNUdZ (ORCPT ); Mon, 14 Nov 2016 15:33:25 -0500 Content-Disposition: inline In-Reply-To: <20161110192419.ex77s7inrmejmt7r@hawk.localdomain> Sender: kvm-owner@vger.kernel.org List-ID: 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)); 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++; } } --------->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. Thanks, -- peterx