디버깅을 통해 배우는 리눅스 커널의 구조
IRQ 스레드 (threaded IRQ)
2jun0
2022. 6. 17. 23:50
IRQ 스레드
인터럽트 실행 중에 I/O 같이 시간이 오래걸리는 서비스를 위한 것인데,
빠르게 처리할 수 있는 서비스만 irq에 남겨두고
나머지 오래걸리는 서비스는 IRQ 스레드를 사용하기도 한다.
IRQ 스레드는 request_threaded_irq을 통해 생성된다.
int request_threaded_irq(unsigned int irq, irq_handler_t handler,
irq_handler_t thread_fn, unsigned long irqflags, const char *devname, void *dev_id)
파라미터가 request_irq와 비슷하다.
특별한게 있다면 thread_fn인데, 이건 IRQ스레드 처리 함수의 주소를 저장하는 포인터다.
스레드의 이름은 "irq/[irq번호]-[이름]"로 생성된다.
IRQ 스레드 실행
irq 스레드는 인터럽트 핸들러의 반환값에 의해 호출될지 말지가 결정된다.
인터럽트 핸들러의 반환값이
IRQ_WAKE_THREAD 이면 IRQ 스레드를 깨우고
IRQ_HANDLE 이면 IRQ 스레드를 깨우지 않는 식이다.