首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何知道内核空间中是否持有自旋锁

如何知道内核空间中是否持有自旋锁
EN

Stack Overflow用户
提问于 2015-02-04 17:38:35
回答 1查看 1.3K关注 0票数 0

我正在使用NVIDIA API编写一个Linux设备驱动程序,我注意到如果我调用一个持有自旋锁的函数,它就会失败。我在问自己,一个内核函数如何知道它是否被称为持有旋转锁?

如果我使用一个伪代码示例可能会更好:

代码语言:javascript
运行
复制
spin_lock_irqsave(&my_lock,flags)
nvidia_p2p_get_pages(...)
spin_unlock_irqrestore(&my_lock, flags)

这种情况下的函数p2p_get_pages返回一个错误(但如果我使用它时没有使用自旋锁,则它可以工作……无论如何,这不是问题所在)。

在失败的函数内部会发生什么?也许它想要另一个自旋锁?还是睡觉?或者它检查自旋锁..。又是如何做到的?它怎么会知道自旋锁的事?

谢谢!

EN

回答 1

Stack Overflow用户

发布于 2015-02-05 00:00:46

可以通过调用spin_is_locked()来检查特定的锁是否被锁定。但是,nvidia驱动程序不太可能知道您的my_lock

许多函数只关心它们(可能)需要睡眠这一事实。当处于原子上下文中时(即,当中断被禁用时),这将会爆炸。为了检测到这一点,许多这样的函数调用might_sleep()来在实际发生坏事之前记录一个警告。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28318020

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档