据我所知,在中断的情况下,我们不应该调用可以睡觉的函数。
那么,是否有一个文档,约定,线索或任何简单的方法来确定内核中的某些function是否可以睡眠?
一个主要的提示是对might_sleep
的调用,大多数核心内核函数都会调用它作为早期捕获伪造调用者的方式。 您还可以查找schedule
及其变体。
你知道函数是否可以睡眠,因为你知道它是否可以从中断上下文中调用,调用它时需要什么保证(锁,RCU),最后你看看它自己做什么。
周围的代码是无法读取的,至少有很少的消费者。
如果典型的代码声明了需求,那么代码会更容易些,但不幸的是Linux中不是这样。