Wind River Support Network


LIN8-2251 : CLONE - PCIe can't assign mem (size 0x40000000), half of that size works (512MB)

Created: Dec 17, 2015    Updated: Dec 3, 2018
Resolved Date: Apr 10, 2016
Previous ID: LIN6-10662
Found In Version: 8.0
Fix Version:
Severity: Standard
Applicable for: Wind River Linux 8
Component/s: Kernel
Host OS: Linux 64
Architecture: IA64


When trying to get the kernel to assign a 1GB of memory to a new PCIe NIC during the boot it did not work. Although assigning half of that size (512MB) in the exactly same manner did succeed.

There is only one NIC on this x86-64 board, which is requiring the 1GB of memory. The rest of the NICs use only a small amount of memory.

The message “can't assign mem (size 0x40000000)” has been observed in the kernel startup log, and the hexadecimal size printed in the message corresponded to the 1GB of the requested memory space, correct
There were the other errors that could be seen in the boot log between [ 6.566815] and [ 7.107599], for instance: 
 6.566815] pci 0000:84:06.0: BAR 14: can't assign mem (size 0x60000000) ?
The assumption is that 84:00.0 is the bridge where this NIC device is connected. So the bridge is requiring for the total memory corresponding to devices downstream of the bridge. 

Different combinations of kernel parameters have been tried unsucessfully: pci=no_crs, pci=use_crs, pci=realloc. Also used the pci=nobios option. But looks like it is an unsupported one:
[ 0.000000] PCI: Unknown option `nobios'

Steps to Reproduce

configure --enable-reconfig --enable-board=intel-x86-64 --enable-kernel=standard --enable-rootfs=glibc_small --enable-bootimage=cpio.gz --with-layer=layer/meta-kernel,layer/meta-wrextended,layer/meta-local --with-template=feature/build_libc --enable-rm-work=no --enable-rm-oldimgs=no --enable-sdkmachine=x86_64 --with-rcpl-version=0021

Attempt to map 1GB of PCIe device memory: the device(PCIe endpoint) exposes 1GB of its system memory using BAR 5/6(3rd 64-bit bar).
With this the WRlinux6 kernel is not able to allocate iomem for the specific NIC device. Rest of the endpoints get space allocated.

The process works if we reduce the exposed memory down to 512MB. Anything more than that will run into this error.

Kernel startup logs:

[ 7.087688] pci 0000:8b:00.0: BAR 4: can't assign mem (size 0x40000000) ---> 1GB
[ 7.109427] pci 0000:8b:00.0: BAR 0: can't assign mem (size 0x100000)
[ 7.130599] pci 0000:8b:00.0: BAR 2: can't assign mem (size 0x2000)

Other Downloads

Live chat