> The nested interrupt call, do_IRQ(), may still try to call do_softirq()
but
> that it will return immediately as it discovers another instance of
do_softirq()
> is running. No further nesting occurs as a result.
How is this detected ? Is this the check of "softirq_pending(cpu)" in the
do_softirq() ?
Can we have a case as shown below :
1. Interrupt 1 is generated : Jump to general exception handler
(0x8000:0180)
2. Save the current context
3. Interrupt 1 is processed which schedules tasklet1 for execution.
softirq_pending(cpu) = TASKLET_SOFTIRQ
4. Interrupts are reenabled.
5. do_softirq : Tasklet1 is executing & softirq_pending(cpu) = 0.
6. -------> Interrupt 2 is generated : Jump to general exception handler
(0x8000:0180)
6a) Save the current context
6b) Interrupt2 is processed which schedules tasklet2 for
execution.
softirq_pending(cpu) = TASKLET_SOFTIRQ
6c) Interrupts are reenabled.
6d) do_softirq : Tasklet2 is executing &
softirq_pending(cpu) = 0.
6e) ----> Interrupt3 is generated
.... and so on.
.
.
.
6f) Context is restored. Return from exception.
.
.
.
7. Context is restored. Return from exception.
Thanks.
- Pankaj
|