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?

Foi útil?

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
scroll top