c -哪些函数不能在自旋锁的临界段使用?



我有点困惑,什么类型的函数是不允许在自旋锁的临界区

我特别对可重入函数感到困惑。我认为在自旋锁的临界区使用所有可重入函数都是不安全的,但是看起来像kfree和memcpy这样的函数可以使用。

那么我们如何知道哪些函数是可以的,哪些是不可以的呢?我通常认为任何可能阻塞的东西都是不安全的,但不是所有可重入函数都有阻塞的能力/潜力吗?

中断处理程序对自旋锁的作用和关系是什么?

向后可重入:可重入函数是在持有自旋锁时可以安全使用的函数。

许多不可重入的函数也可以。

最主要的问题是调用一个函数,该函数直接或间接地试图获取当前持有的相同锁,从而导致死锁。


特定于kmalloc,尽管您在问题中没有指定:

上面的一般答案是为什么您听说kmalloc在自旋锁中使用可能不安全的原因:它在默认情况下也获得自旋锁。使用GFP_ATOMIC标志控制kmalloc是否尝试获取自旋锁:

GFP_ATOMIC分配是高优先级的,不能休眠。这是在中断处理程序中使用的标志,在底部一半,而持有自旋锁,以及在其他无法入睡的情况下

http://books.gigatux.nl/mirror/kerneldevelopment/0672327201/ch11lev1sec4.html

相关内容

  • 没有找到相关文章

最新更新