2011-05-04 3 views
2

내 장치 드라이버에서 wait_event_interruptible_timeout을 사용하고 있습니다. 타임 아웃이 발생했는지 어떻게 알 수 있습니까? 매크로는 인터럽트에 대해서만 오류 코드를 반환하지만 시간 초과는 인터럽트가 아니므로 "0"이 반환됩니다.wait_event_interruptible_timeout을 사용하여 장치 드라이버 시간 초과가 발생했는지 확인하십시오.


편집 : 그 대답처럼 들리도록 condition 실 거예요 설정 시간 초과가 발생하면 이야기하지만,하는 방법에 대한 확실하지.

답변

3

Linux Device Drivers, Third Edition에서 해당 기능에 대한 설명을 읽은 후 몇 주 전에 동일한 혼란스런 문제가 발생했습니다. 그러나 현재 커널 소스 트리에서 다양한 대기 함수에 대한 주석을 읽은 후에 책이 출판 된 이후로 API가 변경되었음을 알게되었습니다. 새로운 커널 (적어도 2.6.34+ 이상이고 아마도 그보다 훨씬 뒤쪽에 있음)은 오류 코드 대신에 jiffies의 나머지 수를 타임 아웃으로 리턴합니다. 따라서 0 반환 값은 시간 초과가 발생했음을 나타내며 0이 아닌 값은 이벤트 조건을 통해 성공적으로 깨우기를 나타냅니다. include/linux/wait.h의 주석은 새 API에 대한 설명을 제공합니다.

관련 문제