프로브가 완료되기 전에 드라이버의 인터럽트 핸들러를 호출할 수 있습니까?

프로브가 완료되기 전에 드라이버의 인터럽트 핸들러를 호출할 수 있습니까?

저는 일반적으로 프로브 함수에서 request_irq()를 호출하여 Linux 커널의 드라이버 커널 모듈을 검사하고 있습니다. drivers/net/ethernet/natsemi/ns83820.ko가 그러한 예 중 하나입니다.

request_irq()는 주석에 언급된 request_threaded_irq()를 호출합니다.

This call allocates interrupt resources and enables the
interrupt line and IRQ handling. From the point this
call is made your handler function may be invoked.

관련된:https://elixir.bootlin.com/linux/latest/source/kernel/irq/manage.c#L1984

이는 프로브가 완료되기 전에도 핸들러를 호출할 수 있음을 의미합니다.

그러나 나는 많은 드라이버에서 프로브와 인터럽트 핸들러에서 동시에 읽고 수정할 수 있는 공유 변수나 공격 필드에 대해 관심이 없다는 것을 알았습니다.

프로브와 인터럽트 핸들러가 병렬로 실행되는 경우가 얼마나 자주 발생하는지 알고 싶습니다.

답변1

프로브가 완료되지 않은 경우 인터럽트 핸들러를 호출할 수 있습니다. 그러나 이를 달성하려면 장치를 초기화하고 인터럽트를 생성해야 합니다. 일반적으로 프로브 기능은 먼저 장치를 초기화하고 irq를 요청하기 전에 인터럽트를 생성하지 않는지 확인합니다. 이렇게 하면 드라이버가 인터럽트를 처리할 준비가 될 때까지 핸들러가 호출되지 않습니다.

일반적인 예외는 RTC 드라이버인데, 그 중 일부는 최근에 수정되었습니다. 이는 RTC가 여전히 실행 중이지만 Linux는 실행되지 않고 드라이버가 부팅할 때마다 장치를 다시 초기화해서는 안 되기 때문에 발생합니다. 예는 다음과 같습니다.

https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=10d0c768cc6d581523d673b9d1b54213f8a5eb24

관련 정보