弱问 :2.6下的softirq是如何被触发的?
1 : 2.6下的硬件中断,在do_IRQ()中好象没有调用(直接或间接)do_softirq()2: entry.S 中ret_from_intr只有跳到resume_kernel
ENTRY(resume_kernel)
cli
cmpl $0,TI_preempt_count(%ebp) # non-zero preempt_count ?
jnz restore_all
need_resched:
movl TI_flags(%ebp), %ecx # need_resched set ?
testb $_TIF_NEED_RESCHED, %cl
jz restore_all
testl $IF_MASK,EFLAGS(%esp) # interrupts off (exception path) ?
jz restore_all
call preempt_schedule_irq
jmp need_resched
#endif
才出现了call preempt_schedule_irq,但在preempt_schedule_irq()中,我也没找到调用(直接或间接)do_softirq()。
3: 在一些lock中却有调用(直接或间接)do_softirq()。
如seqlock.h
#define write_sequnlock_bh(lock) \
do { write_sequnlock(lock); local_bh_enable(); } while(0)
所以现在我很糊涂,不知在哪执行的softirq(),请高手指教。谢
页:
[1]