1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
|
Thu Nov 14 00:06:09 1996 Theodore Ts'o <tytso@rsts-11.mit.edu>
* serial.c (autoconfig): Fix autoconfiguration problems;
info->flags wasn't getting initialized from the state
structure. Put in more paranoid test for the 16750.
Fri Nov 8 20:19:50 1996 Theodore Ts'o <tytso@rsts-11.mit.edu>
* n_tty.c (n_tty_flush_buffer): Only call driver->unthrottle() if
the tty was previous throttled.
(n_tty_set_termios, write_chan): Add changes suggested by
Simon P. Allen to allow hardware cooking.
* tty_ioctl.c (set_termios): If we get a signal while waiting for
the tty to drain, return -EINTR.
* serial.c (change_speed): Add support for CREAD, as required by
POSIX.
Sat Nov 2 20:43:10 1996 Theodore Ts'o <tytso@rsts-11.mit.edu>
* serial.c: Wholesale changes. Added support for the Startech
16650 and 16650V2 chips. (WARNING: the new startech
16650A may or may not work!) Added support for the
TI16750 (not yet tested). Split async_struct into a
transient part (async_struct) and a permanent part
(serial_state) which contains the configuration
information for the ports. Added new driver routines
wait_until_sent() and send_xchar() to help with POSIX
compliance. Added support for radio clocks which waggle
the carrier detect line (CONFIG_HARD_PPS).
* tty_ioctl.c (tty_wait_until_sent): Added call to new driver
function tty->driver.wait_until_sent(), which returns when
the tty's device xmit buffers are drained. Needed for
full POSIX compliance.
(send_prio_char): New function, called by the ioctl's
TCIOFF and TCION; uses the new driver call send_xchar(),
which will send the XON or XOFF character at high priority
(and even if tty output is stopped).
Wed Jun 5 18:52:04 1996 Theodore Ts'o <tytso@rsts-11.mit.edu>
* pty.c (pty_close): When closing a pty, make sure packet mode is
cleared.
Sun May 26 09:33:52 1996 Theodore Ts'o <tytso@rsts-11.mit.edu>
* vesa_blank.c (set_vesa_blanking): Add missing verify_area() call.
* selection.c (set_selection): Add missing verify_area() call.
* tty_io.c (tty_ioctl): Add missing verify_area() calls.
* serial.c (rs_ioctl): Add missing verify_area() calls.
(rs_init): Allow initialization of serial driver
configuration from a module.
* random.c (extract_entropy): Add missing verify_area call.
Don't limit number of characters returned to
32,768. Extract entropy is now no longer a inlined
function.
(random_read): Check return value in case extract_entropy
returns an error.
(secure_tcp_sequence_number): New function which returns a
secure TCP sequence number. This is needed to prevent some
nasty TCP hijacking attacks.
(init_std_data): Initialize using gettimeofday() instead of
struct timeval xtime.
(fast_add_entropy_word, add_entropy_word): Rename the
inline function add_entropy_word() to
fast_add_entropy_word(). Make add_entropy_word() be the
non-inlined function which is used in non-timing critical
places, in order to save space.
(initialize_benchmark, begin_benchmark, end_benchmark): New
functions defined when RANDOM_BENCHMARK is defined. They
allow us to benchmark the speed of the
add_timer_randomness() call.
(int_ln, rotate_left): Add two new inline functions with
i386 optimized asm instructions. This speeds up the
critical add_entropy_word() and add_timer_randomness()
functions, which are called from interrupt handlers.
Tue May 7 22:51:11 1996 <tytso@rsts-11.mit.edu>
* random.c (add_timer_randomness): Limit the amount randomness
that we estimate to 12 bits. (An arbitrary amount).
(extract_entropy): To make it harder to analyze the hash
function, fold the hash function in half using XOR, and
use the folded result as the value to emit to the user.
Also, add timer randomness each pass through the
exact_entropy call, to increase the amount of unknown
values during the extraction process.
(random_ioctl): Use IOR/IOW definitions to define the
ioctl values used by the /dev/random driver. Allow the
old ioctl values to be used for backwards compatibility
(for a limited amount of time).
Wed Apr 24 14:02:04 1996 Theodore Ts'o <tytso@rsts-11.mit.edu>
* random.c (add_timer_randomness): Use 2nd derivative as well to
better estimate entropy.
(rand_initialize): Explicitly initialize all the pointers
to NULL. (Clearing pointers using memset isn't portable.)
Initialize the random pool with OS-dependent data.
(random_write): Add sanity checking to the arguments to
random_write(), so that bad arguments won't cause a kernel
SEGV.
(random_read): Update the access time of the device inode
when you return data to the user.
(random_ioctl): Wake up the random_wait channel when there
are only WAIT_INPUT_BITS available. Add more paranoia
checks to make sure entropy_count doesn't go beyond the
bounds of (0, POOLSIZE). Add a few missing verify_area
checks. Add support for the RNDCLEARPOOL ioctl, which
zaps the random pool.
(add_timer_randomness): Wake up the random_wait
channel only when there are WAIT_INPUT_BITS available.
(random_select): Allow a random refresh daemon process to
select on /dev/random for writing; wake up the daemon when
there are less than WAIT_OUTPUT_BITS bits of randomness
available.
Tue Apr 23 22:56:07 1996 <tytso@rsts-11.mit.edu>
* tty_io.c (init_dev): Change return code when user attempts to
open master pty which is already open from EAGAIN to EIO,
to match with BSD expectations. EIO is more correct
anyway, since EAGAIN implies that retrying will be
successful --- which it might be.... Eventually!!
* pty.c (pty_open, pty_close): Fix wait loop so that we don't
busy loop while waiting for the master side to open.
Fix tty opening/closing logic. TTY_SLAVE_CLOSED was
renamed to TTY_OTHER_CLOSED, so that the name is more
descriptive. Also fixed code so that the tty flag
actually works correctly now....
Mon Apr 1 10:22:01 1996 <tytso@rsts-11.mit.edu>
* serial.c (rs_close): Cleaned up modularization changes.
Remove code which forced line discipline back to N_TTY
this is done in the tty upper layers, and there's no
reason to do it here. (Making this change also
removed the requirement that the serial module access
the internal kernel symbol "ldiscs".)
* tty_io.c (tty_init): Formally register a tty_driver entry for
/dev/tty (device 4, 0) and /dev/console (device 5, 0).
This guarantees that major device numbers 4 and 5 will be
reserved for the tty subsystem (as they have to be because
of /dev/tty and /dev/console). Removed tty_regdev, as
this interface is no longer necessary.
Sun Mar 17 20:42:47 GMT 1996 <ah@doc.ic.ac.uk>
* serial.c : modularisation (changes in linux/fs/device.c allow
kerneld to automatically load the serial module).
* Makefile, Config.in : serial modularisation adds.
* tty_io.c : tty_init_ctty used by to register "cua" driver just
for the /dev/tty device (5,0). Added tty_regdev.
* serial.c (shutdown, rs_ioctl) : when port shuts down wakeup processes
waiting on delta_msr_wait. The TIOCMIWAIT ioctl returns EIO
if no change was done since the time of call.
Sat Mar 16 14:33:13 1996 <aeb@cwi.nl>
* tty_io.c (disassociate_ctty): If disassociate_ctty is called by
exit, do not perform an implicit vhangup on a pty.
Fri Feb 9 14:15:47 1996 <tytso@rsts-11.mit.edu>
* serial.c (block_til_ready): Fixed another race condition which
happens if a hangup happens during the open.
Wed Jan 10 10:08:00 1996 <tytso@rsts-11.mit.edu>
* serial.c (block_til_ready): Remove race condition which happened
if a hangup condition happened during the setup of the
UART, before rs_open() called block_til_ready(). This
caused the info->count counter to be erroneously
decremented.
* serial.c (startup, rs_open): Remove race condition that could
cause a memory leak of one page. (Fortunately, both race
conditions were relatively rare in practice.)
Tue Dec 5 13:21:27 1995 <tytso@rsts-11.mit.edu>
* serial.c (check_modem_status, rs_ioctl): Support the new
ioctl()'s TIOCGICOUNT, TIOCMIWAIT. These allow an
application program to wait on a modem serial register
status bit change, and to find out how many changes have
taken place for the MSR bits.
(rs_write): Eliminate a race condition which is introduced
if it is necessary to wait for the semaphore.
Sat Nov 4 17:14:45 1995 <tytso@rsts-11.mit.edu>
* tty_io.c (tty_init): Move registration of TTY_MAJOR and
TTY_AUX_MAJOR to the end, so that /proc/devices looks
prettier.
* pty.c (pty_init): Use new major numbers for PTY master and slave
devices. This allow us to have more than 64 pty's. We
register the old pty devices for backwards compatibility.
Note that a system should either be using the old pty
devices or the new pty devices --- in general, it should
try to use both, since they map into the same pty table.
The old pty devices are strictly for backwards compatibility.
Wed Oct 11 12:45:24 1995 <tytso@rsts-11.mit.edu>
* tty_io.c (disassociate_ctty): If disassociate_ctty is called by
exit, perform an implicit vhangup on the tty.
* pty.c (pty_close): When the master pty is closed, send a hangup
to the slave pty.
(pty_open): Use the flag TTY_SLAVE_CLOSED to test to see
if there are any open slave ptys, instead of using
tty->link->count. The old method got confused if there
were processes that had hung-up file descriptors on the
slave tty.
Tue May 2 00:53:25 1995 <tytso@rsx-11.mit.edu>
* tty_io.c (tty_set_ldisc): Wait until the output buffer is
drained before closing the old line discipline --- needed
in only one case: XON/XOFF processing.
* n_tty.c (n_tty_close): Don't bother waiting until the output
driver is closed; in general, the line discipline
shouldn't care if the hardware is finished
transmitting before the line discipline terminates.
* tty_io.c (release_dev): Shutdown the line discipline after
decrementing the tty count variable; but set the
TTY_CLOSING flag so that we know that this tty structure
isn't long for this world.
* tty_io.c (init_dev): Add sanity code to check to see if
TTY_CLOSING is set on a tty structure; if so, something
bad has happened (probably a line discipline close blocked
when it shouldn't have; so do a kernel printk and then
return an error).
Wed Apr 26 10:23:44 1995 Theodore Y. Ts'o <tytso@localhost>
* tty_io.c (release_dev): Try to shutdown the line discipline
*before* decrementing the tty count variable; this removes
a potential race condition which occurs when the line
discipline close blocks, and another process then tries
open the same serial port.
* serial.c (rs_hangup): When hanging up, flush the output buffer
before shutting down the UART. Otherwise the line
discipline close blocks waiting for the characters to get
flushed, which never happens until the serial port gets reused.
Wed Apr 12 08:06:16 1995 Theodore Y. Ts'o <tytso@localhost>
* serial.c (do_serial_hangup, do_softint, check_modem_status,
rs_init): Hangups are now scheduled via a separate tqueue
structure in the async_struct structure, tqueue_hangup.
This task is pushed on to the tq_schedule queue, so that
it is processed synchronously by the scheduler.
Sat Feb 18 12:13:51 1995 Theodore Y. Ts'o (tytso@rt-11)
* tty_io.c (disassociate_ctty, tty_open, tty_ioctl): Clear
current->tty_old_pgrp field when a session leader
acquires a controlling tty, and after a session leader
has disassociated from a controlling tty.
Fri Feb 17 09:34:09 1995 Theodore Y. Ts'o (tytso@rt-11)
* serial.c (rs_interrupt_single, rs_interrupt, rs_interrupt_multi):
Change the the number of passes made from 64 to be 256,
configurable with the #define RS_ISR_PASS_LIMIT.
* serial.c (rs_init, set_serial_info, get_serial_info, rs_close):
Remove support for closing_wait2. Instead, set
tty->closing and rely on the line discipline to prevent
echo wars.
* n_tty.c (n_tty_receive_char): IEXTEN does not need to be
enabled in order for IXANY to be active.
If tty->closing is set, then only process XON and XOFF
characters.
Sun Feb 12 23:57:48 1995 Theodore Y. Ts'o (tytso@rt-11)
* serial.c (rs_timer): Change the interrupt poll time from 60
seconds to 10 seconds, configurable with the #define
RS_STROBE_TIME.
* serial.c (rs_interrupt_multi, startup, shutdown, rs_ioctl,
set_multiport_struct, get_multiport_struct): Add
provisions for a new type of interrupt service routine,
which better supports multiple serial ports on a single
IRQ.
Sun Feb 5 19:35:11 1995 Theodore Y. Ts'o (tytso@rt-11)
* tty_ioctl.c (n_tty_ioctl, set_termios, tty_wait_until_sent):
* serial.c (rs_ioctl, rs_close):
* cyclades.c (cy_ioctl, cy_close):
* n_tty.c (n_tty_close): Rename wait_until_sent to
tty_wait_until_sent, so that it's a better name to export
in ksyms.c.
Sat Feb 4 23:36:20 1995 Theodore Y. Ts'o (tytso@rt-11)
* serial.c (rs_close): Added missing check for closing_wait2 being
ASYNC_CLOSING_WAIT_NONE.
Thu Jan 26 09:02:49 1995 Theodore Y. Ts'o (tytso@rt-11)
* serial.c (rs_init, set_serial_info, get_serial_info,
rs_close): Support close_wait in the serial driver.
This is helpful for slow devices (like serial
plotters) so that their outputs don't get flushed upon
device close. This has to be configurable because
normally we don't want ports to be hung up for long
periods of time during a close when they are not
connected to a device, or the device is powered off.
The default is to wait 30 seconds; in the case of a
very slow device, the close_wait timeout should be
lengthened. If it is set to 0, the kernel will wait
forever for all of the data to be transmitted.
Thu Jan 17 01:17:20 1995 Theodore Y. Ts'o (tytso@rt-11)
* serial.c (startup, change_speed, rs_init): Add support to detect
the StarTech 16650 chip. Treat it as a 16450 for now,
because of its FIFO bugs.
Thu Jan 5 21:21:57 1995 <dhinds@allegro.stanford.edu>
* serial.c: (receive_char): Added counter to prevent infinite loop
when a PCMCIA serial device is ejected.
Thu Dec 29 17:53:48 1994 <tytso@rsx-11.mit.edu>
* tty_io.c (check_tty_count): New procedure which checks
tty->count to make sure that it matches with the number of
open file descriptors which point at the structure. If
the number doesn't match, it prints a warning message.
Wed Dec 28 15:41:51 1994 <tytso@rsx-11.mit.edu>
* tty_io.c (do_tty_hangup, disassociate_ctty): At hangup time,
save the tty's current foreground process group in the
session leader's task structure. When the session leader
terminates, send a SIGHUP, SIGCONT to that process group.
This is not required by POSIX, but it's not prohibited
either, and it appears to be the least intrusive way
to fix a problem that dialup servers have with
orphaned process groups caused by modem hangups.
Thu Dec 8 14:52:11 1994 <tytso@rsx-11.mit.edu>
* serial.c (rs_ioctl): Don't allow most ioctl's if the serial port
isn't initialized.
* serial.c (rs_close): Don't clear the IER if the serial port
isn't initialized.
* serial.c (block_til_ready): Don't try to block on the dialin
port if the serial port isn't initialized.
Wed Dec 7 10:48:30 1994 Si Park (si@wimpol.demon.co.uk)
* tty_io.c (tty_register_driver): Fix bug when linking onto
the tty_drivers list. We now test that there are elements
already on the list before setting the back link from the
first element to the new driver.
* tty_io.c (tty_unregister_driver): Fix bug in unlinking the
specified driver from the tty_drivers list. We were not
setting the back link correctly. This used to result in
a dangling back link pointer and cause panics on the next
call to get_tty_driver().
Tue Nov 29 10:21:09 1994 Theodore Y. Ts'o (tytso@rt-11)
* tty_io.c (tty_unregister_driver): Fix bug in
tty_unregister_driver where the pointer to the refcount is
tested, instead of the refcount itself. This caused
tty_unregister_driver to always return EBUSY.
Sat Nov 26 11:59:24 1994 Theodore Y. Ts'o (tytso@rt-11)
* tty_io.c (tty_ioctl): Add support for the new ioctl
TIOCTTYGSTRUCT, which allow a kernel debugging program
direct read access to the tty and tty_driver structures.
Fri Nov 25 17:26:22 1994 Theodore Y. Ts'o (tytso@rt-11)
* serial.c (rs_set_termios): Don't wake up processes blocked in
open when the CLOCAL flag changes, since a blocking
open only samples the CLOCAL flag once when it blocks,
and doesn't check it again. (n.b. FreeBSD has a
different behavior for blocking opens; it's not clear
whether Linux or FreeBSD's interpretation is correct.
POSIX doesn't give clear guidance on this issue, so
this may change in the future....)
* serial.c (block_til_ready): Use the correct termios structure to
check the CLOCAL flag. If the cuaXX device is active,
then check the saved termios for the ttySXX device.
Otherwise, use the currently active termios structure.
Sun Nov 6 21:05:44 1994 Theodore Y. Ts'o (tytso@rt-11)
* serial.c (change_speed): Add support for direct access of
57,600 and 115,200 bps.
Wed Nov 2 10:32:36 1994 Theodore Y. Ts'o (tytso@rt-11)
* n_tty.c (n_tty_receive_room): Only allow excess characters
through if we are in ICANON mode *and* there are other no
pending lines in the buffer. Otherwise cut and paste over
4k breaks.
Sat Oct 29 18:17:34 1994 Theodore Y. Ts'o (tytso@rt-11)
* serial.c (rs_ioctl, get_lsr_info): Added patch suggested by Arne
Riiber so that user mode programs can tell when the
transmitter shift register is empty.
Thu Oct 27 23:14:29 1994 Theodore Y. Ts'o (tytso@rt-11)
* tty_ioctl.c (wait_until_sent): Added debugging printk statements
(under the #ifdef TTY_DEBUG_WAIT_UNTIL_SENT)
* serial.c (rs_interrupt, rs_interrupt_single, receive_chars,
change_speed, rs_close): rs_close now disables receiver
interrupts when closing the serial port. This allows the
serial port to close quickly when Linux and a modem (or a
mouse) are engaged in an echo war; when closing the serial
port, we now first stop listening to incoming characters,
and *then* wait for the transmit buffer to drain.
In order to make this change, the info->read_status_mask
is now used to control what bits of the line status
register are looked at in the interrupt routine in all
cases; previously it was only used in receive_chars to
select a few of the status bits.
Mon Oct 24 23:36:21 1994 Theodore Y. Ts'o (tytso@rt-11)
* serial.c (rs_close): Add a timeout to the transmitter flush
loop; this is just a sanity check in case we have flaky
(or non-existent-but-configured-by-the-user) hardware.
Fri Oct 21 09:37:23 1994 Theodore Y. Ts'o (tytso@rt-11)
* tty_io.c (tty_fasync): When asynchronous I/O is enabled, if the
process or process group has not be specified yet, set it
to be the tty's process group, or if that is not yet set,
to the current process's pid.
Thu Oct 20 23:17:28 1994 Theodore Y. Ts'o (tytso@rt-11)
* n_tty.c (n_tty_receive_room): If we are doing input
canonicalization, let as many characters through as
possible, so that the excess characters can be "beeped".
Tue Oct 18 10:02:43 1994 Theodore Y. Ts'o (tytso@rt-11)
* serial.c (rs_start): Removed an incorrect '!' that was
preventing transmit interrupts from being re-enabled in
rs_start(). Fortunately in most cases it would be
re-enabled elsewhere, but this still should be fixed
correctly.
Sun Oct 9 23:46:03 1994 Theodore Y. Ts'o (tytso@rt-11)
* tty_io.c (do_tty_hangup): If the tty driver flags
TTY_DRIVER_RESET_TERMIOS is set, then reset the termios
settings back to the driver's initial configuration. This
allows the termios settings to be reset even if a process
has hung up file descriptors keeping a pty's termios from
being freed and reset.
* tty_io.c (release_dev): Fix memory leak. The pty's other
termios structure should also be freed.
* serial.c (rs_close, shutdown): Change how we wait for the
transmitter to completely drain before shutting down the
serial port. We now do it by scheduling in another
process instead of busy looping with the interrupts turned
on. This may eliminate some race condition problems that
some people seem to be reporting.
Sun Sep 25 14:18:14 1994 Theodore Y. Ts'o (tytso@rt-11)
* tty_io.c (release_dev): When freeing a tty make sure that both
the tty and the o_tty (if present) aren't a process's
controlling tty. (Previously, we only checked the tty.)
* serial.c (change_speed): Only enable the Modem Status
Interrupt for a port if CLOCAL is not set or CRTSCTS
is set. If we're not checking the carrier detect and
CTS line, there's no point in enabling the modem
status interrupt. This will save spurious interrupts
from slowing down systems who have terminals that
don't support either line. (Of course, if you want
only one of CD and CTS support, you will need a
properly wired serial cable.)
Thu Sep 22 08:32:48 1994 Theodore Y. Ts'o (tytso@rt-11)
* tty_io.c (do_SAK): Return if tty is null.
* tty_io.c (_tty_name): Return "NULL tty" if the passed in tty is
NULL.
Sat Sep 17 13:19:25 1994 Theodore Y. Ts'o (tytso@rt-11)
* tty_ioctl.c (n_tty_ioctl): Fix TIOCGLCKTRMIOS and
TIOCSLCKTRMIOS, which were totally broken. Remove
extra indirection from argument; it should be a struct
termios *, not a struct termios **.
&real_tty->termios_locked should have been
real_tty->termios_locked. This caused us to be
reading and writing the termios_locked structure to
random places in kernel memory.
* tty_io.c (release_dev): Oops! Forgot to delete a critical kfree
of the locked_termios. This leaves the locked_termios
structure pointed at a freed object.
Fri Sep 16 08:13:25 1994 Theodore Y. Ts'o (tytso@rt-11)
* tty_io.c (tty_open): Don't check for an exclusive open until
after the device specific open routine has been called.
Otherwise, the serial device ref counting will be screwed
up.
* serial.c (rs_open, block_til_ready): Don't set termios structure
until after block_til_ready has returned successfully.
Modify block_til_ready to check the normal_termios
structure directly, so it doesn't rely on termios being
set before it's called.
Thu Sep 15 23:34:01 1994 Theodore Y. Ts'o (tytso@rt-11)
* serial.c (rs_close): Turn off interrupts during rs_close() to
prevent a race condition with the hangup code (which
runs during a software interrupt).
* tty_io.c (release_dev): Don't free the locked_termios structure;
its state must be retained across device opens.
* tty_io.c (tty_unregister_driver): Added function to unregister a
tty driver. (For loadable device drivers.)
|