Como saber quando um cronograma (call) está voltando por causa de um sinal?
-
11-09-2019 - |
Pergunta
Em um driver de dispositivo para alguns hardware PCI, tenho uma chamada ioctl
que espera por uma interrupção de entrada no barramento PCI. Usando wait_queue_head_t
, eu coloquei a tarefa para dormir chamando schedule()
.
Em seguida, a função irq_handler
acorda esta tarefa quando a interrupção é levantada no barramento PCI. Tudo parece funcionar corretamente.
A minha pergunta é como diferenciar se a chamada schedule()
está voltando por causa da minha função irq_handler
acordá-lo, ou porque algum sinal foi enviar?
Eu tenho que lidar com isso sozinha com bandeiras na função irq_handler
?
Solução
Algo ao longo das linhas deste, após a chamada schedule
:
if (signal_pending(current)) {
retval = -EINTR;
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow