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.
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 0xe947ffff 64bit] # BAR 0 0xe95fbfff 64bit] # BAR 4 0xe957ffff pref] # ROM BAR 0x00003fff 64bit] # SR-IOV BAR 0x00003fff 64bit] # SR-IOV BAR
pci 0000:22:00.0: reg 0x10: [mem 0xe9400000-
pci 0000:22:00.0: reg 0x18: [io 0xdcc0-0xdcdf] # BAR 2
pci 0000:22:00.0: reg 0x20: [mem 0xe95f8000-
pci 0000:22:00.0: reg 0x30: [mem 0xe9500000-
pci 0000:22:00.0: reg 0x184: [mem 0x00000000-
pci 0000:22:00.0: reg 0x190: [mem 0x00000000-
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.