Comment 98 for bug 1245938

Bjorn Helgaas (bjorn-helgaas) wrote :

From the Linux kernel point of view, changing the BIOS option is not a good fix, and "pci=realloc=off" is just a workaround and not a real fix either. Linux should be able to work even without that, or at least give meaningful error messages.

The original problem appears to be that:

  - BIOS allocated space for the normal PCI BARs 0, 2 and 4, but not for the SR-IOV VF BARs,
  - Linux tried to allocate space for the SR-IOV BARs, but failed, and
  - Linux removed even the space allocated for the normal PCI BARs

Here's the initial state Linux found:

  pci 0000:22:00.0: [8086:10fb] type 00 class 0x020000
  pci 0000:22:00.0: reg 0x10: [mem 0xe9400000-0xe947ffff 64bit] # BAR 0
  pci 0000:22:00.0: reg 0x18: [io 0xdcc0-0xdcdf] # BAR 2
  pci 0000:22:00.0: reg 0x20: [mem 0xe95f8000-0xe95fbfff 64bit] # BAR 4
  pci 0000:22:00.0: reg 0x30: [mem 0xe9500000-0xe957ffff pref] # ROM BAR
  pci 0000:22:00.0: reg 0x184: [mem 0x00000000-0x00003fff 64bit] # SR-IOV BAR
  pci 0000:22:00.0: reg 0x190: [mem 0x00000000-0x00003fff 64bit] # SR-IOV BAR

After trying to move things around to provide space for the SR-IOV BARs:

  pci 0000:22:00.0: BAR 0: can't assign mem (size 0x80000) # BAR 0
  pci 0000:22:00.0: BAR 4: can't assign mem (size 0x4000) # BAR 4
  pci 0000:22:00.0: BAR 7: can't assign mem (size 0x100000) # SR-IOV BAR
  pci 0000:22:00.0: BAR 10: can't assign mem (size 0x100000) # SR-IOV BAR

This may have been fixed by changes in the resource assignment code. I don't remember similar recent problem reports.