BUG: scheduling while atomic: events/0/4/总结
对于Linux内核来说,Oops就意外着内核出了异常,此时会将产生异常时CPU的状态,出错的指令地址、数据地址及其他寄存器,函数调用的顺序甚至是栈里面的内容都打印出来,然后根据异常的严重程度来决定下一步的操作:杀死导致异常的进程或者挂起系统。
最典型的异常是在内核态引用了一个非法地址,通常是未初始化的野指针Null,这将导致页表异常,最终引发Oops。
Linux系统足够健壮,能够正常的反应各种异常。异常通常导致当前进程的死亡,而系统依然能够继续运转,但是这种运转都处在一种不稳定的状态,随时可能出问题。对于中断上下文的异常及系统关键资源的破坏,通常会导致内核挂起,不再响应任何事件。
2 内核的异常级别
2.1 Bug
Bug是指那些不符合内核的正常设计,但内核能够检测出来并且对系统运行不会产生影响的问题,比如在原子上下文中休眠。如:
BUG: scheduling while atomic: insmod/826/0x00000002
Call Trace:
[ef12f700] [c00081e0] show_stack+0x3c/0x194 (unreliable)
[ef12f730] [c0019b2c] __schedule_bug+0x64/0x78
[ef12f750] [c0350f50] schedule+0x324/0x34c
[ef12f7a0] [c03515c0] schedule_timeout+0x68/0xe4
[ef12f7e0] [c027938c] fsl_elbc_run_command+0x138/0x1c0
[ef12f820] [c0275820] nand_do_read_ops+0x130/0x3dc
[ef12f880] [c0275ebc] nand_read+0xac/0xe0
[ef12f8b0] [c0262d98] part_read+0x5c/0xe4
[ef12f8c0] [c017bcac] jffs2_flash_read+0x68/0x254
[ef12f8f0] [c0170550] jffs2_read_dnode+0x60/0x304
[ef12f940] [c017088c] jffs2_read_inode_range+0x98/0x180
[ef12f970] [c016e610] jffs2_do_readpage_nolock+0x94/0x1ac
[ef12f990] [c016ee04] jffs2_write_begin+0x2b0/0x330
[ef12fa10] [c005144c] generic_file_buffered_write+0x11c/0x8d0
[ef12fab0] [c0051e48] __generic_file_aio_write_nolock+0x248/0x500
[ef12fb20] [c0052168] generic_file_aio_write+0x68/0x10c
[ef12fb50] [c007ca80] do_sync_write+0xc4/0x138
[ef12fc10] [f107c0dc] oops_log+0xdc/0x1e8 [oopslog]
[ef12fe70] [f3087058] oops_log_init+0x58/0xa0 [oopslog]
[ef12fe80] [c00477bc] sys_init_module+0x130/0x17dc
[ef12ff40] [c00104b0] ret_from_syscall+0x0/0x38
--- Exception: c01 at 0xff29658
LR = 0x10031300
2.2 Oops
程序在内核态时,进入一种异常情况,比如引用非法指针导致的数据异常,数组越界导致的取指异常,此时异常处理机制能够捕获此异常,并将系统关键信息打印到串口上,正常情况下Oops消息会被记录到系统日志中去。
Oops发生时,进程处在内核态,很可能正在访问系统关键资源,并且获取了一些锁,当进程由于Oops异常退出时,无法释放已经获取的资源,导致其他需要获取此资源的进程挂起,对系统的正常运行造成影响。通常这种情况,系统处在不稳定的状态,很可能崩溃。
2.3 Panic
当Oops发生在中断上下文中或者在进程0和1中,系统将彻底挂起,因为中断服务程序异常后,将无法恢复,这种情况即称为内核panic。另外当系统设置了panic标志时,无论Oops发生在中断上下文还是进程上下文,都将导致内核Panic。由于在中断复位程序中panic后,系统将不再进行调度,Syslogd将不会再运行,因此这种情况下,Oops的消息仅仅打印到串口上,不会被记录在系统日志中。
在调试IC卡驱动过程中频繁拔插卡则出现BUG: scheduling while atomic: events/0/4/0x00010004异常导致系统崩溃,具体信息如下:
[ 1947.900000] BUG: scheduling while atomic: events/0/4/0x00010004
<4>[ 1947.900000] @@@@cardslot_iso7816_uart_interrupt,line:1384
<3>[ 1947.900000] BUG: scheduling while atomic: events/0/4/0x00010004
<4>[ 1947.900000] Modules linked in: iccard iso7816_uart bcm589x_pm(P) bar_scanner bcm589x_ped idtechencmag magstripe
cx930xx modem slnsp ftp101 printer bcm589x_spi touch_screen bcm5892_adc_driver matrix_keys beeper leds fusion
bcm589x_otg bcm589x_dwccom [last unloaded: iso7816_uart]
<4>[ 1947.900000]
<4>[ 1947.900000] Pid: 4, comm: events/0
<4>[ 1947.900000] CPU: 0 Tainted: P (2.6.32.9-bcm5892 #8)
<4>[ 1947.900000] PC is at memcpy+0x16c/0x330
<4>[ 1947.900000] LR is at 0xffffff
<4>[ 1947.900000] pc : [<c017c5cc>] lr : [<00ffffff>] psr: 20000013
<4>[ 1947.900000] sp : c3823ecc ip : 00ffffff fp : c3823f60
<4>[ 1947.900000] r10: 00000000 r9 : 00ffffff r8 : 00ffffff
<4>[ 1947.900000] r7 : 00ffffff r6 : 00ffffff r5 : ff000000 r4 : 0000ffff
<4>[ 1947.900000] r3 : ff00ffff r2 : 0000003f r1 : c483ad44 r0 : c4854d40
<4>[ 1947.900000] Flags: nzCv IRQs on FIQs on Mode SVC_32 ISA ARM Segment kernel
<4>[ 1947.900000] Control: 00c5387d Table: 43b14008 DAC: 00000017
<4>[ 1947.900000] [<c0032fb4>] (show_regs+0x0/0x4c) from [<c004d85c>] (__schedule_bug+0x48/0x5c)
<4>[ 1947.900000] r4:c3823e84
<4>[ 1947.900000] [<c004d814>] (__schedule_bug+0x0/0x5c) from [<c032b734>] (schedule+0x78/0x45c)
<4>[ 1947.900000] r4:c3823ce8
<4>[ 1947.900000] [<c032b6bc>] (schedule+0x0/0x45c) from [<c032c138>] (schedule_timeout+0x20/0x1dc)
<4>[ 1947.900000] [<c032c118>] (schedule_timeout+0x0/0x1dc) from [<c032bfa0>] (wait_for_common+0xf8/0x1b4)
<4>[ 1947.900000] r6:c3822000 r5:c3815340 r4:c3823ce8
<4>[ 1947.900000] [<c032bea8>] (wait_for_common+0x0/0x1b4) from [<c032c0ec>] (wait_for_completion+0x18/0x1c)
<4>[ 1947.900000] [<c032c0d4>] (wait_for_completion+0x0/0x1c) from [<c0065ba4>] (__cancel_work_timer+0x140/0x194)
<4>[ 1947.900000] [<c0065a64>] (__cancel_work_timer+0x0/0x194) from [<c0065c0c>] (cancel_delayed_work_sync+0x14/0x18)
<4>[ 1947.900000] [<c0065bf8>] (cancel_delayed_work_sync+0x0/0x18) from [<c0198044>]
(fb_deferred_io_fsync_delay+0x1c/0x2c)
<4>[ 1947.900000] [<c0198028>] (fb_deferred_io_fsync_delay+0x0/0x2c) from [<c01999dc>]
(new8110_lcd_icon_control+0xb0/0xbc)
<4>[ 1947.900000] r5:c38daa80 r4:00008040
<4>[ 1947.900000] [<c019992c>] (new8110_lcd_icon_control+0x0/0xbc) from [<c003ad64>] (lcd_icon_set+0x20/0x28)
<4>[ 1947.900000] r7:bf08e6b0 r6:000000ff r5:c3bee70c r4:c3b0aa1c
<4>[ 1947.900000] [<c003ad44>] (lcd_icon_set+0x0/0x28) from [<c023d8c0>] (led_trigger_event+0x64/0xa0)
<4>[ 1947.900000] [<c023d85c>] (led_trigger_event+0x0/0xa0) from [<bf088520>] (card_insert_interrupt+0x70/0x98
[iccard])
<4>[ 1947.900000] r6:bf08cacc r5:c041cf4c r4:00000040
<4>[ 1947.900000] [<bf0884b0>] (card_insert_interrupt+0x0/0x98 [iccard]) from [<bf084b10>]
(cardslot_iso7816_uart_interrupt+0xd4/0xb68 [iccard])
<4>[ 1947.900000] r7:0000002e r6:c041cf4c r5:0000002e r4:bf08cacc
<4>[ 1947.900000] [<bf084a3c>] (cardslot_iso7816_uart_interrupt+0x0/0xb68 [iccard]) from [<c007e76c>]
(handle_IRQ_event+0x3c/0xfc)
<4>[ 1947.900000] r6:00000000 r5:00000000 r4:c3932da0
<4>[ 1947.900000] [<c007e730>] (handle_IRQ_event+0x0/0xfc) from [<c0080734>] (handle_level_irq+0xcc/0x168)
<4>[ 1947.900000] r7:00000002 r6:0000002e r5:c3932da0 r4:c0420810
<4>[ 1947.900000] [<c0080668>] (handle_level_irq+0x0/0x168) from [<c0031070>] (asm_do_IRQ+0x70/0x8c)
<4>[ 1947.900000] r6:00004000 r5:00000000 r4:0000002e
<4>[ 1947.900000] [<c0031000>] (asm_do_IRQ+0x0/0x8c) from [<c0031b78>] (__irq_svc+0x38/0xd4)
<4>[ 1947.900000] Exception stack(0xc3823e84 to 0xc3823ecc)
<4>[ 1947.900000] 3e80: c4854d40 c483ad44 0000003f ff00ffff 0000ffff ff000000 00ffffff
<4>[ 1947.900000] 3ea0: 00ffffff 00ffffff 00ffffff 00000000 c3823f60 00ffffff c3823ecc 00ffffff
<4>[ 1947.900000] 3ec0: c017c5cc 20000013 ffffffff
<4>[ 1947.900000] r5:d102a000 r4:ffffffff
<4>[ 1947.900000] [<c0198f84>] (new8110fb_deferred_io+0x0/0x5ac) from [<c0197f40>] (fb_deferred_io_work+0x90/0xe0)
<4>[ 1947.900000] [<c0197eb0>] (fb_deferred_io_work+0x0/0xe0) from [<c00657b8>] (worker_thread+0x178/0x22c)
<4>[ 1947.900000] r8:c0197eb0 r7:c3801900 r6:c38daa1c r5:c3822000 r4:c38daa20
<4>[ 1947.900000] [<c0065640>] (worker_thread+0x0/0x22c) from [<c00692b8>] (kthread+0x84/0x8c)
<4>[ 1947.900000] [<c0069234>] (kthread+0x0/0x8c) from [<c0056b80>] (do_exit+0x0/0x62c)
<4>[ 1947.900000] r7:00000000 r6:00000000 r5:00000000 r4:00000000
经过反复调试确定问题出在拔插卡中断里面,在拔插卡中断中调用了led_trigger_event(card_insert_led_trigger, LED_OFF)函数,此函数将会加锁而概率性引起死锁或者阻塞,而在中断上下文中绝对不允许调用阻塞函数,故系统将会报bug.
去掉后问题解决.
BUG: scheduling while atomic: events/0/4/总结的更多相关文章
- BUG: scheduling while atomic 分析【转】
本文转载自:https://blog.csdn.net/cfy_phonex/article/details/12090943 遇到一个典型的schedule问题. <3>[26578 ...
- linux内核打印"BUG: scheduling while atomic
linux内核打印"BUG: scheduling while atomic"和"bad: scheduling from the idle thread"错误 ...
- 进程kswapd0与events/0消耗大量CPU的问题
http://www.nowamagic.net/librarys/veda/detail/2539 今天下午网站宕了两次机,发工单给阿里云,发现原因是服务器的CPU 100%了. 重启服务器后,使用 ...
- Fundebug支付宝小程序BUG监控插件更新至0.2.0,新增test()方法,报错增加Page数据
摘要: 0.2.0新增fundebug.test()方法,同时报错增加了Page数据. Fundebug提供专业支付宝小程序BUG监控服务,可以第一时间为您捕获生存环境中小程序的异常.错误或者BUG, ...
- Bug管理工具MantisBT-2.18.0安装教程
Bug管理工具MantisBT安装教程 MantisBT官网下载地址:https://sourceforge.net/projects/mantisbt/# 写于:2018.12.1 如上传博客资料图 ...
- java开发bug 在启动Tomcat 6.0时发现第一条信息便是
MyEclipse 8.5 + tomcat6 + jdk 1.8 启动的时候报错: The APR based Apache Tomcat Native library which allows o ...
- delphi vlc 安装bug 处理编译错误"0" is an invalid value for the "DebugInformation" parameter of the "DCC"
处理编译错误"0" is an invalid value for the "DebugInformation" parameter of the "DCC" [摘要:http://blog.csdn ...
- [bug] MySQL-Front连接MySQL 8.0失败
原因: MySQL-Front不支持MySQL 8.0的密码认证方式 解决: 在mysql安装目录中my.ini文件末尾添加 default_authentication_plugin=mysql_n ...
- scheduling while atomic 出现的错误
产生这种情况的原因: 1.当中断发生时,出现了调度做法, 2.另一个是spin_lock 里调用sleep, 让出调度, 另外线程又进行spin_lock, 导致死锁. 相关问题的链接 1.为 ...
随机推荐
- docker学习笔记16:Dockerfile 指令 ADD 和 COPY介绍
一.ADD指令 ADD指令的功能是将主机构建环境(上下文)目录中的文件和目录.以及一个URL标记的文件 拷贝到镜像中. 其格式是: ADD 源路径 目标路径 如: #test FROM ubunt ...
- php language construct 语言构造器
isset和empty看起来像是函数,我们也经常把它当作函数一样使用,但是实际上,它们是语言构造器. php中的语言构造器就相当于C中的预定义宏的意思,它属于php语言内部定义的关键词,不可以被修改, ...
- 发送邮件给某人:mailto标签
mailto标签 1.标签最简式 <a href="mailto:xxx@xx.com">联系站长</a> 2.标签帮你填抄送地址 <a href=& ...
- 放开chrome,微度新标签页 删除
来自VIc_:http://blog.csdn.net/Vic___ 本人只是提供方法建议,没有任何商业欲望. 欢迎转载 有一天,突然,我的标签栏,被改变了,这是怎么了,我的书签栏 我是一个镇定的人, ...
- paip.输入法编程---输入法ATIaN历史记录 c823
paip.输入法编程---输入法ATIaN历史记录 c823 作者Attilax , EMAIL:1466519819@qq.com 来源:attilax的专栏 地址:http://blog.csd ...
- BZOJ 1110: [POI2007]砝码Odw( 贪心 )
ORZjcvb... #include<bits/stdc++.h> using namespace std; ; int N, M, item[maxn], V[maxn]; vecto ...
- 演练2-4:CodeFirst实例之“电影网站制作”
原文出处:http://www.asp.net/mvc/tutorials/mvc-4/getting-started-with-aspnet-mvc4/adding-a-model EntityFr ...
- SuperSocket源码解析之启动过程
一 简介 这里主要说明从配置系统引导启动SuperScoekt作为应用程序,且以控制台程序方式启动 二 启动过程 2.1 配置解析 从读取配置文件开始,直接拿到一个SocketServiceConfi ...
- RPC通信框架——RCF介绍(替换COM)
阅读目录 RPC通信框架 为什么选择RCF 简单的性能测试 参考资料 总结 现有的软件中用了大量的COM接口,导致无法跨平台,当然由于与Windows结合的太紧密,还有很多无法跨平台的地方.那么为了实 ...
- codeforces 264D Colorful Stones
题目 题目来自于rng_58Orz. 算法 讨论某个状态\((x,y)\)是否可达,\(x\)是狐狸到达的石头,\(y\)是猫的. 题解说,如果满足以下条件,那么它就是可到达状态: \(t[0..y] ...