中断中I2C通信导致进程调度或者睡眠

在中断处理函数serial_sc16is7_interrupt()中调用i2c_smbus_read_byte_data()时,内核出现NULL指针错误并panic。怀疑问题可能与mutex_lock有关,因为中断上下文中禁止进程调度和睡眠。内核版本为2.6.21,错误信息显示在尝试执行mutex_lock时触发了调度。解决方案可能是避免在中断处理中使用可能会导致调度的锁。
摘要由CSDN通过智能技术生成

谢谢,第一次碰到,我有个i2c的设备驱动,在中断里进行读写,就碰到以下情况,不知道是不是使用mutex_lock引起的.

出错的地方在i2c转串口(SC16IS740)的驱动程序里,该模块申请了一个IRQ中断,
中断处理函数是serial_sc16is7_interrupt(),在这个函数里
要调用i2c-core模块里的i2c_smbus_read_byte_data()函数读I2C总线,
但这时系统就panic掉了。

内核版本是2.6.21,下面是出错信息。
---------------------------------------------------------
<3>BUG: scheduling while atomic: swapper/0x00010000/0
<3>bad: scheduling from the idle thread!
<1>Unable to handle kernel NULL pointer dereference at virtual address 00000000
<1>pgd = c0004000
<1>[00000000] *pgd=00000000

Internal error: Oops: 17 [#1]
Modules linked in: nmeapipe gtspmdev

CPU: 0
PC is at dequeue_task+0xc/0x84
LR is at deactivate_task+0x34/0x40
pc : [<bf06633c>] lr : [<bf0666c0>] Not tainted
sp : c0009cec ip : c0009d00 fp : c0009cfc

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值