Отключите 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);
}

Источник: https://cgit.freedesktop.org/~agd5f/linux/tree/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c?h=drm-next-5.7

Возможно, вам повезет с отвязкой 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.

Другие вопросы по тегам