PCI: Rewrite bridge window head alignment function
The calculation of bridge window head alignment is done by
calculate_mem_align() [*]. With the default bridge window alignment, it
is used for both head and tail alignment.
The selected head alignment does not always result in tight-fitting
resources (gap at
d4f00000-
d4ffffff):
d4800000-
dbffffff : PCI Bus 0000:06
d4800000-
d48fffff : PCI Bus 0000:07
d4800000-
d4803fff : 0000:07:00.0
d4800000-
d4803fff : nvme
d4900000-
d49fffff : PCI Bus 0000:0a
d4900000-
d490ffff : 0000:0a:00.0
d4900000-
d490ffff : r8169
d4910000-
d4913fff : 0000:0a:00.0
d4a00000-
d4cfffff : PCI Bus 0000:0b
d4a00000-
d4bfffff : 0000:0b:00.0
d4a00000-
d4bfffff : 0000:0b:00.0
d4c00000-
d4c07fff : 0000:0b:00.0
d4d00000-
d4dfffff : PCI Bus 0000:15
d4d00000-
d4d07fff : 0000:15:00.0
d4d00000-
d4d07fff : xhci-hcd
d4e00000-
d4efffff : PCI Bus 0000:16
d4e00000-
d4e7ffff : 0000:16:00.0
d4e80000-
d4e803ff : 0000:16:00.0
d4e80000-
d4e803ff : ahci
d5000000-
dbffffff : PCI Bus 0000:0c
This has not caused problems (for years) with the default bridge window
tail alignment that grossly over-estimates the required tail alignment
leaving more tail room than necessary. With the introduction of relaxed
tail alignment that leaves no extra tail room whatsoever, any gaps will
immediately turn into assignment failures.
Introduce head alignment calculation that ensures no gaps are left and
apply the new approach when using relaxed alignment. We may want to
consider using it for the normal alignment eventually, but as the first
step, solve only the problem with the relaxed tail alignment.
([*] I don't understand the algorithm in calculate_mem_align().)
Link: https://git.kernel.org/history/history/c/5d0a8965aea9
Closes: https://bugzilla.kernel.org/show_bug.cgi?id=220775
Reported-by: Malte Schröder <malte+lkml@tnxip.de>
Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
Tested-by: Malte Schröder <malte+lkml@tnxip.de>
Cc: stable@vger.kernel.org
Link: https://patch.msgid.link/20251219174036.16738-3-ilpo.jarvinen@linux.intel.com