'interrupções rápidas' no Linux

4

até onde eu sei, o Linux tem 'interrupções rápidas', aquelas que foram solicitadas com o sinalizador SA_INTERRUPT; interrupções rápidas são executadas com todas as outras interrupções desabilitadas na CPU atual. Mas como ele difere do comportamento normal do manipulador de interrupções (onde)?

    
por Gilles 09.02.2011 / 05:43

3 respostas

4

A partir de hoje, você pode esquecer a bandeira SA_INTERRUPT .
Entre 2.6.18 e 2.6.24 era apenas um ajudante de migração para o novo sinalizador IRQF_DISABLED .
2.6.24 removeu todos os SA_* flags e os substituiu por IRQF_* flags.
2.6.35 marcou esta "nova" bandeira como depreciado .

Se você tem um kernel antes de 2.6.18, você provavelmente não irá usá-lo (veja a resposta de Justin).

O uso atual de IRQF_DISABLE difere entre as arquiteturas. O x86 ainda o usa apenas para funções críticas de tempo ( time.c , hpet.c ) e alguns xen stuff.

Em relação à diferença; uma interrupção normal pode ser interrompida por outra interrupção (preempção), uma "rápida" por outro lado, não pode.

    
por 09.02.2011 / 20:04
2

Existe um bom artigo aqui :

Older versions of the Linux kernel took great pains to distinguish between "fast" and "slow" interrupts. Fast interrupts were those that could be handled very quickly, whereas handling slow interrupts took significantly longer. Slow interrupts could be sufficiently demanding of the processor, and it was worthwhile to reenable interrupts while they were being handled. Otherwise, tasks requiring quick attention could be delayed for too long.

In modern kernels, most of the differences between fast and slow interrupts have disappeared. There remains only one: fast interrupts (those that were requested with the SA_INTERRUPT flag) are executed with all other interrupts disabled on the current processor. Note that other processors can still handle interrupts, although you will never see two processors handling the same IRQ at the same time.

So, which type of interrupt should your driver use? On modern systems, SA_INTERRUPT is intended only for use in a few, specific situations such as timer interrupts. Unless you have a strong reason to run your interrupt handler with other interrupts disabled, you should not use SA_INTERRUPT.

Então a única diferença é aquela que você mencionou; que os manipuladores de interrupção rápida executam com todos os outros manipuladores de interrupção desativados, para um desempenho mais rápido.

    
por 09.02.2011 / 16:23
0

Estou apenas olhando para o ARM Cortex A57. Na arquitetura ARM, uma interrupção rápida possui 8 registradores dedicados, portanto, o tempo de alternância de contexto é minimizado na entrada e saída de interrupção. Eu ainda não sei se ou como isso é integrado ao Linux que nosso fornecedor de SOC irá fornecer (assumindo que eles eventualmente o forneçam).

    
por 02.10.2015 / 18:07