本文章会持续记录。
在aop.log、ddr.log、tz.log、hyp.log中均没有明显异常的时候,可以尝试的思路。
例①:
dmesg_TZ.log中 能看到kernel BUG at drivers/soc/qcom/rpmh-rsc.c:1007!,但是后面没有log了。
我们可以直接看每个cpu的调用栈,找找有没有死锁相关的问题,关键字spin_lock
Core vcpu1 PC: queued_spin_lock_slowpath+9c <ffffffd5e2e0ac98>
Core vcpu1 LR: do_raw_spin_lock+108 <ffffffd5e2e0b1f0>
[<ffffffd5e2e0ac98>] queued_spin_lock_slowpath+0x9c
[<ffffffd5e2e0b1f0>] do_raw_spin_lock+0x108
[<ffffffd5e2cb30b8>] die+0x7c
[<ffffffd5e2cd6434>] __do_kernel_fault+0x318
[<ffffffd5e2cd5fe4>] do_bad_area+0x44
[<ffffffd5e4612a84>] do_translation_fault+0xc0
[<ffffffd5e2cd5928>] do_mem_abort+0x64
[<ffffffd5e4368a24>] el1_abort+0x40
[<ffffffd5e43689a8>] el1h_64_sync_handler+0x5c
[<ffffffd5e2c11310>] el1h_64_sync+0x7c
[<ffffffd5e30febac>] __kmalloc+0x208
[<ffffffd5e3615a20>] sg_alloc_table+0xd0
[<ffffffd5e244a57c>] qcom_iommu_dma_get_sgtable[qcom_iommu_util]+0xbc
[<ffffffd5e244cbac>] fast_smmu_get_sgtable[qcom_iommu_util]+0x10
[<ffffffd5e2e6e400>] dma_get_sgtable_attrs+0x5c
[<ffffffd5e7baad80>] cnss_va_to_pa[cnss2]+0x48
[<ffffffd5e7bbfc28>] cnss_pci_add_dump_seg[cnss2]+0xdc
[<ffffffd5e7bbf46c>] cnss_pci_collect_dump_info[cnss2]+0xa80
[<ffffffd5e7bc057c>] cnss_qca6290_crash_shutdown[cnss2]+0x9c
[<ffffffd5e7bc037c>] cnss_pci_dev_crash_shutdown[cnss2][jt]+0x114
[<ffffffd5e7baa248>] cnss_panic_handler[cnss2]+0x4c
[<ffffffd5e2cb33ac>] die+0x370
[<ffffffd5e2cd6434>] __do_kernel_fault+0x318
[<ffffffd5e2cd5fe4>] do_bad_area+0x44
[<ffffffd5e4612a84>] do_translation_fault+0xc0
[<ffffffd5e2cd5928>] do_mem_abort+0x64
[<ffffffd5e4368a24>] el1_abort+0x40
[<ffffffd5e43689a8>] el1h_64_sync_handler+0x5c
[<ffffffd5e2c11310>] el1h_64_sync+0x7c
[<ffffffd5e30fad00>] kmem_cache_alloc_trace+0x19c
[<ffffffd5e6bc1588>] check_threads_run[honor_fas]+0x178
[<ffffffd5e6bc0d04>] check_do_rescue[honor_fas]+0x4c
[<ffffffd5e6bc0bec>] fas_do_rescue[honor_fas]+0xac
[<ffffffd5e6bcc224>] fas_do_activeup[honor_fas]+0x10
[<ffffffd5e2d90ae0>] process_one_work+0x2f0
[<ffffffd5e2d902f0>] worker_thread+0x3ac
[<ffffffd5e2d9c378>] kthread+0x178
[<ffffffd5e2c15110>] ret_from_fork+0x10
可以看到连续两次死机了,这会导致死锁,最后调用栈没打出来。
后来分析是踩内存的问题。
例②