[PATCH RFC v4 10/21] PCI: Fix assigning of fixed prefetchable resources
Bjorn Helgaas
helgaas at kernel.org
Wed Mar 27 07:37:47 AEDT 2019
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 at 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
>
More information about the Linuxppc-dev
mailing list