Suspeito que tenho um driver de rede com bugs para um ath9k
dispositivo Atheros, pois eventualmente receberei erros de SW IOMMU. Às vezes, quando isso acontece, posso simplesmente recuperá rmmod
- modprobe
lo e ele começará a funcionar. Outras vezes, devo remover o dispositivo desconectando-o. E, se eu esperar muito, suponho, isso causará muitos problemas a ponto de não conseguir rmmod
ou desconectar o dispositivo. Se eu fizer isso, o sistema travará indefinidamente.
Como não pretendo consertar o driver (não sou um desenvolvedor de firmware), é uma correção boa e "suficiente" simplesmente rmmod
e modprobe
o driver periodicamente ou isso também não funcionará?
Responder1
Sou desenvolvedor de kernel, então posso dizer que "depende". Não é impossível que uma remoção e reinserção proativa de um driver possa manter um bug afastado, como uma maçã por dia versus um médico. Depende do bug.
Um ótimo exemplo de problema para o qual o rmmod pode ser uma solução alternativa é uma alocação de memória descontrolada no driver (umde fatovazamento) para que o driver não perca o controle da memória e seja capaz de limpá-la no momento do rmmod.
Se o bug for uma instabilidade causada por corrupção, é improvável que seja uma solução alternativa, embora seja possível. Suponha que o problema se desenvolva em vários passos: primeiro o condutor tem de entrar num estado relativamente raro S (talvez um estado inválido) e depois algum evento relativamente raro E tem de ocorrer enquanto estiver nesse estado. (Se E ocorrer e o driver não estiver no estado S, o problema não será reproduzido.) Se o rmmod e a reinserção tirarem o driver do estado S e forem feitos periodicamente, o problema se tornará menos reproduzível.
A remoção e a reinserção podem ter seus próprios problemas, como a introdução de vazamentos (o driver não limpa tudo no rmmod) ou deixar para trás ponteiros pendentes (o driver desaloca algum objeto, mas não o cancela corretamente de todos os seus associações). Ao desenvolver drivers dinâmicos, um caso de teste deve ser um script de shell que executa um rmmod/insmod em um loop. (Isso não fornece cobertura completa, é claro: você também precisa insmod; various actual use cases of driver; rmmod
de um loop).
Responder2
Você pode obter a versão mais recente do ath9k
backports para resolver alguns problemas como: "Wifi continua desconectando", "A Internet está lenta", "não pode rmmod/modprobe
...
Baixe e instale os backports mais recentes:
wget https://www.kernel.org/pub/linux/kernel/projects/backports/stable/v4.4.2/backports-4.4.2-1.tar.gz
make defconfig-ath9k
make -j 16
make install
Quando tudo for feito com sucesso, você obterá:
Your backported driver modules should be installed now.
Reboot.
Execute o seguinte comando para carregar o driver na inicialização e reinicializar:
echo "ath9k" | sudo tee -a /etc/modules
reboot
Recarregue o driver:
rmmod ath9k
modprobe ath9k