Re: Kernel - wait_event_interruptible_timeout()

Sascha Hilbig <[email protected]>
Newsgroups gmane.linux.suse.programming
Message-ID <[email protected]>
Hallo !

Am Montag, 5. Dezember 2005 09:40 schrieb Martin Langer:

> Hallo Sascha,
>
> Mit wait_event_interruptible_timeout() habe ich auch noch nicht
> gearbeitet, nur mit wait_event_interruptible(). Diese Funktion geht 
> aber schlafen, BIS die Bedingung erfuellt ist und nicht solange die
> Bedingung erfuellt ist.
Ich habe mir jetzt noch einmal alles in Ruhe im "Kernelbuch" durchgelesen und 
habe es jetzt auch so, wie Du es beschrieben hast, verstanden.
Ich dachte dass wait_event_interruptible_timeout() sich ähnlich wie 
interruptible_sleep_on_timeout() verhält - also nur von AUSSEN (bzw. durch 
das Timeout) aufgeweckt wird und die Bedingung nur EINMAL (zur Sicherheit) 
überprüft wird.
Da hab ich mich wohl etwas verwirren lassen ;-)
Nun gut, das was wait_event_interruptible_timeout() macht, will ich (vorerst) 
nicht - ich verwende erstmal wieder interruptible_sleep_on_timeout().
Die Möglichkeit der Race-Condition ist bei mir praktisch nicht gegeben. Der 
Code, der zwischen der Bedingung und interruptible_sleep_on_timeout() steht, 
kann selbst auf einem alten Rechner im Normalfall bis zu 1000mal zwischen 2 
Interrupts ausgeführt werden. Und wenn's doch Probleme gibt, gibt's ja immer 
noch das Timeout. Die Daten unterliegen keinen Echzeitanforderungen. In 
diesem Extremfall kann der Benutzer im Userspace auch 10 hundertstel Sekunden 
länger warten ;-)

> Wie ist wait deklariert? Ich verwende DECLARE_WAIT_QUEUE_HEAD().
Nein, ich habe sie mit 
wait_queue_head_t wait
deklariert und initialisiert mit
init_waitqueue_head( &wait ) .
(Ich glaube das ist egal.)
> ...
> PS. Ich wuerde ueberlegen, den Interrupthandler in einen Ringspeicher
> schreiben zu lassen, statt beim Lesen eine Schleife zu verwenden.--
> ...
Das mache ich auch. Der IRQ-Handler liest die Zeichen einzeln vom Gerät, 
schreibt sie in den Ringpuffer und weckt dann die Lese-Funktion, die diese 
Zeichen auswertet und in den Userspace transferiert.
(Naja, letzlich befindet sich immer nur ein Zeichen im Ringspeicher)



Ich Danke Dir !

Habe mich da am Wochenende völlig festgebissen.
Oftmals ist es wirklich besser, erstmal alles beiseite zu legen, eine Nacht 
drüber zu schlafen und es von jemand anderem nochmal erklärt zu bekommen.

Gruß
Sascha

-- 
Um die Liste abzubestellen, schicken Sie eine Mail an:
    [email protected]
Um eine Liste aller verfügbaren Kommandos zu bekommen, schicken
Sie eine Mail an: [email protected]
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.