From: Peter Chubb Date: Mon, 13 Oct 2008 00:49:04 +0000 (+1100) Subject: PCI: fix 64-vbit prefetchable memory resource BARs X-Git-Tag: v2.6.27.5~21 X-Git-Url: https://git.karo-electronics.de/?a=commitdiff_plain;h=f20f02abf128336b155c31df5144245d849bea5e;p=karo-tx-linux.git PCI: fix 64-vbit prefetchable memory resource BARs commit e354597cce8d219d135d65e585dc4f30323486b9 upstream. Since patch 6ac665c63dcac8fcec534a1d224ecbb8b867ad59 my infiniband controller hasn't worked. This is because it has 64-bit prefetchable memory, which was mistakenly being taken to be 32-bit memory. The resource flags in this case are PCI_BASE_ADDRESS_MEM_TYPE_64 | PCI_BASE_ADDRESS_MEM_PREFETCH. This patch checks only for the PCI_BASE_ADDRESS_MEM_TYPE_64 bit; thus whether the region is prefetchable or not is ignored. This fixes my Infiniband. Reviewed-by: Matthew Wilcox Signed-off-by: Peter Chubb Signed-off-by: Jesse Barnes Cc: Bjorn Helgaas Signed-off-by: Greg Kroah-Hartman --- diff --git a/drivers/pci/probe.c b/drivers/pci/probe.c index 36698e57b97f..bcafbd6c5908 100644 --- a/drivers/pci/probe.c +++ b/drivers/pci/probe.c @@ -219,7 +219,7 @@ static inline enum pci_bar_type decode_bar(struct resource *res, u32 bar) res->flags = bar & ~PCI_BASE_ADDRESS_MEM_MASK; - if (res->flags == PCI_BASE_ADDRESS_MEM_TYPE_64) + if (res->flags & PCI_BASE_ADDRESS_MEM_TYPE_64) return pci_bar_mem64; return pci_bar_mem32; }