linux - 使用 wait_event_interruptible_timeout 判断设备驱动程序是否超时

标签 linux linux-kernel linux-device-driver

在我的设备驱动程序中,我正在使用 wait_event_interruptible_timeout。如何判断是否发生了超时?宏仅在中断时返回错误代码,但超时不是中断,因此返回“0”。


编辑:不确定如何判断超时是否发生,但是 condition 不会被设置,所以这听起来像是答案。

最佳答案

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

关于linux - 使用 wait_event_interruptible_timeout 判断设备驱动程序是否超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5884071/

相关文章:

linux - 如何让 systemd 变量在重启后仍然存在?

c - 如何读取系统 ('ls' 的输出)?

linux - i3/usr/bin/dunst 耗尽内存

linux - 操作系统如何知道要调用哪个设备驱动程序?

c - 带结构体参数的Linux内核系统调用实现

c - 为什么 mmap 会失败?

c - 是否可以在没有 root 访问权限的情况下在 linux 上使用 packet_mmap?

C - Linux 字符设备 openat() 返回 EINVAL

linux - 为具有开源 Linux 支持的 RFID 读取器开发软件 : Which direction to go, 硬件/系统方面?

linux-kernel - lx-符号 : Python Exception <class 'gdb.MemoryError' > Cannot access memory at address 0xff