Messages in this thread | | | Date | Thu, 20 Nov 2008 16:12:45 +0100 (CET) | From | Thomas Pfaff <> | Subject | Re: Question about TTY_DO_WRITE_WAKEUP |
| |
On Thu, 20 Nov 2008, Alan Cox wrote:
> > Is the TTY_DO_WRITE_WAKEUP bit some kind of cruft that can be removed entirely > > or should i generate a patch for serial devices only ? > > It shouldn't happen at the serial level. The line discipline sets the > flag as and when it has data for the process above. > > The expected flow in normal use is > > app writes to tty > data goes to n_tty ldisc > goes to tty > n_tty ldisc seems tty blocked > n_tty ldisc sets DO_WRITE_WAKEUP > > tty gets ucongested > calls n_tty write_wakeup > SIGIO sent > Flag set again > > The important part of the logic is in n_tty.c and tty_io.c
Following the source the TTY_DO_WRITE_WAKEUP flag is set in n_tty_write_wakeup.
But n_tty_write_wakeup is only called from tty_wakeup when this bit is already set, therefore it makes no sense to set this bit in n_tty_write_wakeup again.
The flow looks to me as
If the tty driver sets TTY_DO_WRITE_WAKEUP a SIGIO is generated on every tty_wakeup.
If it is not set then n_tty_write_wakeup is never called and a SIGIO is not generated.
Thomas
| |