Como compilo meu kernel Gentoo para AMD IOMMU?

Como compilo meu kernel Gentoo para AMD IOMMU?

Eu tenho uma CPU AMD A4-5300 com uma placa-mãe que suporta IOMMU e estou tentando habilitar o IOMMU em meu kernel Gentoo Hardened 4.3.3-r4 com a intenção de usar uma placa gráfica em uma VM KVM. De acordo comeste guia aqui, devo recompilar meu kernel com algumas opções fornecidas ("Suporte para dispositivos de remapeamento DMA", "Ativar dispositivos de remapeamento DMA" e "Driver Stub PCI"). No entanto, "Suporte para dispositivos de remapeamento de DMA" e "Ativar dispositivos de remapeamento de DMA" estão ausentes na configuração do meu kernel.

Em seguida, procurei "remapear" na configuração e tentei ativar uma série de opções, que eram CONFIG_IRQ_REMAP, CONFIG_DMAR_TABLE, CONFIG_IOMMU_SUPPORT, CONFIG_SWIOTLB e CONFIG_PCI_IOV. Então recompilei meu kernel com essas opções habilitadas, iniciei meu sistema amd_iommu=fullflush iommu=forcena linha de comando do kernel e, de acordo com o guia mencionado acima, verifiquei se o IOMMU estava rodando em meu sistema procurando por "AMD-Vi" nas mensagens do meu kernel:

dmesg | grep AMD-Vi

Nada aparece no log do meu kernel sobre o AMD-Vi.

Além disso, quando tento iniciar uma VM no virt-manager com um dispositivo PCI conectado, recebo uma mensagem que diz"Erro ao iniciar o domínio: configuração não suportada: o host não suporta passagem de dispositivos PCI do host".

Praticamente tudo que encontro é para Fedora, Ubuntu e Debian, onde o IOMMU aparentemente funciona imediatamente. Não acredito que seja uma questão de minha placa-mãe e CPU não suportarem, porque meu BIOS tem uma opção para isso e porque me lembro de ter conseguido, há alguns anos, executar uma VM VirtualBox com IOMMU no Debian (embora eu tenha feito isso). Não vou continuar porque nunca pensei no momento que precisaria de duas placas gráficas para usar uma GPU em uma VM por meio do IOMMU).

Aqui está o que eu já tentei, mas não funcionou:

  1. Usando o kernel padrão em vez de reforçado.
  2. PossibilitandoDrivers de dispositivo >> Suporte de hardware IOMMU,Suporte AMD IOMMU,Suporte para Intel IOMMU usando dispositivos de remapeamento DMA,Suporte para remapeamento de interrupçãoeOpções de barramento (PCI etc.) >> PCI Stub.
  3. Usando o kernel mais recente, atualmente atualizado para 4.4.8-hardened-r1.

Esta é a linha de comando que estou usando para iniciar meu kernel, com cada parâmetro em uma linha separada por conveniência:

root=/dev/ram0 
crypt_root=/dev/disk/by-uuid/c1ce6456-4c6a-4a64-8027-5ec4fdc0f344 
dolvm 
real_root=/dev/mapper/cryptgentoo-raiz 
rootfstype=jfs 
real_init=/sbin/init 
root_keydev=/dev/disk/by-partuuid/086194de-e476-4abb-82da-9744e6fb0257 
root_key=luks-key.gpg 
keymap=la 
amd_iommu=on 
iommu=on

Ainda estou faltando uma opção de configuração do kernel?


Atualizar:Por distração eu emiti por engano ps -ef | grep -i iommu, e olha o que acabei de encontrar...

rockshooter ~ # ps -ef | grep iommu
root        66     2  0 02:57 ?        00:00:00 [amd_iommu_v2]

Se eu vir um thread do kernel, acho que pode haver uma chance de conseguir executar o IOMMU, mas meu kernel não está dizendo nada sobre isso. É apenas um palpite... mas vou tentar usá-lo.

Responder1

Principais opções do IOMMU

Tentar Device Drivers >> IOMMU Hardware Support:

Opções da IOMMU

AMD IOMU

Então habilite AMD IOMMU support.

Remapeamento DMA

HabilitarSupport for Intel IOMMU using DMA Remapping Devices

Opcional: Remapeamento de IRQ

HabilitarSupport for Interrupt Remapping

Opcional: ativar suporte à versão 2

AMD IOMMU Version 2 driver


Opção PCI

Opções de ônibus

Bus options (PCI etc.) >> PCI Stub


Nunca grepo arquivo de configuração, use sempre menuconfige a /chave para procurar as opções necessárias. Existem três problemas com o guia que você vinculou:

  1. É feito sob medida para usuários do Fedora/Redhat.
  2. Por causa do nº 1, a versão do kernel é diferente, portanto as opções estão em um local diferente.
  3. O kernel do Gentoo é mais recente que o kernel usado no guia.

Atualizar

Minha placa-mãe é muito antiga para suportar PCI Passthrough, mas eu queria que você visse se as opções agora estão devidamente habilitadas. Usando as opções exatas que eu instruí você a usar:

Principais opções do IOMMU

AGP: Checking aperture...
[    0.000000] AGP: No AGP bridge found
[    0.000000] AGP: Node 0: aperture [bus addr 0xc4000000-0xc5ffffff] (32MB)
[    0.000000] Aperture pointing to e820 RAM. Ignoring.
[    0.000000] AGP: Your BIOS doesn't leave an aperture memory hole
[    0.000000] AGP: Please enable the IOMMU option in the BIOS setup
[    0.000000] AGP: This costs you 64MB of RAM
[    0.000000] AGP: Mapping aperture over RAM [mem 0xc4000000-0xc7ffffff] (65536KB)
...
[    0.959270] PCI-DMA: Disabling AGP.
[    0.959337] PCI-DMA: aperture base @ c4000000 size 65536 KB
[    0.959338] PCI-DMA: using GART IOMMU.
[    0.959340] PCI-DMA: Reserving 64MB of IOMMU area in the AGP aperture
...
[    1.375277] AMD IOMMUv2 driver by Joerg Roedel <[email protected]>
[    1.375277] AMD IOMMUv2 functionality not available on this system

Responder2

Finalmente, depois de muito choro, reclamação e pancadas na cabeça, finalmente descobri o que estava acontecendo.

Acontece queO IOMMU estava funcionando o tempo todo, só que os logs do kernel não mostravam isso.Mas o driver IOMMU estava lá, estava funcionando, e eu descobri por acaso quando digitei por engano ps -efem vez de dmesgassim:

rockshooter ~ # ps -ef | grep -i iommu
root        66     2  0 04:19 ?        00:00:00 [amd_iommu_v2]  

Quando vi aquele thread do kernel em execução, pensei: talvez meu IOMMU esteja realmente funcionando? Então, executei as mesmas etapas de configuração que fiz anteriormente para o Debian e, uma hora depois, eis que estava em minha máquina virtual conectada à minha placa gráfica, jogando alguns jogos.

Por favor, salve este tópico para referência futura, porque levei umas boas 3 semanas para descobrir isso. Ainda dei ao outro postador uma merecida reputação de +50 por se preocupar em configurar e testar esse problema.

informação relacionada