PCI: pre-allocate additional resources to devices only after successful allocation...
authorRam Pai <linuxram@us.ibm.com>
Tue, 15 Feb 2011 01:43:20 +0000 (17:43 -0800)
committerJesse Barnes <jbarnes@virtuousgeek.org>
Fri, 4 Mar 2011 18:46:47 +0000 (10:46 -0800)
commitc8adf9a3e873eddaaec11ac410a99ef6b9656938
tree020eacc6e04b1f78268c2c3508d6ac88cae1806c
parentfc075e1da1b96ef65c32e83648055606b8204b58
PCI: pre-allocate additional resources to devices only after successful allocation of essential resources.

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.

    changelog v2:  o  fixed a bug where pci_assign_resource() was called on a
       resource of zero resource size.

    changelog v3:  addressed Bjorn's comment
            o  "Please don't indent and right-justify the changelog".
            o  removed add_size from struct resource.  The additional
       size is now tracked using a linked list.

    changelog v4:  o moved freeing up of elements in head list from
     assign_requested_resources_sorted() to
     __assign_resources_sorted().
            o removed a wrong reference to 'add_size' in
     pbus_size_mem().
            o some code optimizations in adjust_resources_sorted()
     and assign_requested_resources_sorted()

    changelog v5:  o moved freeing up of elements in head list from
     assign_requested_resources_sorted() to
     __assign_resources_sorted().
            o removed a wrong reference to 'add_size' in
     pbus_size_mem().
            o some code optimizations in adjust_resources_sorted()
     and assign_requested_resources_sorted()

    changelog v5:  o factored out common code and made them into
separate independent patches
            o added comments in kdoc format
       o added a BUG_ON in pci_assign_unassigned_resources()
 to catch for memory leak.

Signed-off-by: Ram Pai <linuxram@us.ibm.com>
Signed-off-by: Jesse Barnes <jbarnes@virtuousgeek.org>
drivers/pci/setup-bus.c