While understanding the concepts of top halves and bottom halves, I came across with a question.
Here is my understanding:
Top half and Bottom half executes in interrupt context. The only
difference being that the Bottom half executes with interrupt enabled while
the top half executes with the corresponding irq disabled(Which can still be
overcome by using SA_INTERRUPT flag).
The question:
Just before return from the top half handler, return_from_intr is
called. Now the scheduler is invoked and executes the bottom halves if there
are any pending ones.
Since return_from_intr is called, how can the bottom halves execute in
interrupt context?. It will be in kernel mode rather than the interrupt
mode?
Please correct me if I am wrong.