• Yinghai Lu's avatar
    PCI: Restrict 64-bit prefetchable bridge windows to 64-bit resources · 5b285415
    Yinghai Lu authored
    This patch changes the way we handle 64-bit prefetchable bridge windows to
    make it more likely that we can assign space to all devices.
    
    Previously we put all prefetchable resources in the prefetchable bridge
    window.  If any of those resources was 32-bit only, we restricted the
    window to be below 4GB.
    
    After this patch, we only put 64-bit prefetchable resources in a 64-bit
    prefetchable window.  We put all 32-bit prefetchable resources in the
    non-prefetchable window, even if there are no 64-bit prefetchable
    resources.
    
    With the previous approach, if there was a 32-bit prefetchable resource
    behind a bridge, we forced the bridge's prefetchable window below 4GB,
    which meant that even if there was plenty of space above 4GB available, we
    couldn't use it, and assignment of large 64-bit resources could fail, as
    in the bugzilla below.
    
    The new strategy is:
    
      1) If the prefetchable window is 64 bits wide, we put only 64-bit
         prefetchable resources in it.  Any 32-bit prefetchable resources go in
         the non-prefetchable window.
    
      2) If the prefetchable window is 32 bits wide, we put both 32- and 64-bit
         prefetchable resources in it.
    
      3) If there is no prefetchable window, all MMIO resources go in the
         non-prefetchable window.
    
    This reduces performance for 32-bit prefetchable resources below a bridge
    with a 64-bit prefetchable window.  We previously assigned prefetchable
    space, but now we'll assign non-prefetchable space.  This is the case even
    if there are no 64-bit prefetchable resources, or if they would all fit
    below 4GB.  In those cases, the old strategy would work and would have
    better performance.
    
    [bhelgaas: write changelog, add bugzilla link, fold in mem64_mask removal]
    Link: https://bugzilla.kernel.org/show_bug.cgi?id=74151Tested-by: default avatarGuo Chao <yan@linux.vnet.ibm.com>
    Tested-by: default avatarWei Yang <weiyang@linux.vnet.ibm.com>
    Signed-off-by: default avatarYinghai Lu <yinghai@kernel.org>
    Signed-off-by: default avatarBjorn Helgaas <bhelgaas@google.com>
    5b285415
setup-res.c 9.51 KB