如何重新启动失败的 amdgpu 内核模块

Dej*_*vić 11 video kernel-modules graphics proprietary-drivers amd-graphics

我的视频卡时不时崩溃。这很烦人,但我忍受它——通常我只是用 重新启动图形sudo systemctl restart lightdm.service,或者如果需要重新启动整个系统。

在这种特殊情况下,systemctl呼叫挂起,我不想重新启动,因为我在机器上有一个长时间运行的工作。

崩溃登录dmesg

[944520.212254] Call Trace:
[944520.212256]  [<ffffffff818384d5>] schedule+0x35/0x80
[944520.212257]  [<ffffffff8183b625>] schedule_timeout+0x1b5/0x270
[944520.212280]  [<ffffffffc0235244>] ? dce_v6_0_program_watermarks+0x514/0x720 [amdgpu]
[944520.212282]  [<ffffffffc0196d2c>] kcl_fence_default_wait+0x1cc/0x260 [amdkcl]
[944520.212287]  [<ffffffff815b4f50>] ? fence_free+0x20/0x20
Run Code Online (Sandbox Code Playgroud)

显然amdgpu模块崩溃了。我想重新启动它,所以我尝试了

sudo modprobe -r amdgpu
modprobe: FATAL: Module amdgpu is in use.
Run Code Online (Sandbox Code Playgroud)

当我试图找出谁在使用amdgpu我时

lsmod | grep amdgpu
amdgpu               2129920  7
amdttm                102400  1 amdgpu
amdkcl                 32768  1 amdgpu
i2c_algo_bit           16384  1 amdgpu
drm_kms_helper        155648  1 amdgpu
drm                   364544  10 drm_kms_helper,amdgpu,amdkcl,amdttm
Run Code Online (Sandbox Code Playgroud)

基本上有 7 个“东西”在使用该模块,我不知道如何找到它们并删除该amdgpu模块。

问题:有没有什么合理的方法可以在不重新启动系统的情况下重新加载模块?或者有没有更好的方法来恢复我的视频?

Dáv*_*író 9

正如 @Chris Stryczynski 所说,sudo cat /sys/kernel/debug/dri/N/amdgpu_gpu_recover这是重新加载 amdgpu 内核模块的正确方法,或者您可以使用amdgpu.gpu_recovery=1内核参数启动系统,以便在崩溃时自动重置它。

但这些选项的用处不大,因为显示服务器(Xorg 或 Wayland)必须重新初始化其图形堆栈,而桌面环境无法执行此操作。(尚未实现。)

使用 gpu_recovery 内核参数,即使不可见,您也可以保存您的工作,然后重新启动。