- 论坛徽章:
- 0
|
kouu 发表于 2011-09-27 16:23
回复 1# vonnyfly
假设有这么个情况:
按照大伙们的意思,那么主要问题在于 自旋锁关中断保护区域内部主动调用调度schedule相关的函数问题上。因为关中断后不可能因为时间片的问题进行中断调度并抢占,只能通过主动调度来进行进程切换的。而在这个区域,如果没有禁止抢占,即没有调用disable_preempt,那么此时preempt_count=0,如果这之间调用preempt_enable,那么会出现不配对情况,preemp_count<0,bug,而且- asmlinkage void __sched notrace preempt_schedule(void)
- {
- struct thread_info *ti = current_thread_info();
- /*
- * If there is a non-zero preempt_count or interrupts are disabled,
- * we do not want to preempt the current task. Just return..
- */
- if (likely(ti->preempt_count || irqs_disabled()))
- return;
复制代码 if语句永远成立的,因为disable了中断,所以即使有进程标记了TIF_NEED_RESCHED,也不会调度。对么??? |
|