BAR allocation by BIOS/UEFI/bootloader/firmware may be non-optimal and it may even clash with the kernel's BAR assignment algorithm. For example, if no space was reserved for SR-IOV BARs, and this bridge window is packed between immovable BARs (so it is unable to extend), and if this window can't be moved, the next PCI rescan will fail, as the kernel tries to find a space for all the BARs, including SR-IOV. With this patch the kernel will use its own methods of BAR allocating when possible, increasing the chances of successful hotplug. Also add a workaround for implicitly used video BARs on x86. Signed-off-by: Sergey Miroshnichenko <s.miroshnichenko@xxxxxxxxx> --- drivers/pci/probe.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/drivers/pci/probe.c b/drivers/pci/probe.c index 94bbdf9b9dc1..73452aa81417 100644 --- a/drivers/pci/probe.c +++ b/drivers/pci/probe.c @@ -305,6 +305,16 @@ int __pci_read_base(struct pci_dev *dev, enum pci_bar_type type, pos, (unsigned long long)region.start); } + if (pci_can_move_bars && + !(res->flags & IORESOURCE_IO) && + (dev->class >> 8) != PCI_CLASS_DISPLAY_VGA) { + pci_warn(dev, "ignore the current offset of BAR %llx-%llx\n", + l64, l64 + sz64 - 1); + res->start = 0; + res->end = sz64 - 1; + res->flags |= IORESOURCE_SIZEALIGN; + } + goto out; -- 2.23.0