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?