Skip to content
  • Daniil Tatianin's avatar
    pciinit: don't misalign large BARs · e5f2e4c6
    Daniil Tatianin authored
    Previously we would unconditionally lower the alignment for large BARs
    in case their alignment was greater than "pci_mem64_top >> 11", this
    would make it impossible to use these devices by the kernel:
        [   13.821108] pci 0000:9c:00.0: can't claim BAR 1 [mem 0x66000000000-0x67fffffffff 64bit pref]: no compatible bridge window
        [   13.823492] pci 0000:9d:00.0: can't claim BAR 1 [mem 0x64000000000-0x65fffffffff 64bit pref]: no compatible bridge window
        [   13.824218] pci 0000:9e:00.0: can't claim BAR 1 [mem 0x62000000000-0x63fffffffff 64bit pref]: no compatible bridge window
        [   13.828322] pci 0000:8a:00.0: can't claim BAR 1 [mem 0x6e000000000-0x6ffffffffff 64bit pref]: no compatible bridge window
        [   13.830691] pci 0000:8b:00.0: can't claim BAR 1 [mem 0x6c000000000-0x6dfffffffff 64bit pref]: no compatible bridge window
        [   13.832218] pci 0000:8c:00.0: can't claim BAR 1 [mem 0x6a000000000-0x6bfffffffff 64bit pref]: no compatible bridge window
    
    Fix it by only overwriting the alignment in case it's actually greater
    than the desired by the BAR window.
    
    Fixes: 96a8d130
    
     ("be less conservative with the 64bit pci io window")
    Signed-off-by: default avatarDaniil Tatianin <d-tatianin@yandex-team.ru>
    Reviewed-by: Gerd Hoffmann's avatarGerd Hoffmann <kraxel@redhat.com>
    Reviewed-by: default avatarPhilippe Mathieu-Daudé <philmd@linaro.org>
    e5f2e4c6