Frage

In einem Gerätetreiber für einige PCI-Hardware, habe ich einen ioctl Anruf, der auf dem PCI-Bus für einen eingehenden Interrupt wartet. Mit wait_queue_head_t, habe ich die Aufgabe, durch den Aufruf schedule() zu schlafen.

Dann wacht die irq_handler Funktion diese Aufgabe, wenn die Unterbrechung auf dem PCI-Bus angehoben wird. Alles scheint richtig zu arbeiten.

Meine Frage ist, wie zu unterscheiden, ob die schedule() nennt es wegen meiner irq_handler Funktion Wake zurückkehrt, oder weil einige Signale senden gewesen?

Habe ich es mit Fahnen in der irq_handler Funktion von mir handhaben müssen?

War es hilfreich?

Lösung

Etwas nach dem Vorbild dieser, nach dem schedule Aufruf:

if (signal_pending(current)) {
    retval = -EINTR;
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top