Скажите, произошло ли время ожидания драйвера устройства с wait_event_interruptible_timeout - PullRequest
3 голосов
/ 04 мая 2011

В моем драйвере устройства я использую wait_event_interruptible_timeout.Как я могу узнать, произошел ли тайм-аут?Макрос возвращает код ошибки только для прерываний, но тайм-аут не является прерыванием, поэтому возвращается «0».


Редактировать: не уверен, как узнать, произошел ли тайм-аут, но condition не будет установлен, поэтомуэто звучит как ответ.

1 Ответ

4 голосов
/ 04 мая 2011

Я столкнулся с той же самой запутанной проблемой пару недель назад после прочтения описания этой функции в Драйверы устройств Linux, третье издание .Однако, прочитав комментарии к различным функциям ожидания в текущем исходном дереве ядра, я обнаружил, что API изменился с момента публикации книги.Более новые ядра (по крайней мере, 2.6.34+ и, вероятно, чуть дальше) возвращают оставшееся количество jiffies к таймауту вместо кода ошибки.Таким образом, нулевое возвращаемое значение указывает на истекшее время ожидания, а любое ненулевое значение должно указывать на успешное включение через условие события.Комментарии в include/linux/wait.h дают хорошее описание нового API.

...