Two addresses in kernel Call Trace

349 views Asked by At

In the below call trace, I see two address before each function name in the call trace. Found that the second address is the next Instruction address from where the execution continues after the called function return. What is the first address ?

Also any hint on how to debug this "scheduling while atomic" issue ?

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
1

There are 1 answers

0
Gil Hamilton On

The first address is the stack frame address. You'll note that the first entry matches up with what I presume is the saved stack pointer register (second entry in the line starting with GPR00). The stack trace is created by code that follow the chain of stack frames back up the call stack.

"Scheduling while atomic" means something tried to call a blocking function in the kernel from an inappropriate context. For example, trying to sleep while waiting for some resource while in an interrupt handler.