谢谢,第一次碰到,我有个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
r10: 00000005 r9 : b9a0f85d r8 : c00129b8
r7 : 00000002 r6 : c00129b8 r5 : c0008000 r4 : c00129b8
r3 : 00000080

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

被折叠的 条评论
为什么被折叠?



