Recently I came across a note in an online post that states the following:
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_INTERRUPTflag) 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.
In other online documentation I've found statements that suggest that while handling any given interrupt, at least in the top-half handler, all other interrupts are disabled. This seems at odds with the quotation above. I'm most interested in the context of single CPU arm systems. Can someone enlighten me as to which of these views is correct?
Likewise, help in understanding the difference between "masking" and "disabling" interrupts in linux would be helpful. From my research it seems that masking is done in the interrupt controller (PIC) whereas disabling can be done by the CPU. Further adding to my confusion is the fact that the linux functions
enable_irq() seem to be related to masking rather than "disabling". Is this correct?
Finally, I've found comments online stating that masking can NOT be done within a top-half interrupt handler (which makes some sense to me). However, if this is the case, wouldn't it imply that the above-referenced function calls are not suitable for use in top-half handlers?