IRQ스레드
Posts
7 posts![[리눅스커널] 인터럽트 후반부 처리: IRQ 스레드의 전체 실행 흐름 정리](https://img.zoomtrend.com/2020/04/25/a0386257_5ea4bb44cd025.png)
[리눅스커널] 인터럽트 후반부 처리: IRQ 스레드의 전체 실행 흐름 정리
지금까지 IRQ 스레드 핸들인 irq_thread() 함수에서 irq_thread_fn() 함수를 호출해 IRQ 스레드 핸들러 함수를 호출하는 과정을 살펴봤습니다. 이번에는 배운 내용을 정리하는 차원으로 IRQ 스레드 전체 실행 흐름을 보면서 정리하는 시간을 갖겠습니다. [그림 6.7] "irq/86-mmc1" IRQ 스레드 실행 흐름도 눈끔 화살표는 함수 실행 흐름 방향입니다. 위 그림에서 실행 순서별 동작을 살펴보겠습니다. [1]: arch_cpu_idle() 함수 실행 중 86번 인터럽트가 발생해서 인터럽트 벡터인 __irq_svc가 실행합니다. [2]: __handle_irq_event_percpu() 함수까지 실행한 후 86번 인터럽트 핸들러인 bcm283
[리눅스커널] IRQ 스레드 생성 예제 코드 분석 - 라즈베리파이
6.3.2 라즈비안 92번 인터럽트 IRQ 스레드 생성 예제 코드 분석해보기 IRQ 스레드를 생성하는 함수 흐름을 알아봤으니 IRQ 스레드를 생성하는 예제 코드를 살펴보겠습니다. 분석할 소스 코드는 다음과 같습니다.[https://github.com/raspberrypi/linux/blob/rpi-4.19.y/drivers/mmc/host/bcm2835-mmc.c]1 static int bcm2835_mmc_add_host(struct bcm2835_host *host)2 {3 struct mmc_host *mmc = host->mmc;4 struct device *dev = mmc->parent;...5 bcm2835_mmc_init(host, 0);6 ret = devm_request_th
[리눅스커널][인터럽트후반부] IRQ 스레드 핸들러 실행 시각 측정하기
IRQ 스레드 핸들러 실행 시각 측정하기 이전 절에서는 ftrace 로 콜스택과 함께 인터럽트가 언제 발생하고 언제 IRQ Thread를 깨우는지 알아봤습니다. 이번에는 실제 인터럽트 핸들러와 IRQ Thread 핸들러 함수 실행 시간을 측정하는 방법을 소개합니다. 각 함수의 실행 시간을 측정하고 실행 시간이 오래 걸리면 인터럽트 핸들러 함수 코드를 점검할 필요가 있습니다. 나중에 여러분이 인터럽트 핸들러를 작성한 후 이 방법을 써서 실행 시간을 측정해 보시길 바랍니다. ftrace에서 지원하는 function_graph 트레이서를 쓸려면 다음 config가 설정돼 있어야 합니다.CONFIG_DYNAMIC_FTRACE=yCONFIG_DYNAMIC_FTRACE_WITH_REGS=yCONFIG_FUNCTI
[리눅스커널][인터럽트후반부] IRQ 스레드 핸들 irq_thread() 함수 분석
IRQ 스레드 핸들 irq_thread() 함수 분석 이번에는 IRQ 스레드 핸들 함수가 어떤 과정으로 실행하는지 점검해 보겠습니다. 커널 쓰레드가 생성되면 무한 루프를 돌면서 쓰레드 상태에서 따라 정해진 동작을 수행하는 스레드 핸들 함수가 실행합니다. IRQ 스레드는 irq_thread() 함수가 이 역할을 수행합니다. 먼저 IRQ 스레드를 깨우면 실행하는 irq_thread() 함수를 소개합니다.1 static int irq_thread(void *data)2 {3 struct callback_head on_exit_work;4 struct irqaction *action = data; 5 struct irq_desc *desc = irq_to_desc(action->irq);6 irq




