LINUX
Posts
487 posts[Linux][Kernel] softirq overview (1)
bottom half의 핵심 softirq에 대해서 잠깐 짚어볼께요.우선 먼저 "softirq는 어느 함수에서 실행되나?" 알아볼께요. 사실 코드 리뷰를 열심히 해도 좋은데요. 전 대가리가 나뻐서 소스 코드와 로그를 함께 봐야 머리에 잘 들어오더라구요. 자, softirq는 어느 함수에서 실행되는지 확인하기 위해 아래 코드에 ftrace log를 추가해 보았어요.흠, 어떤 결과를 확인할 수 있을까요?diff --git a/kernel/softirq.c b/kernel/softirq.cindex 0c998ef..5593bf6 100644--- a/kernel/softirq.c+++ b/kernel/softirq.c@@ -389,6 +389,7 @@ void irq_exit(void) WARN_
[Linux][Kernel][ARM] char buf[32]; vs char buf[32]={0};
얼마 전에 아래 패치를 봤어요. 이게 뭐지? 잘 이해가 안 가더라구요.배열을 초기화하는 것 같기도 한데.diff --git a/drivers/usb/dwc3/debugfs.c b/drivers/usb/dwc3/debugfs.c index f040026..11f56a8 100644 --- a/drivers/usb/dwc3/debugfs.c +++ b/drivers/usb/dwc3/debugfs.c @@ -402,7 +402,7 @@ static ssize_t dwc3_mode_write(struct file *file, struct dwc3 *dwc = s->private; unsigned long flags; u32
[Linux][Kernel] 전처리 Preprocess File 추출 방법
한 4년 전 인가요? 아래 코드를 열심히 분석 했었어요. 그런데 나중에 알고 보니 CONFIG_KMEMCHECK, CONFIG_LOCKDEP 컨피그 내 코드가 컴파일 되지 않는 죽은 코드라는 걸 알게 되었어요. 그 때 참 머리를 쥐어 뜯으며 자책했죠. static inline void slab_free_hook(struct kmem_cache *s, void *x){ kmemleak_free_recursive(x, s->flags); /* * Trouble is that we may no longer disable interrupts in the fast path * So in order to make the debug calls that expect irqs to be * disabled w
[Linux][Kernel] irq - in_interrupt irq context
커널이나 드라이버 코드 리뷰를 하는 도중에 preempt_add, preempt_sub 그리고 in_interrupt 함수를 자주 마주칩니다. 이 함수들의 사용 예와 구현부에 대해서 좀 더 짚어 볼까요? 리눅스 커널에서 보는 모든 코드는 두 가지 모드에서 돌고 있어요.process context: 우리가 보는 대부분의 코드라고 할 수 있는데, 커널 쓰레드로 돌고 있는 상태죠.IRQ context: 어떤 디바이스던 인터럽트 전기 신호로 IRQ가 Trigger될 수 있어요. 그래서 해당 IRQ에 매핑되는 Interrupt Subroutine(ISR) 핸들러나 이 서브 루틴에서 돌고 있는 상태죠. 그럼 어떤 함수가 IRQ/process context인지는 어떻게 알 수 있을까요? 스스로 참 알기 어렵죠.이를



