Message ID | 20190311133122.11417-11-s.miroshnichenko@yadro.com |
---|---|
State | Changes Requested |
Delegated to: | Bjorn Helgaas |
Headers | show |
Series | PCI: Allow BAR movement during hotplug | expand |
On Mon, Mar 11, 2019 at 04:31:11PM +0300, Sergey Miroshnichenko wrote: > Allow matching them to non-prefetchable windows, as it is done for movable > resources. Please make the commit log complete in itself, without requiring the subject. It's OK if you have to repeat the subject. IIUC, this is actually a bug fix and is not strictly related to movable resources. We should be able to have a IORESOURCE_PCI_FIXED prefetchable BAR in a non-prefetchable window. I suppose movable windows exposes this case because as currently implemented, it marks many more BARs as IORESOURCE_PCI_FIXED. I think we should use something other than IORESOURCE_PCI_FIXED for that case, so maybe this patch will end up being unnecessary? > Signed-off-by: Sergey Miroshnichenko <s.miroshnichenko@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 3644feb13179..be7d4e6d7b65 100644 > --- a/drivers/pci/setup-bus.c > +++ b/drivers/pci/setup-bus.c > @@ -1301,15 +1301,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.20.1 >
diff --git a/drivers/pci/setup-bus.c b/drivers/pci/setup-bus.c index 3644feb13179..be7d4e6d7b65 100644 --- a/drivers/pci/setup-bus.c +++ b/drivers/pci/setup-bus.c @@ -1301,15 +1301,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); } }
Allow matching them to non-prefetchable windows, as it is done for movable resources. Signed-off-by: Sergey Miroshnichenko <s.miroshnichenko@yadro.com> --- drivers/pci/setup-bus.c | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-)