kmalloc fail导致系统异常

博客分析了在中断服务例程(ISR)中进行内存分配可能导致的系统异常问题。由于ISR不应包含可调度操作,使用`kmalloc(GFP_ATOMIC)`而非`kmalloc(GFP_KERNEL)`更为安全,因为`GFP_KERNEL`可能引起调度并导致内存分配失败,从而触发kernel BUG。文中举例展示了因内存分配失败引发的错误日志。
摘要由CSDN通过智能技术生成

如果在中断ISR中间有作memory alloc的动作,有可能会遇到如下的BUG log信息,分析如下:

1  ISR中不能存在任何可调度的动作,如sleep等

2  在ISR中申请memory时,最好尽量使用 kmalloc(xxx, GFP_ATOMIC), 而不要使用kmalloc(xxx, GFP_KERNEL), 因为GFP_KERNEL是可以被打断的,如果因memory not enough 或其他原因alloc fail掉,则kmalloc动作将会被调度走,并等待下一次alloc, 这样就会导致kernel BUG.


[80572.488640] BUG: scheduling while atomic: BGM/821/0x40000103

[80572.494232] Modules linked in: snd_mtk mali_kbase(O) ump(O) kds(O) mtk_mmap(PO) usbhid usb_storage mtk_hcd ntfs btmtk_usb mt7662u_sta(O) driver_cli(PO) mtk_mod(PO) fusion(O)
[80572.509686] CPU: 1 PID: 821 Comm: BGM Tainted: P        W  O 3.10.79 #1
[80572.516296] [<c0012d24>] (unwind_backtrace+0x0/0xdc) from [<c0010db0>] (show_stack+0x10/0x14)
[80572.524793] [<c0010db0>] (show_stack+0x10/0x14) from [<c037d720>] (__schedule_bug+0x48/0x64)
[80572.53321
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值