原创 关于spinlock环境不能睡眠的分析说明

2008-8-21 14:35 4388 7 8 分类: MCU/ 嵌入式

    前一段时间在研发、调试一个virtual scsi host时,遇到了一个锁的问题,这个问题也就是在spinlock的环境中调用了可能睡眠的函数,导致系统崩溃。在此,对这个问题进行一下总结。


       从理论上讲spinlock环境是不能睡眠的,这需要分两种情况进行讨论。


1、  spinlock_irq(关中断)的环境下,如果上下文(context)睡眠,那么极有可能导致Linux系统无法正常调度,并且Linux的心跳中断服务例程都无法调度,所以,很容易导致系统进入崩溃状态。


2、  spinlock(不关中断)的环境下,如果上下文睡眠,那么被调度的上下文极有可能再次访问被锁保护的临界资源,从而导致系统死锁而崩溃。


<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

 


从上面的分析来看,在spinlock保护的范围内是不能睡眠的。如果睡眠,将会导致系统的崩溃。


 


       在编写virtual scsi host代码时,没有注意scsi middle levelqueuecommand函数接口是在spinlock环境下调用的,而在virtual scsi hostqueuecommand函数实现时,引入了generic_make_request函数,该函数是块设备层的转发处理函数,极有可能导致睡眠。


 


generic_make_request函数中,会调用被转发设备的私有make_request函数,如果私有make_request函数调用了kmalloc等内存分配的函数,那么在有些情况下,调用generic_make_request将会进入睡眠状态。所以在测试过程中,如果对virtual scsi host写的数据流较多,那么系统崩溃,如果写的数据流较少,那么系统工作正常,因此,十分不稳定。系统崩溃的信息参考如下:


caf347f0-049c-41b9-bf2e-4da795ce501c.jpg


   


     发现问题之后,对queuecommand函数进行了修改。在scsi host driverqueuecommand函数中只能处理简单的事物,例如将scsi command挂入需要处理的队列,然后唤醒处理队列中的daemon,在daemon的上下文对scsi middle level传下来的scsi command进行处理,例如调用generic_make_request等函数。经过上述方法修改之后,virtual scsi host系统能够稳定运行了~~


 


 
PARTNER CONTENT

文章评论1条评论)

登录后参与讨论

用户377235 2013-5-13 17:06

请问下输出方波的频率是怎么计算的呀????

用户246402 2010-3-23 22:07

我需要一种电压连续可调(0-500V),周期连续可调(10-100秒),占空比为50%的的高压方波发生器,功率很小,方波信号加在两个金属板(空气,间隔5毫米)之间。请教怎样设计,或者在哪里购买? 请指教,谢谢! mmz120@sohu.com

用户461316 2008-8-22 19:43

支持楼主
相关推荐阅读
用户411565 2012-12-18 12:58
我的存储之道博客
大家好,最近一直在做存储方面的工作,所以我在51CTO上专门开辟了一个空间讨论存储相关的问题,喜欢存储的朋友可以可以访问我的存储博客: 存储之道 (http://alanwu.blog.51cto...
用户411565 2012-04-06 21:39
SAS Cable可以有多长?
SAS接口是高端硬盘的主流接口,是存储系统的理想选择。我们知道高速信号的传输距离和传输线相关的,那么SAS作为外部通信接口,其Cable线具体可以有多长呢? 我在网上找到上图所示的眼图测...
用户411565 2012-04-06 21:38
对TRIM SCSI命令的一些分析
前一段时间做了一些对SSD方面进行优化的工作,SSD最大的问题在于长时间使用之后,IO性能会急剧下降。其主要问题在于为了防止“写放大”问题的产生,SSD的firmware采用了类似于log方式的算...
用户411565 2012-04-06 21:35
惊叹!我们的跨洋网络
  每次地质自然灾害的时候,总会伴随着网络的问题,这是由于我们的越洋光纤网络出了故障,受到自然力的破坏而导致断裂。越洋光纤,听起来的确是件非常不可思议的事情,工程量非常的巨大,但正是如此伟大的...
用户411565 2012-04-06 21:33
科学仪器网络模型
科学仪器概述     科学仪器发展趋势 科学是从测量开始的,科学仪器是信息技术的源头,是信息产业的重要组成部分,是现代科学与工业的基石。科学仪器产业的发展关系到国家科学研究实力、生...
用户411565 2012-04-06 21:16
谈谈RAID产品与技术
说起RAID,学计算机的同学马上会说RAID技术简单啊,就是将数据条带化,然后计算一些冗余数据,一并写入磁盘。通过RAID技术一方面提高系统的IO性能;另一方面提高系统的可靠性。单纯从RAID的原...
EE直播间
更多
我要评论
1
7
关闭 站长推荐上一条 /3 下一条