Hello,
I am currently developing a tty-Driver which is used for synchronous PPP.
System:
Board Special Hardware with a Motorola XPC8260 Microcontroller
OS Elinos V2 with Kernel Version 2.4.3
PPP pppd and ppp Modules Version 2.4.1
The following Problem occurs:
The ppp_synctty ldisc only calls my ttywrite function in interrupt context.
But to avoid a race condition I must include a Semaphore in my ttywrite
function, so I get a Kernel Oops when this Semaphore causes a call to
schedule().
Is there a way to stop this ppp_synctty ldisc from sending in Interrupt
Context?
or
Why does this ldisc only write in interrupt context?
Please CC your replay to [email protected]
Thanks!
Klaus Herb
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Klaus Herb
ikon GmbH
Benzstrasse 17
89079 Ulm
Germany
phone +49/731/94661-0
fax +49/731/94661-61
mailto:[email protected]
http://www.ikon-gmbh.de
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
> I am currently developing a tty-Driver which is used for synchronous PPP.
> ...
> The ppp_synctty ldisc only calls my ttywrite function in interrupt
context.
> But to avoid a race condition I must include a Semaphore in my ttywrite
> function, so I get a Kernel Oops when this Semaphore causes a call to
> schedule().
>
> Is there a way to stop this ppp_synctty ldisc from sending in Interrupt
> Context?
> or
> Why does this ldisc only write in interrupt context?
>
> Please CC your replay to [email protected]
It should not call the tty write function in interrupt context.
The ldisc will call the tty write in two situtations:
1. when a new packet to send is available
2. when the tty driver calls the ldisc write_wakeup
to send queued frames
My guess is that your driver is calling write_wakeup
in an interrupt context (in response to a tx complete IRQ).
You should call write_wakeup() from a bottom half
handler scheduled by the interrupt service routine instead
of directly from the ISR.
Paul Fulghum, [email protected]
Microgate Corporation, http://www.microgate.com