Administradores de sistemas que atualizaram seus servidores AMD para o Kernel Linux 6.14 (ou mais recente) podem ter notado um problema preocupante: a falha no carregamento do driver AMD64 EDAC, responsável por detectar e corrigir erros de memória. Um novo conjunto de patches de Yazen Ghannam, da AMD, foi enviado para corrigir essa regressão que afetou muitas máquinas na última leva de atualizações.
Quando um Atalho de Software Encontra o Hardware Real
A história começou com uma tentativa legítima de simplificar o código envolvendo a detecção de nós de hardware da AMD — parte vital para o funcionamento do subsistema de memória e, consequentemente, do EDAC. O intuito do patch era nobre: usar um caminho mais direto para encontrar o número do bus PCI de cada root device do SoC, baseando-se em um registrador especial da Data Fabric. Esse tipo de refatoração, em teoria, deveria tornar o driver mais limpo e eficiente. Mas, como já aconteceu tantas vezes no mundo do kernel, o diabo mora nos detalhes da implementação.
Imagine confiar cegamente no painel de um carro porque ele funciona no protótipo da fábrica — mas, ao chegar ao modelo de produção, certos botões estão em lugares inesperados ou os indicadores mostram valores confusos. Algo semelhante ocorreu aqui: em placas de referência da AMD, os números dos buses PCI eram “certinhos”, alinhados, como 0x00, 0x40 e 0xA0. Se alguém fizesse um “OU bit a bit” desses números, o resultado ainda coincidia com um dos valores, e o sistema seguia feliz.
Porém, em servidores reais, como os Dell PowerEdge, os buses acabaram numerados de modo bem menos previsível — pense em 0x00, 0x07, 0x15. Misture esses números com um bitwise-OR e surge um valor completamente inválido. Resultado? O driver AMD64 EDAC falha em carregar, deixando o kernel Linux às cegas quanto a erros de memória — um risco real em ambientes de produção críticos.
A solução: voltar ao básico, com mais segurança
A resposta da equipe da AMD veio rápido e certeira: o patch mais recente remove a dependência daquela lógica falha e retoma a abordagem anterior, mais robusta e já consagrada, de “procurar e contar” (search and count) os root devices da arquitetura AMD. Desta vez, a busca é feita com base no class code PCI, em vez de depender de IDs de fornecedor específicos — uma melhoria que preserva o espírito da refatoração original, mas sem cair na armadilha do atalho perigoso.
No final, essa mudança devolve confiabilidade para o driver EDAC em todas as variantes de servidores com processadores AMD, reforçando mais uma vez como test cases do mundo real fazem toda a diferença no universo do Linux kernel.
(P.S.: O segundo patch do conjunto é apenas uma limpeza de código e não afeta diretamente a correção do problema.)