zyzii 发表于 2005-3-26 17:50:00

弱问 :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]
查看完整版本: 弱问 :2.6下的softirq是如何被触发的?