其他分享
首页 > 其他分享> > spin_lock_irqsave关中断后,为什么要再禁止抢占

spin_lock_irqsave关中断后,为什么要再禁止抢占

作者:互联网

假设有这么个情况:
1、CPU-1在进程A的上下文调用了spin_lock_irqsave;
2、CPU-2调用wake_up_process唤醒了CPU-1上的进程B,由于进程B的优先级高于进程A,进程A的TIF_NEED_RESCHED标记被设置。(CPU-2还会用IPI通知CPU-1进行resched,但是CPU-1禁用了中断而不会响应);
3、CPU-1调用了某某函数,这个函数包含了preempt_disable和preempt_enable(没有规定关中断的情况下不能调用这样的函数吧~);
那么,如果spin_lock_irqsave没有preempt_disable,第3步中的preempt_enable将触发preempt_check_resched,从而让进程B抢占掉进程A。

标签:lock,irqsave,preempt,进程,spin,CPU
来源: https://www.cnblogs.com/sudochen/p/15930575.html