Linux GPIO中断调用问题(BUG)

在调试GPIO中断功能时遇到开机死机问题,通过分析log发现由于spinlock使用不当导致死锁。在使能中断前的spin_lock_irqsave与使能中断后的spin_unlock_irqrestore没有配对使用,修正代码后问题解决。
摘要由CSDN通过智能技术生成

最近在调试客户定制的PTT对讲耳机, 需要用到GPIO口中断功能识别一个pin来区别普通耳机和定制的耳机。

开机过程中出现死机,抓了一个开机log发现:

 。。。。。。

[  142.830740] mbhc_ptt_det_irq_enable: enter, is_ptt_irq_dsiabled:1
[  142.830783] BUG: spinlock bad magic on CPU#6, kworker/6:2/1468
[  142.835820]  lock: 0xfffffffbeb47f9a0, .magic: 00000000, .owner: <none>/-1, .owner_cpu: 0
[  142.841550] Causing a watchdog bite!

。。。。。。

   发现spinlock这里配置不当。

回到代码:

  irq enable 函数里:

 。。。

     
    spin_lock_irqsave(&mbhc->irq_lock, irqflags);
    if(mbhc->is_ptt_irq_dsiabled){
        enable_irq(mbhc->ptt_irq);
        mbhc->is_ptt_irq_dsiabled = false;
    }
    spin_unlock_irqrestore(&mbhc->irq_lock, irqflags);

。。。

  使能中断之前使用了 spin_lock_irqsave:

#define spin_lock_irqsave(lock, flags)                \
do {                      

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值