Сообщает, произошел ли тайм-аут драйвера устройства с помощью wait_event_interruptible_timeout

#linux #linux-kernel #linux-device-driver

#linux #linux-ядро #linux-device-driver

Вопрос:

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


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

Ответ №1:

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