无需重启显示管理器即可解除 AMD GPU 绑定

无需重启显示管理器即可解除 AMD GPU 绑定

背景:

我给自己买了一个雷电 eGPU 外壳 (Razer Core),我想在 Linux 上将它与我的 AMD GPU (Rx480) 一起使用。我使用内核 5.0。在 PC 运行时插入 eGPU 似乎可行。

> DRI_PRIME=1 glxinfo | grep "OpenGL renderer"
OpenGL renderer string: AMD Radeon (TM) RX 480 Graphics (POLARIS10, DRM 3.27.0, 5.0.16-050016-generic, LLVM 7.0.0)

但是,拔下 GPU 会导致系统冻结。使用以下命令禁用 PCI 设备也会导致冻结:

> sudo sh -c 'echo 1 > /sys/bus/pci/devices/0000:06:04.0/remove'

显然,原因是显卡驱动程序 (amdgpu) 仍在使用该设备。因此,我尝试结束显卡驱动程序:

> sudo modprobe -r amdgpu
modprobe: FATAL: Module amdgpu is in use

使用驱动模块的应用程序是显示管理器(lightdm 1.26.0)。

有效的方法是切换到 Ctrl-Alt-F1 控制台之一并执行:

> sudo service lightdm stop
> sudo modprobe -r amdgpu
> sudo sh -c 'echo 1 > /sys/bus/pci/devices/0000:06:04.0/remove'

[Unpluging the eGPU]

> sudo service lightdm start

然后切换回桌面(Ctrl-Alt-F7)。但是,这样会丢失所有桌面应用程序。

问题:

我能否在不关闭 lightdm 的情况下删除 amdgpu 驱动程序?或者我可以重新启动 lig​​htdm 而不会丢失所有桌面应用程序吗?

答案1

从技术上来说这是可行的。不过,AMD 并未在 Linux 上实现该功能。

static void
amdgpu_pci_remove(struct pci_dev *pdev)
{
    struct drm_device *dev = pci_get_drvdata(pdev);

#ifdef MODULE
    if (THIS_MODULE->state != MODULE_STATE_GOING)
#endif
        DRM_ERROR("Hotplug removal is not supported\n");
    drm_dev_unplug(dev);
    amdgpu_driver_unload_kms(dev);
    pci_disable_device(pdev);
    pci_set_drvdata(pdev, NULL);
    drm_dev_put(dev);
}

来源:https://cgit.freedesktop.org/~agd5f/linux/tree/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c?h=drm-next-5.7

答案2

也许你会幸运地解除 GPU 绑定:

echo -n "0000:06:04.0" > /sys/bus/pci/drivers/amdgpu/unbind

然后删除。

根据这个错误: https://bugs.freedesktop.org/show_bug.cgi?id=111229 在内核 4.19 上可以解除绑定,并且已在内核 5.3 上修复。

相关内容