]> xenbits.xensource.com Git - legacy/linux-2.6.18-xen.git/commitdiff
Backport: PCI: fix 64-vbit prefetchable memory resource BARs
authorKeir Fraser <keir.fraser@citrix.com>
Fri, 13 Mar 2009 07:40:22 +0000 (07:40 +0000)
committerKeir Fraser <keir.fraser@citrix.com>
Fri, 13 Mar 2009 07:40:22 +0000 (07:40 +0000)
    commit e354597cce8d219d135d65e585dc4f30323486b9
    Author: Peter Chubb <peterc@gelato.unsw.edu.au>
    Date:   Mon Oct 13 11:49:04 2008 +1100

    PCI: fix 64-vbit prefetchable memory resource BARs

    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 <matthew@wil.cx>
Signed-off-by: Peter Chubb <peterc@gelato.unsw.edu.au>
Signed-off-by: Jesse Barnes <jbarnes@virtuousgeek.org>
Signed-off-by: Yu Zhao <yu.zhao@intel.com>
drivers/pci/probe.c

index 986dc30dc16eff87ecd1fff14c1d648a703b162d..82beb568095b974d15f9a6fa6ad4474d4bd36220 100644 (file)
@@ -157,7 +157,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;
 }