Domanda

In un driver per alcuni hardware PCI, ho una chiamata ioctl che attende un interrupt in arrivo sul bus PCI. Utilizzando wait_queue_head_t, ho messo il compito di dormire chiamando schedule().

Quindi, la funzione irq_handler si sveglia questa operazione quando l'interrupt è sollevata sul bus PCI. Tutto sembra funzionare correttamente.

La mia domanda è come differenziare se la chiamata schedule() sta tornando a causa della mia funzione irq_handler svegliarlo, o perché qualche segnale è stato invia?

Devo gestire da solo con le bandiere nella funzione irq_handler?

È stato utile?

Soluzione

Qualcosa sulla falsariga di questo, dopo la chiamata schedule:

if (signal_pending(current)) {
    retval = -EINTR;
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top