• Ram Pai's avatar
    PCI: pre-allocate additional resources to devices only after successful... · c8adf9a3
    Ram Pai authored
    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: default avatarRam Pai <linuxram@us.ibm.com>
    Signed-off-by: default avatarJesse Barnes <jbarnes@virtuousgeek.org>
    c8adf9a3
setup-bus.c 28.7 KB