在下面的呼叫追踪中,我在呼叫追踪中的每个功能名称前面看到两个地址。发现第二个地址是下一个指令地址,在被调用函数返回后执行继续执行。第一个地址是什么?
还有关于如何调试这个“原子上调度”问题的任何提示吗?
May 7 16:40:33.955415 err TCU-0 kernel: BUG: scheduling while atomic: logf/153/0x00000103
May 7 16:40:33.955415 warn TCU-0 kernel: Modules linked in: 8021q JbondDriver(P) linux_kernel_bde(P) linux_user_bde(P) ipmi_watchdog netconsole bdspboard dspcontrol bdsprio rdbus rddrv_p2020 rdsw tsi577_enea rddev_66xx riodev linx linx_eth_cm dmxmsg_core dmxmsg_po(P) dmxmsg_devif [last unloaded: tsi577]
May 7 16:40:33.955415 warn TCU-0 kernel: NIP: c040d510 LR: c00469ac CTR: c004686c
May 7 16:40:33.955415 warn TCU-0 kernel: REGS: cf83dd10 TRAP: 0501 Tainted: P (2.6.34.15-WR4.3.fp_ppc_adsp2_standard-00145-g4700c91)
May 7 16:40:33.955415 warn TCU-0 kernel: MSR: 00029000 <EE,ME,CE> CR: 24000a88 XER: 00000000
May 7 16:40:33.955415 warn TCU-0 kernel: TASK = ce630000[153] 'logf' THREAD: cf83c000 CPU: 0
May 7 16:40:33.955415 warn TCU-0 kernel: GPR00: 00000000 cf83ddc0 ce630000 c05964d8 00000001 0000fa00 00000001 c013f438
May 7 16:40:33.955415 warn TCU-0 kernel: GPR08: 00000000 00039672 affe58a7 c05968e8 0000fa00
May 7 16:40:33.955415 warn TCU-0 kernel: NIP [c040d510] _raw_spin_unlock_irq+0x1c/0x4c
May 7 16:40:33.955415 warn TCU-0 kernel: LR [c00469ac] do_syslog+0x198/0x424
May 7 16:40:33.955415 warn TCU-0 kernel: Call Trace:
May 7 16:40:33.955415 warn TCU-0 kernel: [cf83ddc0] [0000c739] 0xc739 (unreliable)
May 7 16:40:33.955415 warn TCU-0 kernel: [cf83ddd0] [c00469ac] do_syslog+0x198/0x424
May 7 16:40:33.955415 warn TCU-0 kernel: [cf83de30] [c0149574] kmsg_read+0x58/0x68
May 7 16:40:33.955415 warn TCU-0 kernel: [cf83de40] [c013f4c8] proc_reg_read+0x90/0xa8
May 7 16:40:33.955415 warn TCU-0 kernel: [cf83de70] [c00f4cb0] do_loop_readv_writev+0x48/0x84
May 7 16:40:33.955415 warn TCU-0 kernel: [cf83dea0] [c00f5870] do_readv_writev+0xcc/0x19c
May 7 16:40:33.955415 warn TCU-0 kernel: [cf83df10] [c00f5c54] sys_readv+0x50/0xfc
May 7 16:40:33.955415 warn TCU-0 kernel: [cf83df40] [c00100d8] ret_from_syscall+0x0/0x4
May 7 16:40:33.955415 warn TCU-0 kernel: --- Exception: c01 at 0xfcad5a8
答案 0 :(得分:1)
第一个地址是堆栈帧地址。你会注意到第一个条目与我认为是保存的堆栈指针寄存器(从GPR00开始的行中的第二个条目)匹配。堆栈跟踪由跟随堆栈帧链的代码创建,支持调用堆栈。
“原子调度”意味着试图从不适当的上下文中调用内核中的阻塞函数。例如,在中断处理程序中等待某些资源时尝试睡眠。