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

小陆zi 2014-07-09 09:13:58
大家好:
最近在开发一块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会引起死锁或者是串口没有打印?

谢谢了
...全文
128 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
小陆zi 2014-07-19
  • 打赏
  • 举报
回复
问题已解决。

4,441

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 内核源代码研究区
社区管理员
  • 内核源代码研究区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧