#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.