O problema está na versão do gcc que não suporta retpolina ( O que é uma retpolina e como funciona? ). Veja o bug do Ubuntu: 4.4.0-116 Atualização do kernel em 2/21 quebra Nvidia drivers (em 14.04 e 16.04) .
No meu caso, limpando ppa:ubuntu-toolchain-r/test
para instalar a versão padrão do gcc e reconstruindo com o DKMS, o módulo nvidia (reinstalando o kernel 4.4.0-116) corrige o problema. Veja as instruções postadas por @cjjefcoat no rastreador de bugs .
Restaurar o gcc padrão removendo a versão de ppa:ubuntu-toolchain-r/test
:
$ sudo apt-get install ppa-purge
$ sudo ppa-purge ppa:ubuntu-toolchain-r/test
versão gcc (no Ubuntu 16.04) com suporte à retpolina:
$ gcc --version
gcc (Ubuntu 5.4.0-6ubuntu1~16.04.9) 5.4.0 20160609
Reinstalar o kernel:
$ sudo apt-get purge linux-headers-4.4.0-116 linux-headers-4.4.0-116-generic linux-image-4.4.0-116-generic linux-image-extra-4.4.0-116-generic linux-signed-image-4.4.0-116-generic
$ sudo apt-get install linux-generic linux-signed-generic
Verifique o módulo nvidia:
$ modinfo nvidia_xxx -k 4.4.0-116-generic | grep vermagic
vermagic: 4.4.0-116-generic SMP mod_unload modversions retpoline
substitua _xxx
pela sua versão - basta pressionar TAB após modinfo nvidia
retpoline
deve estar na saída.
Depois disso, reboot
foi concluído com sucesso.
Se você já tem uma versão gcc compatível, você pode reconstruir o módulo nvidia usando o comando dkms
sem reinstalar o kernel:
# dkms remove nvidia-xxx/yyy.zzz -k 4.4.0-116-generic
# dkms install nvidia-xxx/yyy.zzz -k 4.4.0-116-generic
Eu decidi reinstalar o kernel ao invés de atualizar todos os módulos que foram re-compilados com o DKMS usando uma versão errada do gcc.