Linux 系统的小甜点

记录一些Linux上的琐碎的设计点,期待有一天点连成线,构成面。:)

1.printk会调用try_to_wake_up,

  调用路径为: printk->printk_emit->console_unlock()->up_console_sem->up->__up->wake_up_process-->try_to_wake_up.

 而 try_to_wake_up会获取rq spinlock.

这意味着什么呢?意味着printk不能再调度器里面调用,这样会死锁,因为调度器里面已经获取了rq spinlock,spinlock不能重复获取,会死锁。

如果调度器里面想加打印怎么办,内核单独提供了printk_deferred函数,这个函数会绕靠up的调用。

猜你喜欢

转载自blog.csdn.net/tugouxp/article/details/112329041