Re: calling context when writing to tty_driver

Greg KH
2002-10-01T18:30:58Z

On Tue, Oct 01, 2002 at 12:37:42PM +0200, Martin Diehl wrote:
>
> Hi,
>
> just hitting another "sleeping on semaphore from illegal context" issue
> with 2.5.39. Happened on down() in either usbserial->write_room() or
> usbserial->write(), when invoked from bh context.

Can you send me the whole backtrace? I'm curious as to who is calling
those functions from bh context.

> Some grepping reveals no documentation of calling context requirements
> for those driver calls and existing serial code seems to be happy with bh
> context. Therefore I'm wondering whether it is permitted to call from
> don't-sleep context?

I don't know.

> Since write_room() is usually called immediately before write()'ing stuff
> to the driver it would be a good idea to keep them both callable from bh,
> IMHO. For example tty_ldisc->write_wakeup() might probably want to issue
> write_room() followed by write().
>
> Currently, usbserial calls write_wakeup() from bh (on OUT urb completion)
> but needs process context for write_room() and write(). My impression is
> the whole point of write_room() is to find out how many data can be
> accepted by the write() - if write() would be allowed to sleep it could
> just block to deal with any amount of data.

Making write() block for any amount of data would increase the
complexity of the drivers. What should probably be done is convert the
usb-serial drivers to use the new serial core, but I don't have the time
to do this work right now. Any takers?

thanks,

greg k-h