Fundo:
Comprei um gabinete Thunderbolt eGPU (Razer Core) e quero usá-lo com minha GPU AMD (Rx480) no Linux. Eu uso Kernel 5.0. Conectar a eGPU enquanto o PC está funcionando parece funcionar.
> 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)
No entanto, desconectar a GPU congela o sistema. Desativar o dispositivo PCI com o seguinte comando também leva a um congelamento:
> sudo sh -c 'echo 1 > /sys/bus/pci/devices/0000:06:04.0/remove'
Aparentemente, a razão para isso é que o driver gráfico (amdgpu) ainda está usando o dispositivo. Então tentei encerrar o driver gráfico:
> sudo modprobe -r amdgpu
modprobe: FATAL: Module amdgpu is in use
O aplicativo que usa o módulo driver é o gerenciador de exibição (lightdm 1.26.0).
O que funciona é mudar para um dos consoles Ctrl-Alt-F1 e executar:
> 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
e, em seguida, voltando para a área de trabalho (Ctrl-Alt-F7). No entanto, todos os aplicativos da área de trabalho são perdidos dessa maneira.
Pergunta:
Posso de alguma forma remover o driver amdgpu sem desligar o lightdm? Ou posso reiniciar o lightdm sem perder todos os aplicativos da área de trabalho?
Tecnicamente é possível. No entanto, a AMD não o implementou para Linux.
Fonte: https://cgit.freedesktop.org/~agd5f/linux/tree/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c?h=drm-next-5.7
Talvez você tenha sorte ao desvincular a GPU:
echo -n "0000:06:04.0" > /sys/bus/pci/drivers/amdgpu/unbind
e depois disso retire.
De acordo com este bug: https://bugs.freedesktop.org/show_bug.cgi?id=111229 unbinding era possível no kernel 4.19 e foi corrigido no kernel 5.3.