Messages in this thread |  | | Subject | Re: [PATCH] Re: Move of input drivers, some word needed from you | From | tytso@valinux ... | Date | Tue, 22 Aug 2000 08:27:39 -0700 |
| |
Date: Tue, 22 Aug 2000 14:16:51 +0200 (MEST) From: R.E.Wolff@BitWizard.nl (Rogier Wolff)
The tty layer needs to set termios, and write characters. tty layer should copy these into the circular buffer without leaving that to the individual driver. (*) Usually the interrupt routine will just empty the circular buffer.
Well, the high-level code can offer these services as an option, much like the VFS layer offers various utility functions to the tty devices, but not all low-level tty drivers will find this useful.
Now, currently, most of the recieve handling is postponed to the bottom half. I question the usefulness of this optimization. It certainly adds latency. What is it that needs to be done on reception of a few chars? Copy the data to userspace, and hit the waitq of the process that's waiting for data. If you want to prevent the races, use a kernel-space circular buffer, and do the processing (copy to userspace) in the context of the wokenup process.
It does *not* have to be postponed to the bottom half. Take a look at the rocketport driver. Since it only gets characters out of a large fifo every clock tick (the hardware doesn't support interrupts, since for a large number of active ports, polling is more efficient), it simply calls the line discpline directly.
As I explained earlier, the down side of this is that at 115200 bps, you will be calling the line discpline 11,520 times a second. On a 40 MHz 386, this became a real bottleneck. On modern CPU's it's less of an issue, but most of the time you don't care about latency anyway. That's why I added ASYNC_LOW_LATENCY; it's now configurable whether you care about latency or not.
Oh, with DCD and stuff, we also need a callback for "modem signals changed". What to do with that (i.e. unblock someone in open, or hangup the users shell) should be the tty layer's choice. Not something that is done in the hardware driver.
That's something I want to do in 2.5 --- move all of the hangup processing into the high-level tty drivers, instead of have it split between the high and low-level tty drivers.
- Ted
- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org Please read the FAQ at http://www.tux.org/lkml/
|  |