Linux内核小笔记:spin_lock锁内不能使用sleep休眠
来源:互联网 发布:linux分析日志 编辑:程序博客网 时间:2024/06/05 20:26
有一个字符驱动,内部ioctl函数不同的分支均使用spin_lock和spin_unlock,以保证对外设操作的原子性。但是,有一个功能需要对一个GPIO引脚设置上下沿,于是就使用msplee来延时。结果应用层程序在多个线程中调用该驱动提供的ioctl接口时,发现系列卡死了,只能手动复位。原来不能在spin lock中使用sleep。
首先,执行了sleep,就可能切换到其它进程,此时,并没有调用spin_unlock释放锁。当另外的进程(线程)再次调用同一驱动时,需要获取相同的spin lock,由于之前并没有释放锁,于是就出现死锁了。
鉴于此,只能放弃msleep的做法,而使用循环达到延时的目标。
参考资料:
http://stackoverflow.com/questions/4752031/why-cant-you-sleep-while-holding-spinlock
李迟 2017.1.12 周四 晚
0 0
- Linux内核小笔记:spin_lock锁内不能使用sleep休眠
- linux内核spin_lock分析
- linux内核spin_lock分析
- Linux内核-spin_lock()
- 内核自旋锁spin_lock
- 内核锁 spin_lock 与 mutex_lock 区别? -- linux内核
- Linux 内核 spin_lock 和spin_unlock
- Linux内核spin_lock、spin_lock_irq、spin_lock_irqsave
- Linux内核中的spin_lock理解
- linux 自旋锁 spin_lock
- linux内核*delay/*sleep[_range]的使用
- Linux内核spin_lock与spin_lock_irq分析
- Linux内核spin_lock与spin_lock_irq分析
- Linux内核spin_lock与spin_lock_irq分析
- Linux内核spin_lock与spin_lock_irq分析
- Linux内核spin_lock、spin_lock_irq 和 spin_lock_irqsave 分析
- Linux内核spin_lock与spin_lock_irq分析
- Linux内核spin_lock与spin_lock_irq分析
- mysql添加索引
- 一念永恒 > 第532章 我委屈啊
- JavaMail使用qq邮箱(转)
- Android Studio 运行java程序
- 图论,导航图基础(c#版)
- Linux内核小笔记:spin_lock锁内不能使用sleep休眠
- 自定义View开关按钮
- 关于linux启动kernel panic错误解决
- MySQL定时备份(windows7)
- camera理论基础和工作原理
- HttpServletResponse
- WebRTC IOS 版编译步骤
- 欢迎使用CSDN-markdown编辑器
- 1.12