告诉设备驱动程序超时是否发生了wait_event_interruptible_timeout

问题描述:

在我的设备驱动程序中,我使用的是wait_event_interruptible_timeout。如何判断超时是否发生?宏只在中断返回错误码,但超时不是中断,所以返回“0”。告诉设备驱动程序超时是否发生了wait_event_interruptible_timeout


编辑:不知道如何告诉如果发生超时,但condition习惯进行设置,因此这听起来像答案。

几个星期前,我在阅读Linux Device Drivers, Third Edition中该函数的说明后遇到了同样令人困惑的问题。然而,在阅读当前内核源代码树中的各种等待函数的注释后,我发现自该书发布以来API已经发生了变化。较新的内核(至少2.6.34+,可能比这更远),将剩余的jiffies数返回到超时值而不是错误代码。因此,返回值为零表示发生超时,并且任何非零值应表示通过事件条件成功唤醒。 include/linux/wait.h中的评论提供了对新API的很好的描述。