Как узнать, когда вызывается schedule () из-за сигнала? - PullRequest
1 голос
/ 02 декабря 2009

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

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

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

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

1 Ответ

2 голосов
/ 02 декабря 2009

Нечто подобное после вызова schedule:

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