Отключите AMD GPU без перезапуска диспетчера дисплея
Backgroud:
Я купил себе корпус eGPU Thunderbolt (Razer Core) и хочу использовать его с моим AMD GPU (Rx480) в Linux. Я использую Kernel 5.0. Подключение 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)
Однако отключение графического процессора приводит к зависанию системы. Отключение устройства 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). Однако все настольные приложения теряются таким образом.
Вопрос:
Можно ли как-то удалить драйвер amdgpu, не выключая lightdm? Или я могу перезапустить lightdm, не теряя все настольные приложения?
0 ответов
Технически это возможно. Однако 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);
}
Возможно, вам повезет с отвязкой 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.