Hi, Valdis Klētnieks Thank you for your generous help. My understanding of this matter is on a different level with your help.
Jul 3 10:23:31 yx kernel: [ 1176.166058] watchdog: BUG: soft lockup - CPU#0 stuck for 22s! [rt_cansend:1837] Jul 3 10:23:31 yx kernel: [ 1176.166066] Modules linked in: ...... Jul 3 10:23:31 yx kernel: [ 1176.166252] Call Trace: Jul 3 10:23:31 yx kernel: [ 1176.166261] _raw_spin_lock+0x20/0x30 Jul 3 10:23:31 yx kernel: [ 1176.166270] can_write+0x6c/0x2c0 [advcan]
You get into function can_write() in module advcan. That tries to take a spinlock, while something else already has it. Can I draw the conclusion that continually acquiring the spinlock causes the soft lockup and the CPU has been stuck for 22s? Can I think in this way?
Thank you for your attention to this matter. Best Regards. Valdis Klētnieks <valdis.kletnieks@vt.edu> 于2020年7月4日周六 下午12:39写道:
Could you please give me some hint on how to investigate the cause deeply?
Shortening the call trace to the relevant lines:
Jul 3 10:23:31 yx kernel: [ 1176.166252] Call Trace: Jul 3 10:23:31 yx kernel: [ 1176.166261] _raw_spin_lock+0x20/0x30 Jul 3 10:23:31 yx kernel: [ 1176.166270] can_write+0x6c/0x2c0 [advcan] Jul 3 10:23:31 yx kernel: [ 1176.166292] __vfs_write+0x3a/0x190
You get into function can_write() in module advcan.
That tries to take a spinlock, while something else already has it.
The spinlock call is (roughly) 15% of the way through the function can_write().
The 'modules linked in' list includes "advcan(OE)".
The 'O' tells us it's an out-of-tree module, which means you need to talk to whoever wrote the module and find out why it's hanging on a spin lock (most likely something else is failing to release it).
And that's about as far as we can hint, since we don't have the source for your out-of-tree module. If the people who wrote it would clean it up and get it into the base Linux tree, then we'd all have access to it and be able to help in much greater detail.