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 스레드를 깨우지 않는 식이다.