0

我有一个希望启用热插拔的设备。它的 BAR 大于 NVMe 标准。我的 BIOS (Dell R640) 没有预分配 BAR 空间的选项。

当我尝试从一个空系统开始并添加卡时,我收到以下错误:

[  120.951915] pci 0000:67:00.0: BAR 0: no space for [mem size 0x02000000]
[  120.951919] pci 0000:67:00.0: BAR 0: failed to assign [mem size 0x02000000]
[  120.951923] pci 0000:67:00.1: BAR 0: no space for [mem size 0x02000000]
[  120.951927] pci 0000:67:00.1: BAR 0: failed to assign [mem size 0x02000000]
[  120.951931] pci 0000:67:00.1: BAR 1: no space for [mem size 0x00020000]
[  120.951935] pci 0000:67:00.1: BAR 1: failed to assign [mem size 0x00020000]
[  120.951939] pci 0000:67:00.0: BAR 1: no space for [mem size 0x00010000]
[  120.951942] pci 0000:67:00.0: BAR 1: failed to assign [mem size 0x00010000]
 

我的 /etc/default/grub 如下:

GRUB_CMDLINE_LINUX="crashkernel=auto spectre_v2=retpoline rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet pci=assign-busses,hpbussize=4,realloc=on,hpmemsize=8G"

我的 grub.cfg 包含以下添加内容。

pciehp.pciehp_force=1 pci=pcie_bus_perf

除非我删除根复合体,否则我无法让这些中的任何一个为 hotplug 工作:

echo 1 > /sys/bus/pci/devices/<root_port>/remove
*add the card*
echo 1 > /sys/bus/pci/rescan

这会根据需要启用所有 BAR,但会关闭整个根联合体及其上的所有设备。简单地重新扫描没有帮助。

我怎样才能告诉内核预分配所以我不需要删除整个根端口?我知道分配的 BDF 每次都会完全相同(并且它们将位于相同的物理端口、相同的 BAR 大小等)。我觉得这必须是一个选择。

4

0 回答 0