public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* Re: [PATCH 1/4] PCI: refactor io size calculation code
@ 2011-04-11 13:18 Daniel Hellstrom
  2011-04-11 14:42 ` Linus Torvalds
  0 siblings, 1 reply; 5+ messages in thread
From: Daniel Hellstrom @ 2011-04-11 13:18 UTC (permalink / raw)
  To: Ram Pai
  Cc: linux-pci, linux-kernel, Clemens Ladisch, Yinghai Lu,
	Linus Torvalds, Kristoffer Glembo, daniel

>
>
>refactor  code  that  calculates  the  io  size in pbus_size_io()
>and pbus_mem_io() into separate functions.
>
>Signed-off-by: Ram Pai <linuxram@xxxxxxxxxx>
>---
> drivers/pci/setup-bus.c |   66 ++++++++++++++++++++++++++++++-----------------
> 1 files changed, 42 insertions(+), 24 deletions(-)
>
>diff --git a/drivers/pci/setup-bus.c b/drivers/pci/setup-bus.c
>index 66cb8f4..2121215 100644
>--- a/drivers/pci/setup-bus.c
>+++ b/drivers/pci/setup-bus.c
>@@ -404,6 +404,43 @@ static struct resource *find_free_bus_resource(struct pci_bus *bus, unsigned lon
> 	return NULL;
> }
>
...

>+
>+static resource_size_t calculate_memsize(resource_size_t size,
>+		resource_size_t min_size,
>+		resource_size_t size1,
>+		resource_size_t old_size,
>+		resource_size_t align)
>+{
>+	if (size < min_size)
>+		size = min_size;
>+	if (old_size == 1 )
>+		old_size = 0;
>+	if (size < old_size)
>+		size = old_size;
>+	size = ALIGN(size + size1, align);
>+	return size;
>+}
>+
> /* Sizing the IO windows of the PCI-PCI bridge is trivial,
>    since these windows have 4K granularity and the IO ranges
>    of non-bridge PCI devices are limited to 256 bytes.
>
>  
>
...

>@@ -516,14 +542,6 @@ static int pbus_size_mem(struct pci_bus *bus, unsigned long mask,
> 			mem64_mask &= r->flags & IORESOURCE_MEM_64;
> 		}
> 	}
>-	if (size < min_size)
>-		size = min_size;
>-	old_size = resource_size(b_res);
>-	if (old_size == 1)
>-		old_size = 0;
>-	if (size < old_size)
>-		size = old_size;
>-
> 	align = 0;
> 	min_align = 0;
> 	for (order = 0; order <= max_order; order++) {
>@@ -537,7 +555,7 @@ static int pbus_size_mem(struct pci_bus *bus, unsigned long mask,
> 			min_align = align1 >> 1;
> 		align += aligns[order];
> 	}
>-	size = ALIGN(size, min_align);
>+	size = calculate_memsize(size, min_size, 0, resource_size(b_res), align);
>  
>
On my SPARC32/LEON4 PCI system I get overlapped areas, double mapped 
resources. Some BARs on PCIBUS0 are in the same non-prefetchable memory 
range as the secondary bus PCIBUS1. Changing align to min_align in the 
above call to calculate_memsize() fixes the problem, and the memory 
allocation is the same as with 2.6.36.4 kernel.

I belive this is just a typo.

Best Regards,
Daniel Hellstrom
Aeroflex Gaisler

> 	if (!size) {
> 		if (b_res->start || b_res->end)
> 			dev_info(&bus->self->dev, "disabling bridge window "
>-- 
>1.6.5.2
>

^ permalink raw reply	[flat|nested] 5+ messages in thread
* [PATCH 0/4] PCI: preallocate resource patch series
@ 2011-02-15  1:43 Ram Pai
  2011-02-15  1:43 ` [PATCH 1/4] PCI: refactor io size calculation code Ram Pai
  0 siblings, 1 reply; 5+ messages in thread
From: Ram Pai @ 2011-02-15  1:43 UTC (permalink / raw)
  To: linux-pci, jbarnes
  Cc: Ram Pai, linux-kernel, clemens, Yinghai Lu, Linus Torvalds,
	Bjorn Helgaas

    Linux tries to pre-allocate minimal resources to hotplug bridges. This
    works fine as long as there are enough resources  to satisfy all other
    genuine resource requirements. However if enough resources are not
    available to satisfy any of these nice-to-have pre-allocations, the
    resource-allocator reports errors and returns failure.

    This patch distinguishes between must-have resource from nice-to-have
    resource.  Any failure to allocate nice-to-have resources are ignored.

    This behavior can be particularly useful to trigger automatic
    reallocation when the OS discovers genuine allocation-conflicts
    or genuine unallocated-requests caused by buggy allocation behavior
    of the native BIOS/uEFI.

    https://bugzilla.kernel.org/show_bug.cgi?id=15960 captures the movitation
    behind the patch. This patch is verified to resolve the above bug.

    The first 3 patches refactors common code and builds the ground work
    for the 4 patch which contains the core piece of the fix.

    patch 1/4: refactors the io size calculation logic
    patch 2/4: refactors the list freeing logic
    patch 3/4: refactors the resource reset logic
    patch 4/4: contains the fix to the original problem

    drivers/pci/setup-bus.c   |  269 ++++++++++++++++++++++++++++++++++------------

    Signed-off-by: Ram Pai <linuxram@us.ibm.com>

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2011-04-11 15:59 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-04-11 13:18 [PATCH 1/4] PCI: refactor io size calculation code Daniel Hellstrom
2011-04-11 14:42 ` Linus Torvalds
2011-04-11 14:53   ` Daniel Hellstrom
2011-04-11 15:59   ` Ram Pai
  -- strict thread matches above, loose matches on Subject: below --
2011-02-15  1:43 [PATCH 0/4] PCI: preallocate resource patch series Ram Pai
2011-02-15  1:43 ` [PATCH 1/4] PCI: refactor io size calculation code Ram Pai

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox