首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >我想一边睡觉一边拿着互斥物

我想一边睡觉一边拿着互斥物
EN

Stack Overflow用户
提问于 2015-06-05 12:07:07
回答 1查看 1.4K关注 0票数 1

我需要写和读从以太网芯片的FIFO,为此,我想使用DMA控制器。因此,我修改了一个现有的驱动程序,并在触发DMA传输后,使用wait_event_interruptible使进程休眠,并使用wake_up_interruptible使其被ISR唤醒。我的问题是,原来的驱动程序是使用自旋锁来保护FIFO访问。但是大家都知道,当我抱着旋转锁的时候,我不应该睡觉。所以我试着用互斥锁代替自旋锁。(因为,我可能在获取互斥对象时睡觉,在获得互斥锁之后,我将在DMA触发器之后再次睡眠。我被ISR吵醒了,我会释放那个互斥体。没问题!我想。)但我还是得到了这样的“排班而原子错误”。问题是:我需要睡觉,直到DMA完成,同时持有一个锁(用于FIFO读写)。抱着互斥物睡觉不可以吗?

添加:在我的例子中,读取接收FIFO的接收函数是NAPI轮询函数,它是一个软函数(中断掩码被重置,但仍然是中断上下文。tasklet也是中断上下文)。要读取FIFO,我使用DMA和goto睡眠,所以这就是问题所在:在软时睡觉。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-06-05 15:38:53

抱着互斥物睡觉是可以的。

scheduling while atomic BUG指的是在原子上下文中睡觉。可能,您忘记解锁了,或者您试图在中断处理程序中睡觉。

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

https://stackoverflow.com/questions/30666183

复制
相关文章

相似问题

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