遇到 PCI 资源分配问题 17.10 内核 4.13.0-16-generic 64bit

遇到 PCI 资源分配问题 17.10 内核 4.13.0-16-generic 64bit

我的台式机是 MacPro6,1 台式机(黑色)。这是我的 Grub 命令行参数(用于 Pie)

intel_iommu=on pci=hpbussize=10,hpmemsize=2M,nocrs,realloc

即使我强制执行,realloc我仍然看到以下 BAR 错误:

[    0.710600] pci 0000:ad:01.0: BAR 13: no space for [io  size 0x1000]
[    0.710601] pci 0000:ad:01.0: BAR 13: failed to assign [io  size 0x1000]
[    0.710602] pci 0000:ad:00.0: BAR 14: no space for [mem size 0x00100000]
[    0.710603] pci 0000:ad:00.0: BAR 14: failed to assign [mem size 0x00100000]
[    0.710604] pci 0000:ad:01.0: BAR 14: no space for [mem size 0x00100000]
[    0.710604] pci 0000:ad:01.0: BAR 14: failed to assign [mem size 0x00100000]
[    0.710605] pci 0000:ad:01.0: BAR 13: no space for [io  size 0x1000]
[    0.710606] pci 0000:ad:01.0: BAR 13: failed to assign [io  size 0x1000]
[    0.710607] pci 0000:ae:00.0: BAR 0: no space for [mem size 0x00008000 64bit]
[    0.710608] pci 0000:ae:00.0: BAR 0: failed to assign [mem size 0x00008000 64bit]
[    0.710609] pci 0000:ae:00.0: BAR 0: no space for [mem size 0x00008000 64bit]
[    0.710609] pci 0000:ae:00.0: BAR 0: failed to assign [mem size 0x00008000 64bit]
[    0.710642] pci 0000:af:00.0: BAR 5: no space for [mem size 0x00000200]

realloc 后,一些 BAR 内存和 IO 分配成功,

[    0.710910] pci 0000:cb:00.0: BAR 4: [io  0xb000-0xb01f] conflicts with 0000:a9:00.0 [io  0xb000-0xb01f]
[    0.710910] pci 0000:cb:00.0: BAR 4: failed to assign [io  size 0x0020]
[    0.710911] pci 0000:cb:00.0: BAR 0: no space for [io  size 0x0008]
[    0.711081] pci 0000:02:00.0: BAR 4: assigned [io  0x2000-0x20ff]
[    0.711092] pci 0000:06:00.0: BAR 4: assigned [io  0x3000-0x30ff]

我知道我需要做什么……但我没有看到如何实现这一点的选项。我需要启用 4GB 以上的 PCI 寻址。大多数论坛帖子都建议在 BIOS 中启用此功能……但这是一台 UEFI Mac。

任何帮助都将不胜感激。我正在逐步淘汰 MACOS。谢谢。

顺便说一句,我的 eGPU 可以与 MacOS 配合使用。它通过雷电连接。除了为雷电连接的 GPU 分配资源外,Linux 上一切都正常。我的雷电连接的 jbod 都可以访问。Nvidia
驱动程序甚至安装好了。只是没有足够的内存和 IO 资源来正常运行。nvidia-smi无法检测到设备。

答案1

秘诀是让 hpmemsize 变得很大 - 但问题是当它变得太大时(根据我的经验,>128MB),它会从根窗口中清除 32 位内存,留下一个起始值高于结束值的范围。事实证明,内存资源必须从父桥继承(而不是完全随机分配),因此例如托管 Thunderbolt 的根端口应该在其下拥有大量内存 - 在我使用 Dell 9370 上的 JHL6540 的情况下,它是 737MB(32 位)和 1184M(64 位可预取)。使用“sudo lspci -vvvv”或类似命令。

如果无法分配主 BAR0 (256MB),我的外部显卡就会拒绝 - 但除非我修补内核,否则我无法使 hpmemsize 足够大,否则 32 位资源就会消失。在某些情况下,amdgpu 驱动程序无法检查 BAR 是否已失败,并从内核请求基地址为 0x0 且大小为 0x0 的资源 - 因此触发错误检测,并且基本上需要重新启动才能使系统再次完全可用。

如果您现在仍遇到此问题,请尝试 Linux 4.20-rc3(或至少 4.19 内核),并尝试增加 hpmemsize 并观察 lspci 中发生的情况。无论如何,我很快就从学期中解脱出来,我将尝试提交我的内核补丁,以解决这一问题。

PS:除非您还有 pci=assign-busses,否则 pci=hpbussize=N 无效 - 并且除非您拥有新的 Thunderbolt 3 Titan Ridge (2018) 控制器,否则这会破坏 Thunderbolt。

我甚至不完全确定其他人在没有 pci=assign-busses 的情况下会做很多事情 - 尽管我从未测试过它,所以不要相信我的话。

另外,请记住 pci=hpiosize 存在(默认为 256 字节)。pci=hpbussize 默认为 1,pci=hpmemsize 默认为 2MB。

相关内容