• Bjorn Helgaas's avatar
    PCI: Clear IORESOURCE_UNSET when clipping a bridge window · b838b39e
    Bjorn Helgaas authored
    c770cb4c ("PCI: Mark invalid BARs as unassigned") sets IORESOURCE_UNSET
    if we fail to claim a resource.  If we tried to claim a bridge window,
    failed, clipped the window, and tried to claim the clipped window, we
    failed again because of IORESOURCE_UNSET:
    
      pci_bus 0000:00: root bus resource [mem 0xc0000000-0xffffffff window]
      pci 0000:00:01.0: can't claim BAR 15 [mem 0xbdf00000-0xddefffff 64bit pref]: no compatible bridge window
      pci 0000:00:01.0: [mem size 0x20000000 64bit pref] clipped to [mem size 0x1df00000 64bit pref]
      pci 0000:00:01.0:   bridge window [mem size 0x1df00000 64bit pref]
      pci 0000:00:01.0: can't claim BAR 15 [mem size 0x1df00000 64bit pref]: no address assigned
    
    The 00:01.0 window started as [mem 0xbdf00000-0xddefffff 64bit pref].  That
    starts before the host bridge window [mem 0xc0000000-0xffffffff window], so
    we clipped the 00:01.0 window to [mem 0xc0000000-0xddefffff 64bit pref].
    But we left it marked IORESOURCE_UNSET, so the second claim failed when it
    should have succeeded.
    
    This means downstream devices will also fail for lack of resources, e.g.,
    in the bugzilla below,
    
      radeon 0000:01:00.0: Fatal error during GPU init
    
    Clear IORESOURCE_UNSET when we clip a bridge window.  Also clear
    IORESOURCE_UNSET in our copy of the unclipped window so we can see exactly
    what the original window was and how it now fits inside the upstream
    window.
    
    Fixes: c770cb4c ("PCI: Mark invalid BARs as unassigned")
    Link: https://bugzilla.kernel.org/show_bug.cgi?id=85491#c47Based-on-patch-by: default avatarLorenzo Pieralisi <lorenzo.pieralisi@arm.com>
    Based-on-patch-by: default avatarYinghai Lu <yinghai@kernel.org>
    Tested-by: default avatarLorenzo Pieralisi <lorenzo.pieralisi@arm.com>
    Signed-off-by: default avatarBjorn Helgaas <bhelgaas@google.com>
    Reviewed-by: default avatarLorenzo Pieralisi <lorenzo.pieralisi@arm.com>
    Acked-by: default avatarYinghai Lu <yinghai@kernel.org>
    CC: stable@vger.kernel.org	# v4.1+
    b838b39e
bus.c 9.4 KB