Guillermo Austin Kim

Sources

Posts

998 posts

[Linux][Kernel] data abort@irq_affinity_notify - 리눅스 커널

Guillermo Austin Kim|2018년 1월 12일

아래 커널 로그와 함께 시스템이 커널 패닉으로 돌아가셨어요.irq_affinity_notify+0x4c 란 함수에서 data abort가 난 것을 확인할 수 있어요.[287229.435076] mmc0: mmc_start_bkops: raw_bkops_status=0x2, from_exception=1[287230.328287] mmc0: mmc_start_bkops: Starting bkops[287231.319886] <26>Unable to handle kernel NULL pointer dereference at virtual address 000000fc[287231.319920] <26>pgd = c0004000[287231.319936]

[Linux][Kernel] data abort @tty_wakeup - 리눅스 커널

Guillermo Austin Kim|2018년 1월 9일

USB와 TTY Driver 관련한 커널 패닉 디버깅 정보를 좀 공유하고자 해요. 아래 Signature로 커널 패닉이 발생했는데요. __irq_usr -> gic_handle_irq 코드 흐름으로 보아 유저 공간에서 실행 중인 프로세스로 IRQ가 Trigger되었다는 정보를 확인할 수 있어요.바꾸어 말하면 아래 콜스택은 IRQ Context라고 할 수 있죠. 문제가 발생한 보드는 Mediatek MT6755랍니다.[ ] do_page_fault+0x338/0x3f8 [ ] do_DataAbort+0x38/0x98 [ ] __dabt_svc+0x38/0x60 [ ] tty_wakeup+0xc/0

watchdog reset - race in ipv6_ifa_notify() - 리눅스 커널

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

crash-utility - wakelock 디버깅

Guillermo Austin Kim|2018년 1월 6일

android 시스템에서 wakelock 소스를 등록할 때는 wakelocks_tree란 rbtree 접근을 해요.그럼 이 정보를 바탕으로 어떤 모듈이 wakelock을 잡고 있는지 점검해볼까요? 우선 wakelocks_tree.rb_node 멤버가 갖고 있는 rbnode를 확인해요.crash64> p wakelocks_treewakelocks_tree = $2 = { rb_node = 0xffffffc0e397b108} wakelocks_tree에 등록한 인스턴스를 아래 wakelock_node 변수로 리다이렉트합니다.tree -t rbtree -o wakelock.node -N 0xffffffc0e397b108 > wakelock_node wakelock_node 값을 확인해볼까요? 아

LKML - [PATCH v2] clk: fix reentrancy of clk_enable() on UP systems

Guillermo Austin Kim|2018년 1월 5일

최근 시스템이 복잡해져서 대부분의 시스템은 SMP를 적용한다고 생각하지만 안정성을 가장 중요하게 보는 자동차 시스템은 하나의 CPU만 적용해요. 이런 UP 시스템에서, spin_trylock_irqsave() API를 쓰게 되면 무조건 return true를 수행하게 됩니다. 무엇보다 중요한 점은 얼마만큼 시간 차이가 있는지 출력하죠. diff --git a/drivers/clk/clk.c b/drivers/clk/clk.c index 83c8df7..5add75b 100644 --- a/drivers/clk/clk.c +++ b/drivers/clk/clk.c @@ -143,10 +143,18 @@ static unsigned long clk_enable_lock(void) { unsi