watchdog reset - race in ipv6_ifa_notify() - 리눅스 커널
By Guillermo Austin Kim | 2018년 1월 8일 |
예전 MTK SoC에서 일어났던 Watchdog Reset 이슈인데요. 디버깅 정보를 조금 공유하고자 해요. CPU1에서 수행 중인 "migration/1" process에서 watchdog reset이 발생하여 시스템이 리셋된 흔적을 확인할 수 있어요.-000|do_undefinstr()-001|__und_svc_fault(asm) -->|exception-002|aee_wdt_atf_info()-003|aee_wdt_atf_entry()-004|debug_smp_processor_id()-005|cpu_stopper_thread()-006|smpboot_thread_fn()-007|kthread()-008|ret_from_fork(asm)-009|ret_fast_syscall(asm) MTK S
ARM64 - Exception 시 Stack Push
By Guillermo Austin Kim | 2017년 12월 25일 |
유저 공간에서 시스템 콜을 호출할 때 유저 공간에서 돌던 레지스터를 커널 공간 스택 Bottom Address 근처에 Push하거든요. 이번에는 Exception(Data abort)이 발생했을 때 스택에 어떤 값들을 Push하는 지 점검해 볼께요. 아래는 ch_pop_remote_rx_intent() 함수에서 exception이 발생한 콜스택인데요. Trace32로 잡았어요. 이 때 Stack 정보 좀 살펴볼께요.-000|do_mem_abort()-001|el1_da(asm) -->|exception-002|ch_pop_remote_rx_intent()-003|glink_tx_common()-004|glink_txv()-005|ipc_router_glink_xprt_write()-006|msm_
[Crash-Utility] Radix Tree 디버깅: 'tree -t radix -N (struct radix_tree_node *) 구조체 주소'
By Guillermo Austin Kim | 2019년 9월 30일 |
이번 시간에는 크래시 유틸리티로 라덱스 트리를 디버깅하는 방법을 소개합니다. 라딕스 트리(Radix Tree)를 보기 위한 명령어 크래시 유틸리티로 라덱스 트리 노드를 보기 위한 명령어 포멧은 다음과 같습니다. tree -t radix -N (struct radix_tree_node *) 구조체 주소 예제 명령어 및 결과 ( struct radix_tree_node 구조체 주소가 0xFFFFFFFF3A806E79 인 경우) crash> tree -t radix -N 0xFFFFFFFF3A806E79ffffffff3f53c180ffffffff3f53c4c0ffffffff3f555180ffffffff3f5554c0ffffffff3f56e180ffffffff3f56e4c0ffffffff3f5
IRQ Stack(ARM64) - Debugging(디버깅)
By Guillermo Austin Kim | 2017년 12월 28일 |
아래 블로그에서 IRQ Stack(ARM64)에 대해 소개를 했는데요. 이번에는 직접 코어 덤프에서 IRQ Stack 덤프를 살펴볼께요. IRQ Stack Feature를 지원하는 프로세스의 콜스택을 Trace32로 잡아서 확인해 보았어요. 참고로, 아래는 CPU0에서 idle process가 돌아가 갑자기 IRQ가 Trigger되었을 시의 동작이에요. -000|gic_handle_irq(?) -001|el1_irq(asm) -->|exception -002|lpm_cpuidle_enter(dev = 0x0, ?, idx = 0) -003|cpuidle_enter_state(dev = 0xFFFFFFE57E2A33D8, drv = 0xFFFFFFE4F2E14C00, index = 0) -004|c