Dois manipuladores de interrupção para o mesmo driver

4

Eu tenho um cenário em que o meu motorista precisa ouvir duas interrupções diferentes de duas linhas de IRQ diferentes. É possível registrar dois IRQs diferentes e instalar dois manipuladores diferentes para o driver único? Qual é a melhor maneira de conseguir isso?

P.S: Este é o driver de dispositivo do Linux e os dois IRQs não são compartilhados.

    
por Abhishek Kondaveeti 17.05.2017 / 04:26

2 respostas

2

register two different IRQs and install two different handlers for the single driver

"É tão fácil assim". A resposta para "é possível" é "sim".

As contas de interrupção do dispositivo não irão interromper uma a outra na mesma CPU.

De acordo com o LDD3 (isso é bastante antigo agora), uma rotina de interrupção única pode garantir que ele não seja executado em várias CPUs simultaneamente. Não tenho certeza do que isso significava - não consigo imaginar que isso se aplique a interrupções temporizadas.

No seu driver, eu esperaria que fosse possível executar as diferentes rotinas de interrupção ao mesmo tempo, em diferentes CPUs.

No entanto, o típico "spin lock irqsave" para obter exclusão mútua quando necessário, ainda deve funcionar bem neste caso.

Você pode querer verificar novamente se você tem o watchdog do NMI e o lockdep ativado em seu sistema de teste :). O watchdog NMI irá disparar se uma CPU ficar presa girando dentro de uma rotina de interrupção.

link

    
por 17.05.2017 / 13:40
0

Isso é totalmente possível. Ao registrar um manipulador de interrupção, o driver fornece ao kernel o endereço de uma função para chamar quando a interrupção é acionada. Um driver pode configurar quantas interrupções quiser, e todas podem apontar para a mesma rotina de serviço ou todas elas podem apontar para a sua própria (ou alguma outra combinação de coisas).

Veja esta resposta para mais detalhes sobre como as interrupções são realmente tratadas.

    
por 17.05.2017 / 22:47