如何轻松确定一个函数是否可以在Linux内核中hibernate?

据我所知,在中断的情况下,我们不应该调用可以睡觉的函数。

那么,是否有一个文档,约定,线索或任何简单的方法来确定内核中的某些function是否可以睡眠?

一个主要的提示是对might_sleep的调用,大多数核心内核函数都会调用它作为早期捕获伪造调用者的方式。 您还可以查找schedule及其变体。

你知道函数是否可以睡眠,因为你知道它是否可以从中断上下文中调用,调用它时需要什么保证(锁,RCU),最后你看看它自己做什么。

周围的代码是无法读取的,至少有很少的消费者。

如果典型的代码声明了需求,那么代码会更容易些,但不幸的是Linux中不是这样。