Messages in this thread | | | Date | Tue, 20 Jul 2010 10:18:55 -0700 | From | Ben Greear <> | Subject | Re: [PATCH] x86/pci/mrst: add extra check in fixed bar detection |
| |
On 07/16/2010 11:58 AM, Jacob Pan wrote: > Fixed bar capability structure is searched in PCI extended configuration > space. We need to make sure there is a valid capability id to begin with > otherwise, the search code may stuck in a infinite loop which results in > boot hang. > This patch adds additional check for cap ID 0, which is also invalid.
I think this should be added to the stable tree for 2.6.34 as well...
Thanks, Ben
> > Suggested-by: "H. Peter Anvin"<hpa@zytor.com> > > Signed-off-by: Jacob Pan<jacob.jun.pan@linux.intel.com> > --- > arch/x86/pci/mrst.c | 7 ++++--- > 1 files changed, 4 insertions(+), 3 deletions(-) > > diff --git a/arch/x86/pci/mrst.c b/arch/x86/pci/mrst.c > index c9649d0..8636567 100644 > --- a/arch/x86/pci/mrst.c > +++ b/arch/x86/pci/mrst.c > @@ -66,8 +66,9 @@ static int fixed_bar_cap(struct pci_bus *bus, unsigned int devfn) > devfn, pos, 4,&pcie_cap)) > return 0; > > - if (pcie_cap == 0xffffffff) > - return 0; > + if (PCI_EXT_CAP_ID(pcie_cap) == 0x0000 || > + PCI_EXT_CAP_ID(pcie_cap) == 0xffff) > + break; > > if (PCI_EXT_CAP_ID(pcie_cap) == PCI_EXT_CAP_ID_VNDR) { > raw_pci_ext_ops->read(pci_domain_nr(bus), bus->number, > @@ -76,7 +77,7 @@ static int fixed_bar_cap(struct pci_bus *bus, unsigned int devfn) > return pos; > } > > - pos = pcie_cap>> 20; > + pos = PCI_EXT_CAP_NEXT(pcie_cap); > } > > return 0;
-- Ben Greear <greearb@candelatech.com> Candela Technologies Inc http://www.candelatech.com
| |