1

В драйвере устройства для некоторых аппаратных средств PCI у меня есть вызов ioctl, который ждет входящего прерывания на шине PCI. Используя wait_queue_head_t, я поставил задачу спать, вызвав schedule().Как узнать, когда вызов schedule() возвращается из-за сигнала?

Затем функция irq_handler выполняет эту задачу, когда прерывание поднимается на шине PCI. Кажется, что все работает правильно.

Мой вопрос заключается в том, как отличить звонок от schedule() из-за моей функции irq_handler разбудить ее, или потому что какой-то сигнал был отправлен?

Должен ли я сам обрабатывать флаги в функции irq_handler?

ответ

2

Что-то вдоль линий этого, после schedule вызова:

if (signal_pending(current)) { 
    retval = -EINTR;