Como o Linux sabe qual número irq deve ser usado?

0

Eu não sou um programador de drivers, não tenho uma visão clara de como o Linux atribui o número de irq para dispositivos pcie.

A partir de um exemplo de driver NIC, parece que o Linux já sabe qual número irq deve ser usado antes que a função de 'probe' ou 'open' seja executada.

ex: link

err = ixgbe_request_irq (adaptador);

ixgbe pode obter o número irq usando os dados da variável 'adapter', isso significa que o valor irq já está dentro da estrutura do adaptador, não é um número gerado, é um valor já existente.

se for lido a partir do espaço de configuração pci / pcie, não foi muito fácil entrar em conflito com outros dispositivos?

se for gerado / organizado pelo kernel, como o número irq já está dentro da variável 'adapter'? (ou é atribuído pela BIOS?)

Para a interrupção do MSI, parece gerado pelo kernel ??

-

No meu entendimento, o número irq deve ser lido do registro de linha de interrupção (offset 3Ch) no espaço de configuração PCIe, eu acho que é por isso que kerenl já sabe qual número irq deve ser usado, e o registro de linha de interrupção deve ser atualizado pelo BIOS ( meu palpite) durante a inicialização, mas ainda há um IRQ virtual (quando lspci sem -b), e parece MSI tem outro irq (?), eles são recurso comum como a memória a ser organizada?

    
por Mark 27.04.2018 / 05:17

2 respostas

1

para a interrupção legada, o valor irq foi lido do espaço de configuração, no entanto, o valor irq foi principalmente atribuído pelo BIOS.

mais informações para esta parte: link

Para a interrupção MSI / MSI-X, isso é feito por alocação.

ex: pci_alloc_irq_vectors () link

    
por 09.05.2018 / 09:30
0

Depende muito da máquina de que estamos falando ... em PCs, hoje em dia, os dispositivos atribuem números de IRQ dinamicamente quando configurados.

Para aprofundar-se no tópico, dê uma olhada em "Drivers de dispositivo do Linux" (sim, é bastante antigo, mas muito do que tem a dizer ainda se aplica).

    
por 27.04.2018 / 18:39