【请教】linux驱动注册后死锁

小陆zi 小陆zi 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
大家好:
最近在开发一块omap的板子内核代码比较新。遇到一些问题请教一下大家:

我的中驱动中使用了devm_requestthreaded_irq()。我提交了中断处理函数。比如说 xxx_irq
xxx_irq()
{
int a = read_reg();
if(!a)
return IRQ_NONE;
if(a == 1)
input();
if(a == 2)
input()

rerurn IRQ_HANDLED;
}
在这个函数之中其实调用了request_threaded_irq()函数最终调用了__setup_irq()
在__setup_irq中起了一个线程irq_thread,这个线程对应的是调用了我驱动中写的xxx_irq函数。
在irq_thread中有这么两个函数:
handler_fn = irq_forced_thread_fn;
handler_fn = irq_thread_fn;
当我使用第一个force的函数时候,会死锁。开机后37秒内串口没有任何打印,最后打印信息是 no body care 在函数note_interrupt()中有相关信息。但是我调用irq_thread_fn不会死锁。调用devm_requestthreaded_irq()函数时我传递的是IRQF_IRQPOLL参数。

对比
handler_fn = irq_forced_thread_fn;
handler_fn = irq_thread_fn;
连个函数其实就是有一处不一样:local_bh_disable

我的问题是为什么这个disable会引起死锁或者是串口没有打印?

谢谢了
...全文

相关推荐

评论 1
收藏 已收藏
分享
返回顶部
小陆zi
Linux_Kernel 4,469 成员 17,458 内容