Re: How to correctly reserve prefetchable bridge windows for large, resizable BARs behind PCIe switches (8x GPU, PEX890xx) - seeking guidance on upstreamable approach.
kernel test robot <[email protected]>
| Newsgroups | dev.linux.lists.oe-kbuild-all,org.freedesktop.lists.amd-gfx,org.kernel.vger.linux-pci |
|---|---|
| Message-ID | <[email protected]> |
Hi Geramy, kernel test robot noticed the following build errors: [auto build test ERROR on pci/next] [also build test ERROR on pci/for-linus linus/master next-20260826] [cannot apply to drm-misc/drm-misc-next v7.2] [If your patch is applied to the wrong git tree, kindly drop us a note. And when submitting patch, we suggest to use '--base' as documented in https://git-scm.com/docs/git-format-patch#_base_tree_information] url: https://github.com/intel-lab-lkp/linux/commits/Geramy-Loveless/How-to-correctly-reserve-prefetchable-bridge-windows-for-large-resizable-BARs-behind-PCIe-switches-8x-GPU-PEX890xx-seeki/20260826-132218 base: https://git.kernel.org/pub/scm/linux/kernel/git/pci/pci.git next patch link: https://lore.kernel.org/r/a2292dfb-2ee5-4988-ac67-c75dd3e97a4c%40jqluv.com patch subject: How to correctly reserve prefetchable bridge windows for large, resizable BARs behind PCIe switches (8x GPU, PEX890xx) - seeking guidance on upstreamable approach. config: i386-randconfig-015-20260827 (https://download.01.org/0day-ci/archive/20260828/[email protected]/config) compiler: gcc-14 (Debian 14.2.0-19) 14.2.0 reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20260828/[email protected]/reproduce) If you fix the issue in a separate patch/commit (i.e. not just a new version of the same patch/commit), kindly add following tags | Reported-by: kernel test robot <[email protected]> | Closes: https://lore.kernel.org/oe-kbuild-all/[email protected]/ All errors (new ones prefixed by >>): ld: drivers/pci/setup-res.o: in function `pci_align_resource': >> drivers/pci/setup-res.c:289:(.text+0x92a): undefined reference to `__udivdi3' >> ld: drivers/pci/setup-res.c:289:(.text+0x939): undefined reference to `__udivdi3' ld: drivers/gpu/drm/amd/display/dc/dml2_0/dml21/src/dml2_utm_soc_bb/dml2_utm_soc_bb_dcn6.o: in function `dchub_v2_get_sop_total_available_bandwidth_KBps': drivers/gpu/drm/amd/amdgpu/../display/dc/dml2_0/dml21/inc/bounding_boxes/utm_qos_model_dchub_v2.h:71:(.text+0x61): undefined reference to `__udivdi3' ld: drivers/gpu/drm/amd/amdgpu/../display/dc/dml2_0/dml21/inc/bounding_boxes/utm_qos_model_dchub_v2.h:79:(.text+0x9d): undefined reference to `__udivdi3' ld: drivers/gpu/drm/amd/amdgpu/../display/dc/dml2_0/dml21/inc/bounding_boxes/utm_qos_model_dchub_v2.h:66:(.text+0xc0): undefined reference to `__udivdi3' ld: drivers/gpu/drm/amd/display/dc/dml2_0/dml21/src/dml2_utm_soc_bb/dml2_utm_soc_bb_dcn6.o:drivers/gpu/drm/amd/amdgpu/../display/dc/dml2_0/dml21/inc/bounding_boxes/utm_qos_model_dchub_v2.h:76: more undefined references to `__udivdi3' follow vim +289 drivers/pci/setup-res.c 262 263 /* 264 * For mem bridge windows, try to relocate tail remainder space to space 265 * before res->start if there's enough free space there. This enables 266 * tighter packing for resources. 267 */ 268 resource_size_t pci_align_resource(struct pci_dev *dev, 269 const struct resource *res, 270 const struct resource *empty_res, 271 resource_size_t size, 272 resource_size_t align) 273 { 274 resource_size_t remainder, start_addr; 275 276 if (!(res->flags & IORESOURCE_MEM)) 277 return res->start; 278 279 if (IS_ALIGNED(size, align)) 280 return res->start; 281 282 remainder = size - ALIGN_DOWN(size, align); 283 /* 284 * A window holding several align-sized resources has one tail per 285 * resource, but only the lowest can tuck below the first aligned 286 * boundary; the rest sit above it. Relocate a single tail's worth. 287 */ 288 if (ALIGN_DOWN(size, align) > align) > 289 remainder /= ALIGN_DOWN(size, align) / align; 290 /* Don't mess with size that doesn't align with window size granularity */ 291 if (!IS_ALIGNED(remainder, pci_min_window_alignment(dev->bus, res->flags))) 292 return res->start; 293 /* Try to place remainder that doesn't fill align before */ 294 if (res->start < remainder) 295 return res->start; 296 start_addr = res->start - remainder; 297 if (empty_res->start > start_addr) 298 return res->start; 299 300 pci_dbg(dev, "%pR: moving candidate start address below align to %llx\n", 301 res, (unsigned long long)start_addr); 302 return start_addr; 303 } 304 -- 0-DAY CI Kernel Test Service https://github.com/intel/lkp-tests/wiki