On Tue, 7 Sep 2010 17:25:20 -0700 Chris Wright <chr...@sous-sol.org> wrote:
> From: Cam Macdonell <c...@cs.ualberta.ca> > > * Cam Macdonell (c...@cs.ualberta.ca) wrote: > > It seems it was the alignment value being passed back from > > pci_resource_alignment(). The return type is an int, which was > > causing value of 2GB to be sign extended to to 0xffffffff80000000. > > Changing the return type to resource_size_t allows BAR values >= 2GB > > to be successfully assigned. > <snip> > > -static inline int pci_resource_alignment(struct pci_dev *dev, > > +static inline resource_size_t pci_resource_alignment(struct pci_dev *dev, > > struct resource *res) > > Yes, that's my mistake. Thanks for debugging the issue Cam. > This fixes the prototype for both pci_resource_alignment() and > pci_sriov_resource_alignment(). > > Patch started as debugging effort from Cam Macdonell. > > Cc: Cam Macdonell <c...@cs.ualberta.ca> > Cc: Avi Kivity <a...@redhat.com> > Cc: Jesse Barnes <jbar...@virtuousgeek.org> > [chrisw: add iov bits] > Signed-off-by: Chris Wright <chr...@sous-sol.org> > --- > drivers/pci/iov.c | 2 +- > drivers/pci/pci.h | 5 +++-- > 2 files changed, 4 insertions(+), 3 deletions(-) > > diff --git a/drivers/pci/iov.c b/drivers/pci/iov.c > index ce6a366..553d8ee 100644 > --- a/drivers/pci/iov.c > +++ b/drivers/pci/iov.c > @@ -608,7 +608,7 @@ int pci_iov_resource_bar(struct pci_dev *dev, int resno, > * the VF BAR size multiplied by the number of VFs. The alignment > * is just the VF BAR size. > */ > -int pci_sriov_resource_alignment(struct pci_dev *dev, int resno) > +resource_size_t pci_sriov_resource_alignment(struct pci_dev *dev, int resno) > { > struct resource tmp; > enum pci_bar_type type; > diff --git a/drivers/pci/pci.h b/drivers/pci/pci.h > index 679c39d..5d0aeb1 100644 > --- a/drivers/pci/pci.h > +++ b/drivers/pci/pci.h > @@ -262,7 +262,8 @@ extern int pci_iov_init(struct pci_dev *dev); > extern void pci_iov_release(struct pci_dev *dev); > extern int pci_iov_resource_bar(struct pci_dev *dev, int resno, > enum pci_bar_type *type); > -extern int pci_sriov_resource_alignment(struct pci_dev *dev, int resno); > +extern resource_size_t pci_sriov_resource_alignment(struct pci_dev *dev, > + int resno); > extern void pci_restore_iov_state(struct pci_dev *dev); > extern int pci_iov_bus_range(struct pci_bus *bus); > > @@ -318,7 +319,7 @@ static inline int pci_ats_enabled(struct pci_dev *dev) > } > #endif /* CONFIG_PCI_IOV */ > > -static inline int pci_resource_alignment(struct pci_dev *dev, > +static inline resource_size_t pci_resource_alignment(struct pci_dev *dev, > struct resource *res) > { > #ifdef CONFIG_PCI_IOV > > Applied to my for-linus branch, thanks. -- Jesse Barnes, Intel Open Source Technology Center