有一个字符驱动,内部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 周四 晚

Linux内核小笔记:spin_lock锁内不能使用sleep休眠相关推荐

  1. LINUX内核之普通自旋锁

    LINUX内核之普通自旋锁 @CopyLeft by ICANTH,I Can do ANy THing that I CAN THink!~ Author:WenHui,WuHan Universi ...

  2. 操作系统进程学习(Linux 内核学习笔记)

    操作系统进程学习(Linux 内核学习笔记) 进程优先级 并非所有进程都具有相同的重要性.除了大多数我们所熟悉的进程优先级之外,进程还有不同的关键度类别,以满足不同需求.首先进程比较粗糙的划分,进程可 ...

  3. linux进程睡眠编程,linux内核编程-可睡眠锁之SRCU

    linux内核编程-可睡眠锁之SRCU DEFINE_SRCU DEFINE_SRCU_STATIC static修饰的定义只能在该c文件中使用,用于保护命名空间. 如果一个函数里面使用了static ...

  4. 探秘最新Linux内核中的自旋锁

    一.前言 目前最新内核中的自旋锁已经进化成queued spinlock,因此需要一篇新的自旋锁文档来跟上时代.此外,本文将不再描述基本的API和应用场景,主要的篇幅将集中在具体的自旋锁实现上.顺便说 ...

  5. 《庖丁解牛Linux内核》笔记之:调用堆栈

    <庖丁解牛Linux内核>笔记之:调用堆栈 参考视频 基础知识介绍 在基础知识里讲过在使用cal调用函数时,会在之前的堆栈上创建一个新的堆栈,这里想讨论的就是如何实现调用函数时的参数传递. ...

  6. 《庖丁解牛Linux内核》笔记之:汇编基础

    <庖丁解牛Linux内核>笔记之:汇编基础 参考视频 下面的说法都来自x86CPU寄存器. 值的不同表示方法 %eax 类似这种就是直接操作该寄存器,效果类似于C语言中的指针:*和& ...

  7. Linux趣味小知识---tty终端内置的极简QQ功能

                                                  Linux趣味小知识---tty终端内置的极简QQ功能 首先,需要了解几个基本的概念: a, tty(终端设 ...

  8. linux内核编程笔记【原创】

    以下为本人学习笔记,如有转载请注明出处,谢谢 1. service用法 oneshot DEFINE_MUTEX(buzzer_mutex); mutex_lock(&buzzer_mutex ...

  9. 我的Linux内核学习笔记

    在开始今天的内容之前,其实有一些题外话可以和大家分享一下.自从工作以来,我个人一直都有一个观点.那就是怎么样利用简单的代码来说明开发中的问题,或者是解释软件中的原理,这是一个很高的学问.有些道理看上去 ...

最新文章

  1. 基于ADuC845的数据采集板
  2. 储存卡怎么格式化为fat32_电脑复制文件到U盘提示文件容量太大该怎么办?
  3. 引用的定义、使用及其和指针的区别与联系
  4. 解决Mac nginx问题 [emerg] 54933#0: bind() to 0.0.0.0:80 failed (13: Permission denied)
  5. C#多线程之旅(4)——APM初探
  6. 网站实现点击 “加入收藏 ”功能 - 代码篇
  7. 如何制作一个横版格斗过关游戏 2 Cocos2d x 2 0 4
  8. NTLDR is missing Press any key to restart
  9. curry化 js_前端发动机从 bind 聊到 curry (柯里化)
  10. 10_android打包的过程
  11. 黑马程序员传智播客 python 迭代器学习笔记
  12. 关闭WPS广告弹窗骚扰(Kingsoft Office 推荐)
  13. 【OPNsense】广东电信拨号用户通过OPNsense获取原生IPV6地址
  14. 《软件设计与实现》 --- 读书笔记
  15. 枚举,联合,宏定义,结构体
  16. 岩板铺地好吗_岩板铺客厅地面好吗 比800*800的瓷砖更美观又大气?
  17. (附源码)计算机毕业设计SSM家具商城系统
  18. 语言拟人向:来自Python、JAVA、C语言的“傲娇”自我介绍
  19. CF1383C 题解
  20. Elasticsearch是什么?

热门文章

  1. 8999元起!vivo X Fold折叠屏旗舰今日首销:采用航天级浮翼式铰链
  2. 无惧上代信号差诟病?谷歌Pixel 7系列继续搭载三星基带芯片
  3. 雷军再失猛将!小米12号创始员工离职 曾一起喝粥创立小米
  4. 在这个功能上,iOS 落后 Android 了
  5. 腾讯云正式发布遨驰云原生操作系统
  6. 芯片短缺并未缓解,机构数据显示交付周期在7月份已超过20周
  7. 特斯拉拦不住蔚来取代BBA的心
  8. 特斯拉副总裁陶琳:Model Y 本月开始陆续交付
  9. 快手抢占短视频第一股,增长惊人,腾讯又是大赢家!
  10. 台积电6月营收环比大增 或预示苹果A14处理器已大规模出货