Allow matching IORESOURCE_PCI_FIXED prefetchable BARs to non-prefetchable
windows, so they follow the same rules as immovable BARs.

Signed-off-by: Sergey Miroshnichenko <s.miroshniche...@yadro.com>
---
 drivers/pci/setup-bus.c | 13 +++++++++----
 1 file changed, 9 insertions(+), 4 deletions(-)

diff --git a/drivers/pci/setup-bus.c b/drivers/pci/setup-bus.c
index 653ba4d5f191..c7365998fbd6 100644
--- a/drivers/pci/setup-bus.c
+++ b/drivers/pci/setup-bus.c
@@ -1339,15 +1339,20 @@ static void assign_fixed_resource_on_bus(struct pci_bus 
*b, struct resource *r)
 {
        int i;
        struct resource *parent_r;
-       unsigned long mask = IORESOURCE_IO | IORESOURCE_MEM |
-                            IORESOURCE_PREFETCH;
+       unsigned long mask = IORESOURCE_TYPE_BITS;
 
        pci_bus_for_each_resource(b, parent_r, i) {
                if (!parent_r)
                        continue;
 
-               if ((r->flags & mask) == (parent_r->flags & mask) &&
-                   resource_contains(parent_r, r))
+               if ((r->flags & mask) != (parent_r->flags & mask))
+                       continue;
+
+               if (parent_r->flags & IORESOURCE_PREFETCH &&
+                   !(r->flags & IORESOURCE_PREFETCH))
+                       continue;
+
+               if (resource_contains(parent_r, r))
                        request_resource(parent_r, r);
        }
 }
-- 
2.23.0

Reply via email to