Skip to content

Commit 15c5867

Browse files
ij-intelbjorn-helgaas
authored andcommitted
PCI: Don't print stale information about resource
pbus_size_mem() logs the bridge window resource using pci_info() before the start and end fields of the resource have been updated which then prints stale information. Set resource addresses earlier to make understanding logs easier. Regrettably, this results in setting the addresses multiple times but that seems unavoidable. Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com> Signed-off-by: Bjorn Helgaas <bhelgaas@google.com> Link: https://patch.msgid.link/20250924135641.3399-1-ilpo.jarvinen@linux.intel.com
1 parent 43b4f7c commit 15c5867

File tree

1 file changed

+10
-5
lines changed

1 file changed

+10
-5
lines changed

drivers/pci/setup-bus.c

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1317,6 +1317,7 @@ static void pbus_size_mem(struct pci_bus *bus, unsigned long type,
13171317
resource_size_t children_add_align = 0;
13181318
resource_size_t add_align = 0;
13191319
resource_size_t relaxed_align;
1320+
resource_size_t old_size;
13201321

13211322
if (!b_res)
13221323
return;
@@ -1387,36 +1388,40 @@ static void pbus_size_mem(struct pci_bus *bus, unsigned long type,
13871388
}
13881389
}
13891390

1391+
old_size = resource_size(b_res);
13901392
win_align = window_alignment(bus, b_res->flags);
13911393
min_align = calculate_mem_align(aligns, max_order);
13921394
min_align = max(min_align, win_align);
1393-
size0 = calculate_memsize(size, min_size, 0, 0, resource_size(b_res), min_align);
1395+
size0 = calculate_memsize(size, min_size, 0, 0, old_size, min_align);
13941396

1395-
if (size0)
1397+
if (size0) {
1398+
resource_set_range(b_res, min_align, size0);
13961399
b_res->flags &= ~IORESOURCE_DISABLED;
1400+
}
13971401

13981402
if (bus->self && size0 &&
13991403
!pbus_upstream_space_available(bus, b_res, size0, min_align)) {
14001404
relaxed_align = 1ULL << (max_order + __ffs(SZ_1M));
14011405
relaxed_align = max(relaxed_align, win_align);
14021406
min_align = min(min_align, relaxed_align);
1403-
size0 = calculate_memsize(size, min_size, 0, 0, resource_size(b_res), win_align);
1407+
size0 = calculate_memsize(size, min_size, 0, 0, old_size, win_align);
1408+
resource_set_range(b_res, min_align, size0);
14041409
pci_info(bus->self, "bridge window %pR to %pR requires relaxed alignment rules\n",
14051410
b_res, &bus->busn_res);
14061411
}
14071412

14081413
if (realloc_head && (add_size > 0 || children_add_size > 0)) {
14091414
add_align = max(min_align, add_align);
14101415
size1 = calculate_memsize(size, min_size, add_size, children_add_size,
1411-
resource_size(b_res), add_align);
1416+
old_size, add_align);
14121417

14131418
if (bus->self && size1 &&
14141419
!pbus_upstream_space_available(bus, b_res, size1, add_align)) {
14151420
relaxed_align = 1ULL << (max_order + __ffs(SZ_1M));
14161421
relaxed_align = max(relaxed_align, win_align);
14171422
min_align = min(min_align, relaxed_align);
14181423
size1 = calculate_memsize(size, min_size, add_size, children_add_size,
1419-
resource_size(b_res), win_align);
1424+
old_size, win_align);
14201425
pci_info(bus->self,
14211426
"bridge window %pR to %pR requires relaxed alignment rules\n",
14221427
b_res, &bus->busn_res);

0 commit comments

Comments
 (0)