drivers/net: convert BUG_TRAP to generic WARN_ON
[linux-2.6] / drivers / char / tty_io.c
1 /*
2  *  linux/drivers/char/tty_io.c
3  *
4  *  Copyright (C) 1991, 1992  Linus Torvalds
5  */
6
7 /*
8  * 'tty_io.c' gives an orthogonal feeling to tty's, be they consoles
9  * or rs-channels. It also implements echoing, cooked mode etc.
10  *
11  * Kill-line thanks to John T Kohl, who also corrected VMIN = VTIME = 0.
12  *
13  * Modified by Theodore Ts'o, 9/14/92, to dynamically allocate the
14  * tty_struct and tty_queue structures.  Previously there was an array
15  * of 256 tty_struct's which was statically allocated, and the
16  * tty_queue structures were allocated at boot time.  Both are now
17  * dynamically allocated only when the tty is open.
18  *
19  * Also restructured routines so that there is more of a separation
20  * between the high-level tty routines (tty_io.c and tty_ioctl.c) and
21  * the low-level tty routines (serial.c, pty.c, console.c).  This
22  * makes for cleaner and more compact code.  -TYT, 9/17/92
23  *
24  * Modified by Fred N. van Kempen, 01/29/93, to add line disciplines
25  * which can be dynamically activated and de-activated by the line
26  * discipline handling modules (like SLIP).
27  *
28  * NOTE: pay no attention to the line discipline code (yet); its
29  * interface is still subject to change in this version...
30  * -- TYT, 1/31/92
31  *
32  * Added functionality to the OPOST tty handling.  No delays, but all
33  * other bits should be there.
34  *      -- Nick Holloway <alfie@dcs.warwick.ac.uk>, 27th May 1993.
35  *
36  * Rewrote canonical mode and added more termios flags.
37  *      -- julian@uhunix.uhcc.hawaii.edu (J. Cowley), 13Jan94
38  *
39  * Reorganized FASYNC support so mouse code can share it.
40  *      -- ctm@ardi.com, 9Sep95
41  *
42  * New TIOCLINUX variants added.
43  *      -- mj@k332.feld.cvut.cz, 19-Nov-95
44  *
45  * Restrict vt switching via ioctl()
46  *      -- grif@cs.ucr.edu, 5-Dec-95
47  *
48  * Move console and virtual terminal code to more appropriate files,
49  * implement CONFIG_VT and generalize console device interface.
50  *      -- Marko Kohtala <Marko.Kohtala@hut.fi>, March 97
51  *
52  * Rewrote init_dev and release_dev to eliminate races.
53  *      -- Bill Hawes <whawes@star.net>, June 97
54  *
55  * Added devfs support.
56  *      -- C. Scott Ananian <cananian@alumni.princeton.edu>, 13-Jan-1998
57  *
58  * Added support for a Unix98-style ptmx device.
59  *      -- C. Scott Ananian <cananian@alumni.princeton.edu>, 14-Jan-1998
60  *
61  * Reduced memory usage for older ARM systems
62  *      -- Russell King <rmk@arm.linux.org.uk>
63  *
64  * Move do_SAK() into process context.  Less stack use in devfs functions.
65  * alloc_tty_struct() always uses kmalloc()
66  *                       -- Andrew Morton <andrewm@uow.edu.eu> 17Mar01
67  */
68
69 #include <linux/types.h>
70 #include <linux/major.h>
71 #include <linux/errno.h>
72 #include <linux/signal.h>
73 #include <linux/fcntl.h>
74 #include <linux/sched.h>
75 #include <linux/interrupt.h>
76 #include <linux/tty.h>
77 #include <linux/tty_driver.h>
78 #include <linux/tty_flip.h>
79 #include <linux/devpts_fs.h>
80 #include <linux/file.h>
81 #include <linux/fdtable.h>
82 #include <linux/console.h>
83 #include <linux/timer.h>
84 #include <linux/ctype.h>
85 #include <linux/kd.h>
86 #include <linux/mm.h>
87 #include <linux/string.h>
88 #include <linux/slab.h>
89 #include <linux/poll.h>
90 #include <linux/proc_fs.h>
91 #include <linux/init.h>
92 #include <linux/module.h>
93 #include <linux/smp_lock.h>
94 #include <linux/device.h>
95 #include <linux/wait.h>
96 #include <linux/bitops.h>
97 #include <linux/delay.h>
98 #include <linux/seq_file.h>
99
100 #include <linux/uaccess.h>
101 #include <asm/system.h>
102
103 #include <linux/kbd_kern.h>
104 #include <linux/vt_kern.h>
105 #include <linux/selection.h>
106
107 #include <linux/kmod.h>
108 #include <linux/nsproxy.h>
109
110 #undef TTY_DEBUG_HANGUP
111
112 #define TTY_PARANOIA_CHECK 1
113 #define CHECK_TTY_COUNT 1
114
115 struct ktermios tty_std_termios = {     /* for the benefit of tty drivers  */
116         .c_iflag = ICRNL | IXON,
117         .c_oflag = OPOST | ONLCR,
118         .c_cflag = B38400 | CS8 | CREAD | HUPCL,
119         .c_lflag = ISIG | ICANON | ECHO | ECHOE | ECHOK |
120                    ECHOCTL | ECHOKE | IEXTEN,
121         .c_cc = INIT_C_CC,
122         .c_ispeed = 38400,
123         .c_ospeed = 38400
124 };
125
126 EXPORT_SYMBOL(tty_std_termios);
127
128 /* This list gets poked at by procfs and various bits of boot up code. This
129    could do with some rationalisation such as pulling the tty proc function
130    into this file */
131
132 LIST_HEAD(tty_drivers);                 /* linked list of tty drivers */
133
134 /* Mutex to protect creating and releasing a tty. This is shared with
135    vt.c for deeply disgusting hack reasons */
136 DEFINE_MUTEX(tty_mutex);
137 EXPORT_SYMBOL(tty_mutex);
138
139 #ifdef CONFIG_UNIX98_PTYS
140 extern struct tty_driver *ptm_driver;   /* Unix98 pty masters; for /dev/ptmx */
141 static int ptmx_open(struct inode *, struct file *);
142 #endif
143
144 static void initialize_tty_struct(struct tty_struct *tty);
145
146 static ssize_t tty_read(struct file *, char __user *, size_t, loff_t *);
147 static ssize_t tty_write(struct file *, const char __user *, size_t, loff_t *);
148 ssize_t redirected_tty_write(struct file *, const char __user *,
149                                                         size_t, loff_t *);
150 static unsigned int tty_poll(struct file *, poll_table *);
151 static int tty_open(struct inode *, struct file *);
152 static int tty_release(struct inode *, struct file *);
153 long tty_ioctl(struct file *file, unsigned int cmd, unsigned long arg);
154 #ifdef CONFIG_COMPAT
155 static long tty_compat_ioctl(struct file *file, unsigned int cmd,
156                                 unsigned long arg);
157 #else
158 #define tty_compat_ioctl NULL
159 #endif
160 static int tty_fasync(int fd, struct file *filp, int on);
161 static void release_tty(struct tty_struct *tty, int idx);
162 static void __proc_set_tty(struct task_struct *tsk, struct tty_struct *tty);
163 static void proc_set_tty(struct task_struct *tsk, struct tty_struct *tty);
164
165 /**
166  *      alloc_tty_struct        -       allocate a tty object
167  *
168  *      Return a new empty tty structure. The data fields have not
169  *      been initialized in any way but has been zeroed
170  *
171  *      Locking: none
172  */
173
174 static struct tty_struct *alloc_tty_struct(void)
175 {
176         return kzalloc(sizeof(struct tty_struct), GFP_KERNEL);
177 }
178
179 static void tty_buffer_free_all(struct tty_struct *);
180
181 /**
182  *      free_tty_struct         -       free a disused tty
183  *      @tty: tty struct to free
184  *
185  *      Free the write buffers, tty queue and tty memory itself.
186  *
187  *      Locking: none. Must be called after tty is definitely unused
188  */
189
190 static inline void free_tty_struct(struct tty_struct *tty)
191 {
192         kfree(tty->write_buf);
193         tty_buffer_free_all(tty);
194         kfree(tty);
195 }
196
197 #define TTY_NUMBER(tty) ((tty)->index + (tty)->driver->name_base)
198
199 /**
200  *      tty_name        -       return tty naming
201  *      @tty: tty structure
202  *      @buf: buffer for output
203  *
204  *      Convert a tty structure into a name. The name reflects the kernel
205  *      naming policy and if udev is in use may not reflect user space
206  *
207  *      Locking: none
208  */
209
210 char *tty_name(struct tty_struct *tty, char *buf)
211 {
212         if (!tty) /* Hmm.  NULL pointer.  That's fun. */
213                 strcpy(buf, "NULL tty");
214         else
215                 strcpy(buf, tty->name);
216         return buf;
217 }
218
219 EXPORT_SYMBOL(tty_name);
220
221 int tty_paranoia_check(struct tty_struct *tty, struct inode *inode,
222                               const char *routine)
223 {
224 #ifdef TTY_PARANOIA_CHECK
225         if (!tty) {
226                 printk(KERN_WARNING
227                         "null TTY for (%d:%d) in %s\n",
228                         imajor(inode), iminor(inode), routine);
229                 return 1;
230         }
231         if (tty->magic != TTY_MAGIC) {
232                 printk(KERN_WARNING
233                         "bad magic number for tty struct (%d:%d) in %s\n",
234                         imajor(inode), iminor(inode), routine);
235                 return 1;
236         }
237 #endif
238         return 0;
239 }
240
241 static int check_tty_count(struct tty_struct *tty, const char *routine)
242 {
243 #ifdef CHECK_TTY_COUNT
244         struct list_head *p;
245         int count = 0;
246
247         file_list_lock();
248         list_for_each(p, &tty->tty_files) {
249                 count++;
250         }
251         file_list_unlock();
252         if (tty->driver->type == TTY_DRIVER_TYPE_PTY &&
253             tty->driver->subtype == PTY_TYPE_SLAVE &&
254             tty->link && tty->link->count)
255                 count++;
256         if (tty->count != count) {
257                 printk(KERN_WARNING "Warning: dev (%s) tty->count(%d) "
258                                     "!= #fd's(%d) in %s\n",
259                        tty->name, tty->count, count, routine);
260                 return count;
261         }
262 #endif
263         return 0;
264 }
265
266 /*
267  * Tty buffer allocation management
268  */
269
270 /**
271  *      tty_buffer_free_all             -       free buffers used by a tty
272  *      @tty: tty to free from
273  *
274  *      Remove all the buffers pending on a tty whether queued with data
275  *      or in the free ring. Must be called when the tty is no longer in use
276  *
277  *      Locking: none
278  */
279
280 static void tty_buffer_free_all(struct tty_struct *tty)
281 {
282         struct tty_buffer *thead;
283         while ((thead = tty->buf.head) != NULL) {
284                 tty->buf.head = thead->next;
285                 kfree(thead);
286         }
287         while ((thead = tty->buf.free) != NULL) {
288                 tty->buf.free = thead->next;
289                 kfree(thead);
290         }
291         tty->buf.tail = NULL;
292         tty->buf.memory_used = 0;
293 }
294
295 /**
296  *      tty_buffer_init         -       prepare a tty buffer structure
297  *      @tty: tty to initialise
298  *
299  *      Set up the initial state of the buffer management for a tty device.
300  *      Must be called before the other tty buffer functions are used.
301  *
302  *      Locking: none
303  */
304
305 static void tty_buffer_init(struct tty_struct *tty)
306 {
307         spin_lock_init(&tty->buf.lock);
308         tty->buf.head = NULL;
309         tty->buf.tail = NULL;
310         tty->buf.free = NULL;
311         tty->buf.memory_used = 0;
312 }
313
314 /**
315  *      tty_buffer_alloc        -       allocate a tty buffer
316  *      @tty: tty device
317  *      @size: desired size (characters)
318  *
319  *      Allocate a new tty buffer to hold the desired number of characters.
320  *      Return NULL if out of memory or the allocation would exceed the
321  *      per device queue
322  *
323  *      Locking: Caller must hold tty->buf.lock
324  */
325
326 static struct tty_buffer *tty_buffer_alloc(struct tty_struct *tty, size_t size)
327 {
328         struct tty_buffer *p;
329
330         if (tty->buf.memory_used + size > 65536)
331                 return NULL;
332         p = kmalloc(sizeof(struct tty_buffer) + 2 * size, GFP_ATOMIC);
333         if (p == NULL)
334                 return NULL;
335         p->used = 0;
336         p->size = size;
337         p->next = NULL;
338         p->commit = 0;
339         p->read = 0;
340         p->char_buf_ptr = (char *)(p->data);
341         p->flag_buf_ptr = (unsigned char *)p->char_buf_ptr + size;
342         tty->buf.memory_used += size;
343         return p;
344 }
345
346 /**
347  *      tty_buffer_free         -       free a tty buffer
348  *      @tty: tty owning the buffer
349  *      @b: the buffer to free
350  *
351  *      Free a tty buffer, or add it to the free list according to our
352  *      internal strategy
353  *
354  *      Locking: Caller must hold tty->buf.lock
355  */
356
357 static void tty_buffer_free(struct tty_struct *tty, struct tty_buffer *b)
358 {
359         /* Dumb strategy for now - should keep some stats */
360         tty->buf.memory_used -= b->size;
361         WARN_ON(tty->buf.memory_used < 0);
362
363         if (b->size >= 512)
364                 kfree(b);
365         else {
366                 b->next = tty->buf.free;
367                 tty->buf.free = b;
368         }
369 }
370
371 /**
372  *      __tty_buffer_flush              -       flush full tty buffers
373  *      @tty: tty to flush
374  *
375  *      flush all the buffers containing receive data. Caller must
376  *      hold the buffer lock and must have ensured no parallel flush to
377  *      ldisc is running.
378  *
379  *      Locking: Caller must hold tty->buf.lock
380  */
381
382 static void __tty_buffer_flush(struct tty_struct *tty)
383 {
384         struct tty_buffer *thead;
385
386         while ((thead = tty->buf.head) != NULL) {
387                 tty->buf.head = thead->next;
388                 tty_buffer_free(tty, thead);
389         }
390         tty->buf.tail = NULL;
391 }
392
393 /**
394  *      tty_buffer_flush                -       flush full tty buffers
395  *      @tty: tty to flush
396  *
397  *      flush all the buffers containing receive data. If the buffer is
398  *      being processed by flush_to_ldisc then we defer the processing
399  *      to that function
400  *
401  *      Locking: none
402  */
403
404 static void tty_buffer_flush(struct tty_struct *tty)
405 {
406         unsigned long flags;
407         spin_lock_irqsave(&tty->buf.lock, flags);
408
409         /* If the data is being pushed to the tty layer then we can't
410            process it here. Instead set a flag and the flush_to_ldisc
411            path will process the flush request before it exits */
412         if (test_bit(TTY_FLUSHING, &tty->flags)) {
413                 set_bit(TTY_FLUSHPENDING, &tty->flags);
414                 spin_unlock_irqrestore(&tty->buf.lock, flags);
415                 wait_event(tty->read_wait,
416                                 test_bit(TTY_FLUSHPENDING, &tty->flags) == 0);
417                 return;
418         } else
419                 __tty_buffer_flush(tty);
420         spin_unlock_irqrestore(&tty->buf.lock, flags);
421 }
422
423 /**
424  *      tty_buffer_find         -       find a free tty buffer
425  *      @tty: tty owning the buffer
426  *      @size: characters wanted
427  *
428  *      Locate an existing suitable tty buffer or if we are lacking one then
429  *      allocate a new one. We round our buffers off in 256 character chunks
430  *      to get better allocation behaviour.
431  *
432  *      Locking: Caller must hold tty->buf.lock
433  */
434
435 static struct tty_buffer *tty_buffer_find(struct tty_struct *tty, size_t size)
436 {
437         struct tty_buffer **tbh = &tty->buf.free;
438         while ((*tbh) != NULL) {
439                 struct tty_buffer *t = *tbh;
440                 if (t->size >= size) {
441                         *tbh = t->next;
442                         t->next = NULL;
443                         t->used = 0;
444                         t->commit = 0;
445                         t->read = 0;
446                         tty->buf.memory_used += t->size;
447                         return t;
448                 }
449                 tbh = &((*tbh)->next);
450         }
451         /* Round the buffer size out */
452         size = (size + 0xFF) & ~0xFF;
453         return tty_buffer_alloc(tty, size);
454         /* Should possibly check if this fails for the largest buffer we
455            have queued and recycle that ? */
456 }
457
458 /**
459  *      tty_buffer_request_room         -       grow tty buffer if needed
460  *      @tty: tty structure
461  *      @size: size desired
462  *
463  *      Make at least size bytes of linear space available for the tty
464  *      buffer. If we fail return the size we managed to find.
465  *
466  *      Locking: Takes tty->buf.lock
467  */
468 int tty_buffer_request_room(struct tty_struct *tty, size_t size)
469 {
470         struct tty_buffer *b, *n;
471         int left;
472         unsigned long flags;
473
474         spin_lock_irqsave(&tty->buf.lock, flags);
475
476         /* OPTIMISATION: We could keep a per tty "zero" sized buffer to
477            remove this conditional if its worth it. This would be invisible
478            to the callers */
479         if ((b = tty->buf.tail) != NULL)
480                 left = b->size - b->used;
481         else
482                 left = 0;
483
484         if (left < size) {
485                 /* This is the slow path - looking for new buffers to use */
486                 if ((n = tty_buffer_find(tty, size)) != NULL) {
487                         if (b != NULL) {
488                                 b->next = n;
489                                 b->commit = b->used;
490                         } else
491                                 tty->buf.head = n;
492                         tty->buf.tail = n;
493                 } else
494                         size = left;
495         }
496
497         spin_unlock_irqrestore(&tty->buf.lock, flags);
498         return size;
499 }
500 EXPORT_SYMBOL_GPL(tty_buffer_request_room);
501
502 /**
503  *      tty_insert_flip_string  -       Add characters to the tty buffer
504  *      @tty: tty structure
505  *      @chars: characters
506  *      @size: size
507  *
508  *      Queue a series of bytes to the tty buffering. All the characters
509  *      passed are marked as without error. Returns the number added.
510  *
511  *      Locking: Called functions may take tty->buf.lock
512  */
513
514 int tty_insert_flip_string(struct tty_struct *tty, const unsigned char *chars,
515                                 size_t size)
516 {
517         int copied = 0;
518         do {
519                 int space = tty_buffer_request_room(tty, size - copied);
520                 struct tty_buffer *tb = tty->buf.tail;
521                 /* If there is no space then tb may be NULL */
522                 if (unlikely(space == 0))
523                         break;
524                 memcpy(tb->char_buf_ptr + tb->used, chars, space);
525                 memset(tb->flag_buf_ptr + tb->used, TTY_NORMAL, space);
526                 tb->used += space;
527                 copied += space;
528                 chars += space;
529                 /* There is a small chance that we need to split the data over
530                    several buffers. If this is the case we must loop */
531         } while (unlikely(size > copied));
532         return copied;
533 }
534 EXPORT_SYMBOL(tty_insert_flip_string);
535
536 /**
537  *      tty_insert_flip_string_flags    -       Add characters to the tty buffer
538  *      @tty: tty structure
539  *      @chars: characters
540  *      @flags: flag bytes
541  *      @size: size
542  *
543  *      Queue a series of bytes to the tty buffering. For each character
544  *      the flags array indicates the status of the character. Returns the
545  *      number added.
546  *
547  *      Locking: Called functions may take tty->buf.lock
548  */
549
550 int tty_insert_flip_string_flags(struct tty_struct *tty,
551                 const unsigned char *chars, const char *flags, size_t size)
552 {
553         int copied = 0;
554         do {
555                 int space = tty_buffer_request_room(tty, size - copied);
556                 struct tty_buffer *tb = tty->buf.tail;
557                 /* If there is no space then tb may be NULL */
558                 if (unlikely(space == 0))
559                         break;
560                 memcpy(tb->char_buf_ptr + tb->used, chars, space);
561                 memcpy(tb->flag_buf_ptr + tb->used, flags, space);
562                 tb->used += space;
563                 copied += space;
564                 chars += space;
565                 flags += space;
566                 /* There is a small chance that we need to split the data over
567                    several buffers. If this is the case we must loop */
568         } while (unlikely(size > copied));
569         return copied;
570 }
571 EXPORT_SYMBOL(tty_insert_flip_string_flags);
572
573 /**
574  *      tty_schedule_flip       -       push characters to ldisc
575  *      @tty: tty to push from
576  *
577  *      Takes any pending buffers and transfers their ownership to the
578  *      ldisc side of the queue. It then schedules those characters for
579  *      processing by the line discipline.
580  *
581  *      Locking: Takes tty->buf.lock
582  */
583
584 void tty_schedule_flip(struct tty_struct *tty)
585 {
586         unsigned long flags;
587         spin_lock_irqsave(&tty->buf.lock, flags);
588         if (tty->buf.tail != NULL)
589                 tty->buf.tail->commit = tty->buf.tail->used;
590         spin_unlock_irqrestore(&tty->buf.lock, flags);
591         schedule_delayed_work(&tty->buf.work, 1);
592 }
593 EXPORT_SYMBOL(tty_schedule_flip);
594
595 /**
596  *      tty_prepare_flip_string         -       make room for characters
597  *      @tty: tty
598  *      @chars: return pointer for character write area
599  *      @size: desired size
600  *
601  *      Prepare a block of space in the buffer for data. Returns the length
602  *      available and buffer pointer to the space which is now allocated and
603  *      accounted for as ready for normal characters. This is used for drivers
604  *      that need their own block copy routines into the buffer. There is no
605  *      guarantee the buffer is a DMA target!
606  *
607  *      Locking: May call functions taking tty->buf.lock
608  */
609
610 int tty_prepare_flip_string(struct tty_struct *tty, unsigned char **chars,
611                                                                 size_t size)
612 {
613         int space = tty_buffer_request_room(tty, size);
614         if (likely(space)) {
615                 struct tty_buffer *tb = tty->buf.tail;
616                 *chars = tb->char_buf_ptr + tb->used;
617                 memset(tb->flag_buf_ptr + tb->used, TTY_NORMAL, space);
618                 tb->used += space;
619         }
620         return space;
621 }
622
623 EXPORT_SYMBOL_GPL(tty_prepare_flip_string);
624
625 /**
626  *      tty_prepare_flip_string_flags   -       make room for characters
627  *      @tty: tty
628  *      @chars: return pointer for character write area
629  *      @flags: return pointer for status flag write area
630  *      @size: desired size
631  *
632  *      Prepare a block of space in the buffer for data. Returns the length
633  *      available and buffer pointer to the space which is now allocated and
634  *      accounted for as ready for characters. This is used for drivers
635  *      that need their own block copy routines into the buffer. There is no
636  *      guarantee the buffer is a DMA target!
637  *
638  *      Locking: May call functions taking tty->buf.lock
639  */
640
641 int tty_prepare_flip_string_flags(struct tty_struct *tty,
642                         unsigned char **chars, char **flags, size_t size)
643 {
644         int space = tty_buffer_request_room(tty, size);
645         if (likely(space)) {
646                 struct tty_buffer *tb = tty->buf.tail;
647                 *chars = tb->char_buf_ptr + tb->used;
648                 *flags = tb->flag_buf_ptr + tb->used;
649                 tb->used += space;
650         }
651         return space;
652 }
653
654 EXPORT_SYMBOL_GPL(tty_prepare_flip_string_flags);
655
656
657
658 /**
659  *      get_tty_driver          -       find device of a tty
660  *      @dev_t: device identifier
661  *      @index: returns the index of the tty
662  *
663  *      This routine returns a tty driver structure, given a device number
664  *      and also passes back the index number.
665  *
666  *      Locking: caller must hold tty_mutex
667  */
668
669 static struct tty_driver *get_tty_driver(dev_t device, int *index)
670 {
671         struct tty_driver *p;
672
673         list_for_each_entry(p, &tty_drivers, tty_drivers) {
674                 dev_t base = MKDEV(p->major, p->minor_start);
675                 if (device < base || device >= base + p->num)
676                         continue;
677                 *index = device - base;
678                 return p;
679         }
680         return NULL;
681 }
682
683 #ifdef CONFIG_CONSOLE_POLL
684
685 /**
686  *      tty_find_polling_driver -       find device of a polled tty
687  *      @name: name string to match
688  *      @line: pointer to resulting tty line nr
689  *
690  *      This routine returns a tty driver structure, given a name
691  *      and the condition that the tty driver is capable of polled
692  *      operation.
693  */
694 struct tty_driver *tty_find_polling_driver(char *name, int *line)
695 {
696         struct tty_driver *p, *res = NULL;
697         int tty_line = 0;
698         char *str;
699
700         mutex_lock(&tty_mutex);
701         /* Search through the tty devices to look for a match */
702         list_for_each_entry(p, &tty_drivers, tty_drivers) {
703                 str = name + strlen(p->name);
704                 tty_line = simple_strtoul(str, &str, 10);
705                 if (*str == ',')
706                         str++;
707                 if (*str == '\0')
708                         str = NULL;
709
710                 if (tty_line >= 0 && tty_line <= p->num && p->ops &&
711                     p->ops->poll_init && !p->ops->poll_init(p, tty_line, str)) {
712                         res = p;
713                         *line = tty_line;
714                         break;
715                 }
716         }
717         mutex_unlock(&tty_mutex);
718
719         return res;
720 }
721 EXPORT_SYMBOL_GPL(tty_find_polling_driver);
722 #endif
723
724 /**
725  *      tty_check_change        -       check for POSIX terminal changes
726  *      @tty: tty to check
727  *
728  *      If we try to write to, or set the state of, a terminal and we're
729  *      not in the foreground, send a SIGTTOU.  If the signal is blocked or
730  *      ignored, go ahead and perform the operation.  (POSIX 7.2)
731  *
732  *      Locking: ctrl_lock
733  */
734
735 int tty_check_change(struct tty_struct *tty)
736 {
737         unsigned long flags;
738         int ret = 0;
739
740         if (current->signal->tty != tty)
741                 return 0;
742
743         spin_lock_irqsave(&tty->ctrl_lock, flags);
744
745         if (!tty->pgrp) {
746                 printk(KERN_WARNING "tty_check_change: tty->pgrp == NULL!\n");
747                 goto out_unlock;
748         }
749         if (task_pgrp(current) == tty->pgrp)
750                 goto out_unlock;
751         spin_unlock_irqrestore(&tty->ctrl_lock, flags);
752         if (is_ignored(SIGTTOU))
753                 goto out;
754         if (is_current_pgrp_orphaned()) {
755                 ret = -EIO;
756                 goto out;
757         }
758         kill_pgrp(task_pgrp(current), SIGTTOU, 1);
759         set_thread_flag(TIF_SIGPENDING);
760         ret = -ERESTARTSYS;
761 out:
762         return ret;
763 out_unlock:
764         spin_unlock_irqrestore(&tty->ctrl_lock, flags);
765         return ret;
766 }
767
768 EXPORT_SYMBOL(tty_check_change);
769
770 static ssize_t hung_up_tty_read(struct file *file, char __user *buf,
771                                 size_t count, loff_t *ppos)
772 {
773         return 0;
774 }
775
776 static ssize_t hung_up_tty_write(struct file *file, const char __user *buf,
777                                  size_t count, loff_t *ppos)
778 {
779         return -EIO;
780 }
781
782 /* No kernel lock held - none needed ;) */
783 static unsigned int hung_up_tty_poll(struct file *filp, poll_table *wait)
784 {
785         return POLLIN | POLLOUT | POLLERR | POLLHUP | POLLRDNORM | POLLWRNORM;
786 }
787
788 static long hung_up_tty_ioctl(struct file *file, unsigned int cmd,
789                 unsigned long arg)
790 {
791         return cmd == TIOCSPGRP ? -ENOTTY : -EIO;
792 }
793
794 static long hung_up_tty_compat_ioctl(struct file *file,
795                                      unsigned int cmd, unsigned long arg)
796 {
797         return cmd == TIOCSPGRP ? -ENOTTY : -EIO;
798 }
799
800 static const struct file_operations tty_fops = {
801         .llseek         = no_llseek,
802         .read           = tty_read,
803         .write          = tty_write,
804         .poll           = tty_poll,
805         .unlocked_ioctl = tty_ioctl,
806         .compat_ioctl   = tty_compat_ioctl,
807         .open           = tty_open,
808         .release        = tty_release,
809         .fasync         = tty_fasync,
810 };
811
812 #ifdef CONFIG_UNIX98_PTYS
813 static const struct file_operations ptmx_fops = {
814         .llseek         = no_llseek,
815         .read           = tty_read,
816         .write          = tty_write,
817         .poll           = tty_poll,
818         .unlocked_ioctl = tty_ioctl,
819         .compat_ioctl   = tty_compat_ioctl,
820         .open           = ptmx_open,
821         .release        = tty_release,
822         .fasync         = tty_fasync,
823 };
824 #endif
825
826 static const struct file_operations console_fops = {
827         .llseek         = no_llseek,
828         .read           = tty_read,
829         .write          = redirected_tty_write,
830         .poll           = tty_poll,
831         .unlocked_ioctl = tty_ioctl,
832         .compat_ioctl   = tty_compat_ioctl,
833         .open           = tty_open,
834         .release        = tty_release,
835         .fasync         = tty_fasync,
836 };
837
838 static const struct file_operations hung_up_tty_fops = {
839         .llseek         = no_llseek,
840         .read           = hung_up_tty_read,
841         .write          = hung_up_tty_write,
842         .poll           = hung_up_tty_poll,
843         .unlocked_ioctl = hung_up_tty_ioctl,
844         .compat_ioctl   = hung_up_tty_compat_ioctl,
845         .release        = tty_release,
846 };
847
848 static DEFINE_SPINLOCK(redirect_lock);
849 static struct file *redirect;
850
851 /**
852  *      tty_wakeup      -       request more data
853  *      @tty: terminal
854  *
855  *      Internal and external helper for wakeups of tty. This function
856  *      informs the line discipline if present that the driver is ready
857  *      to receive more output data.
858  */
859
860 void tty_wakeup(struct tty_struct *tty)
861 {
862         struct tty_ldisc *ld;
863
864         if (test_bit(TTY_DO_WRITE_WAKEUP, &tty->flags)) {
865                 ld = tty_ldisc_ref(tty);
866                 if (ld) {
867                         if (ld->ops->write_wakeup)
868                                 ld->ops->write_wakeup(tty);
869                         tty_ldisc_deref(ld);
870                 }
871         }
872         wake_up_interruptible(&tty->write_wait);
873 }
874
875 EXPORT_SYMBOL_GPL(tty_wakeup);
876
877 /**
878  *      tty_ldisc_flush -       flush line discipline queue
879  *      @tty: tty
880  *
881  *      Flush the line discipline queue (if any) for this tty. If there
882  *      is no line discipline active this is a no-op.
883  */
884
885 void tty_ldisc_flush(struct tty_struct *tty)
886 {
887         struct tty_ldisc *ld = tty_ldisc_ref(tty);
888         if (ld) {
889                 if (ld->ops->flush_buffer)
890                         ld->ops->flush_buffer(tty);
891                 tty_ldisc_deref(ld);
892         }
893         tty_buffer_flush(tty);
894 }
895
896 EXPORT_SYMBOL_GPL(tty_ldisc_flush);
897
898 /**
899  *      tty_reset_termios       -       reset terminal state
900  *      @tty: tty to reset
901  *
902  *      Restore a terminal to the driver default state
903  */
904
905 static void tty_reset_termios(struct tty_struct *tty)
906 {
907         mutex_lock(&tty->termios_mutex);
908         *tty->termios = tty->driver->init_termios;
909         tty->termios->c_ispeed = tty_termios_input_baud_rate(tty->termios);
910         tty->termios->c_ospeed = tty_termios_baud_rate(tty->termios);
911         mutex_unlock(&tty->termios_mutex);
912 }
913
914 /**
915  *      do_tty_hangup           -       actual handler for hangup events
916  *      @work: tty device
917  *
918 k *     This can be called by the "eventd" kernel thread.  That is process
919  *      synchronous but doesn't hold any locks, so we need to make sure we
920  *      have the appropriate locks for what we're doing.
921  *
922  *      The hangup event clears any pending redirections onto the hung up
923  *      device. It ensures future writes will error and it does the needed
924  *      line discipline hangup and signal delivery. The tty object itself
925  *      remains intact.
926  *
927  *      Locking:
928  *              BKL
929  *                redirect lock for undoing redirection
930  *                file list lock for manipulating list of ttys
931  *                tty_ldisc_lock from called functions
932  *                termios_mutex resetting termios data
933  *                tasklist_lock to walk task list for hangup event
934  *                  ->siglock to protect ->signal/->sighand
935  */
936 static void do_tty_hangup(struct work_struct *work)
937 {
938         struct tty_struct *tty =
939                 container_of(work, struct tty_struct, hangup_work);
940         struct file *cons_filp = NULL;
941         struct file *filp, *f = NULL;
942         struct task_struct *p;
943         struct tty_ldisc *ld;
944         int    closecount = 0, n;
945         unsigned long flags;
946
947         if (!tty)
948                 return;
949
950         /* inuse_filps is protected by the single kernel lock */
951         lock_kernel();
952
953         spin_lock(&redirect_lock);
954         if (redirect && redirect->private_data == tty) {
955                 f = redirect;
956                 redirect = NULL;
957         }
958         spin_unlock(&redirect_lock);
959
960         check_tty_count(tty, "do_tty_hangup");
961         file_list_lock();
962         /* This breaks for file handles being sent over AF_UNIX sockets ? */
963         list_for_each_entry(filp, &tty->tty_files, f_u.fu_list) {
964                 if (filp->f_op->write == redirected_tty_write)
965                         cons_filp = filp;
966                 if (filp->f_op->write != tty_write)
967                         continue;
968                 closecount++;
969                 tty_fasync(-1, filp, 0);        /* can't block */
970                 filp->f_op = &hung_up_tty_fops;
971         }
972         file_list_unlock();
973         /*
974          * FIXME! What are the locking issues here? This may me overdoing
975          * things... This question is especially important now that we've
976          * removed the irqlock.
977          */
978         ld = tty_ldisc_ref(tty);
979         if (ld != NULL) {
980                 /* We may have no line discipline at this point */
981                 if (ld->ops->flush_buffer)
982                         ld->ops->flush_buffer(tty);
983                 tty_driver_flush_buffer(tty);
984                 if ((test_bit(TTY_DO_WRITE_WAKEUP, &tty->flags)) &&
985                     ld->ops->write_wakeup)
986                         ld->ops->write_wakeup(tty);
987                 if (ld->ops->hangup)
988                         ld->ops->hangup(tty);
989         }
990         /*
991          * FIXME: Once we trust the LDISC code better we can wait here for
992          * ldisc completion and fix the driver call race
993          */
994         wake_up_interruptible(&tty->write_wait);
995         wake_up_interruptible(&tty->read_wait);
996         /*
997          * Shutdown the current line discipline, and reset it to
998          * N_TTY.
999          */
1000         if (tty->driver->flags & TTY_DRIVER_RESET_TERMIOS)
1001                 tty_reset_termios(tty);
1002         /* Defer ldisc switch */
1003         /* tty_deferred_ldisc_switch(N_TTY);
1004
1005           This should get done automatically when the port closes and
1006           tty_release is called */
1007
1008         read_lock(&tasklist_lock);
1009         if (tty->session) {
1010                 do_each_pid_task(tty->session, PIDTYPE_SID, p) {
1011                         spin_lock_irq(&p->sighand->siglock);
1012                         if (p->signal->tty == tty)
1013                                 p->signal->tty = NULL;
1014                         if (!p->signal->leader) {
1015                                 spin_unlock_irq(&p->sighand->siglock);
1016                                 continue;
1017                         }
1018                         __group_send_sig_info(SIGHUP, SEND_SIG_PRIV, p);
1019                         __group_send_sig_info(SIGCONT, SEND_SIG_PRIV, p);
1020                         put_pid(p->signal->tty_old_pgrp);  /* A noop */
1021                         spin_lock_irqsave(&tty->ctrl_lock, flags);
1022                         if (tty->pgrp)
1023                                 p->signal->tty_old_pgrp = get_pid(tty->pgrp);
1024                         spin_unlock_irqrestore(&tty->ctrl_lock, flags);
1025                         spin_unlock_irq(&p->sighand->siglock);
1026                 } while_each_pid_task(tty->session, PIDTYPE_SID, p);
1027         }
1028         read_unlock(&tasklist_lock);
1029
1030         spin_lock_irqsave(&tty->ctrl_lock, flags);
1031         tty->flags = 0;
1032         put_pid(tty->session);
1033         put_pid(tty->pgrp);
1034         tty->session = NULL;
1035         tty->pgrp = NULL;
1036         tty->ctrl_status = 0;
1037         spin_unlock_irqrestore(&tty->ctrl_lock, flags);
1038
1039         /*
1040          * If one of the devices matches a console pointer, we
1041          * cannot just call hangup() because that will cause
1042          * tty->count and state->count to go out of sync.
1043          * So we just call close() the right number of times.
1044          */
1045         if (cons_filp) {
1046                 if (tty->ops->close)
1047                         for (n = 0; n < closecount; n++)
1048                                 tty->ops->close(tty, cons_filp);
1049         } else if (tty->ops->hangup)
1050                 (tty->ops->hangup)(tty);
1051         /*
1052          * We don't want to have driver/ldisc interactions beyond
1053          * the ones we did here. The driver layer expects no
1054          * calls after ->hangup() from the ldisc side. However we
1055          * can't yet guarantee all that.
1056          */
1057         set_bit(TTY_HUPPED, &tty->flags);
1058         if (ld) {
1059                 tty_ldisc_enable(tty);
1060                 tty_ldisc_deref(ld);
1061         }
1062         unlock_kernel();
1063         if (f)
1064                 fput(f);
1065 }
1066
1067 /**
1068  *      tty_hangup              -       trigger a hangup event
1069  *      @tty: tty to hangup
1070  *
1071  *      A carrier loss (virtual or otherwise) has occurred on this like
1072  *      schedule a hangup sequence to run after this event.
1073  */
1074
1075 void tty_hangup(struct tty_struct *tty)
1076 {
1077 #ifdef TTY_DEBUG_HANGUP
1078         char    buf[64];
1079         printk(KERN_DEBUG "%s hangup...\n", tty_name(tty, buf));
1080 #endif
1081         schedule_work(&tty->hangup_work);
1082 }
1083
1084 EXPORT_SYMBOL(tty_hangup);
1085
1086 /**
1087  *      tty_vhangup             -       process vhangup
1088  *      @tty: tty to hangup
1089  *
1090  *      The user has asked via system call for the terminal to be hung up.
1091  *      We do this synchronously so that when the syscall returns the process
1092  *      is complete. That guarantee is necessary for security reasons.
1093  */
1094
1095 void tty_vhangup(struct tty_struct *tty)
1096 {
1097 #ifdef TTY_DEBUG_HANGUP
1098         char    buf[64];
1099
1100         printk(KERN_DEBUG "%s vhangup...\n", tty_name(tty, buf));
1101 #endif
1102         do_tty_hangup(&tty->hangup_work);
1103 }
1104
1105 EXPORT_SYMBOL(tty_vhangup);
1106
1107 /**
1108  *      tty_hung_up_p           -       was tty hung up
1109  *      @filp: file pointer of tty
1110  *
1111  *      Return true if the tty has been subject to a vhangup or a carrier
1112  *      loss
1113  */
1114
1115 int tty_hung_up_p(struct file *filp)
1116 {
1117         return (filp->f_op == &hung_up_tty_fops);
1118 }
1119
1120 EXPORT_SYMBOL(tty_hung_up_p);
1121
1122 /**
1123  *      is_tty  -       checker whether file is a TTY
1124  *      @filp:          file handle that may be a tty
1125  *
1126  *      Check if the file handle is a tty handle.
1127  */
1128
1129 int is_tty(struct file *filp)
1130 {
1131         return filp->f_op->read == tty_read
1132                 || filp->f_op->read == hung_up_tty_read;
1133 }
1134
1135 static void session_clear_tty(struct pid *session)
1136 {
1137         struct task_struct *p;
1138         do_each_pid_task(session, PIDTYPE_SID, p) {
1139                 proc_clear_tty(p);
1140         } while_each_pid_task(session, PIDTYPE_SID, p);
1141 }
1142
1143 /**
1144  *      disassociate_ctty       -       disconnect controlling tty
1145  *      @on_exit: true if exiting so need to "hang up" the session
1146  *
1147  *      This function is typically called only by the session leader, when
1148  *      it wants to disassociate itself from its controlling tty.
1149  *
1150  *      It performs the following functions:
1151  *      (1)  Sends a SIGHUP and SIGCONT to the foreground process group
1152  *      (2)  Clears the tty from being controlling the session
1153  *      (3)  Clears the controlling tty for all processes in the
1154  *              session group.
1155  *
1156  *      The argument on_exit is set to 1 if called when a process is
1157  *      exiting; it is 0 if called by the ioctl TIOCNOTTY.
1158  *
1159  *      Locking:
1160  *              BKL is taken for hysterical raisins
1161  *                tty_mutex is taken to protect tty
1162  *                ->siglock is taken to protect ->signal/->sighand
1163  *                tasklist_lock is taken to walk process list for sessions
1164  *                  ->siglock is taken to protect ->signal/->sighand
1165  */
1166
1167 void disassociate_ctty(int on_exit)
1168 {
1169         struct tty_struct *tty;
1170         struct pid *tty_pgrp = NULL;
1171
1172
1173         mutex_lock(&tty_mutex);
1174         tty = get_current_tty();
1175         if (tty) {
1176                 tty_pgrp = get_pid(tty->pgrp);
1177                 mutex_unlock(&tty_mutex);
1178                 lock_kernel();
1179                 /* XXX: here we race, there is nothing protecting tty */
1180                 if (on_exit && tty->driver->type != TTY_DRIVER_TYPE_PTY)
1181                         tty_vhangup(tty);
1182                 unlock_kernel();
1183         } else if (on_exit) {
1184                 struct pid *old_pgrp;
1185                 spin_lock_irq(&current->sighand->siglock);
1186                 old_pgrp = current->signal->tty_old_pgrp;
1187                 current->signal->tty_old_pgrp = NULL;
1188                 spin_unlock_irq(&current->sighand->siglock);
1189                 if (old_pgrp) {
1190                         kill_pgrp(old_pgrp, SIGHUP, on_exit);
1191                         kill_pgrp(old_pgrp, SIGCONT, on_exit);
1192                         put_pid(old_pgrp);
1193                 }
1194                 mutex_unlock(&tty_mutex);
1195                 return;
1196         }
1197         if (tty_pgrp) {
1198                 kill_pgrp(tty_pgrp, SIGHUP, on_exit);
1199                 if (!on_exit)
1200                         kill_pgrp(tty_pgrp, SIGCONT, on_exit);
1201                 put_pid(tty_pgrp);
1202         }
1203
1204         spin_lock_irq(&current->sighand->siglock);
1205         put_pid(current->signal->tty_old_pgrp);
1206         current->signal->tty_old_pgrp = NULL;
1207         spin_unlock_irq(&current->sighand->siglock);
1208
1209         mutex_lock(&tty_mutex);
1210         /* It is possible that do_tty_hangup has free'd this tty */
1211         tty = get_current_tty();
1212         if (tty) {
1213                 unsigned long flags;
1214                 spin_lock_irqsave(&tty->ctrl_lock, flags);
1215                 put_pid(tty->session);
1216                 put_pid(tty->pgrp);
1217                 tty->session = NULL;
1218                 tty->pgrp = NULL;
1219                 spin_unlock_irqrestore(&tty->ctrl_lock, flags);
1220         } else {
1221 #ifdef TTY_DEBUG_HANGUP
1222                 printk(KERN_DEBUG "error attempted to write to tty [0x%p]"
1223                        " = NULL", tty);
1224 #endif
1225         }
1226         mutex_unlock(&tty_mutex);
1227
1228         /* Now clear signal->tty under the lock */
1229         read_lock(&tasklist_lock);
1230         session_clear_tty(task_session(current));
1231         read_unlock(&tasklist_lock);
1232 }
1233
1234 /**
1235  *
1236  *      no_tty  - Ensure the current process does not have a controlling tty
1237  */
1238 void no_tty(void)
1239 {
1240         struct task_struct *tsk = current;
1241         lock_kernel();
1242         if (tsk->signal->leader)
1243                 disassociate_ctty(0);
1244         unlock_kernel();
1245         proc_clear_tty(tsk);
1246 }
1247
1248
1249 /**
1250  *      stop_tty        -       propagate flow control
1251  *      @tty: tty to stop
1252  *
1253  *      Perform flow control to the driver. For PTY/TTY pairs we
1254  *      must also propagate the TIOCKPKT status. May be called
1255  *      on an already stopped device and will not re-call the driver
1256  *      method.
1257  *
1258  *      This functionality is used by both the line disciplines for
1259  *      halting incoming flow and by the driver. It may therefore be
1260  *      called from any context, may be under the tty atomic_write_lock
1261  *      but not always.
1262  *
1263  *      Locking:
1264  *              Uses the tty control lock internally
1265  */
1266
1267 void stop_tty(struct tty_struct *tty)
1268 {
1269         unsigned long flags;
1270         spin_lock_irqsave(&tty->ctrl_lock, flags);
1271         if (tty->stopped) {
1272                 spin_unlock_irqrestore(&tty->ctrl_lock, flags);
1273                 return;
1274         }
1275         tty->stopped = 1;
1276         if (tty->link && tty->link->packet) {
1277                 tty->ctrl_status &= ~TIOCPKT_START;
1278                 tty->ctrl_status |= TIOCPKT_STOP;
1279                 wake_up_interruptible(&tty->link->read_wait);
1280         }
1281         spin_unlock_irqrestore(&tty->ctrl_lock, flags);
1282         if (tty->ops->stop)
1283                 (tty->ops->stop)(tty);
1284 }
1285
1286 EXPORT_SYMBOL(stop_tty);
1287
1288 /**
1289  *      start_tty       -       propagate flow control
1290  *      @tty: tty to start
1291  *
1292  *      Start a tty that has been stopped if at all possible. Perform
1293  *      any necessary wakeups and propagate the TIOCPKT status. If this
1294  *      is the tty was previous stopped and is being started then the
1295  *      driver start method is invoked and the line discipline woken.
1296  *
1297  *      Locking:
1298  *              ctrl_lock
1299  */
1300
1301 void start_tty(struct tty_struct *tty)
1302 {
1303         unsigned long flags;
1304         spin_lock_irqsave(&tty->ctrl_lock, flags);
1305         if (!tty->stopped || tty->flow_stopped) {
1306                 spin_unlock_irqrestore(&tty->ctrl_lock, flags);
1307                 return;
1308         }
1309         tty->stopped = 0;
1310         if (tty->link && tty->link->packet) {
1311                 tty->ctrl_status &= ~TIOCPKT_STOP;
1312                 tty->ctrl_status |= TIOCPKT_START;
1313                 wake_up_interruptible(&tty->link->read_wait);
1314         }
1315         spin_unlock_irqrestore(&tty->ctrl_lock, flags);
1316         if (tty->ops->start)
1317                 (tty->ops->start)(tty);
1318         /* If we have a running line discipline it may need kicking */
1319         tty_wakeup(tty);
1320 }
1321
1322 EXPORT_SYMBOL(start_tty);
1323
1324 /**
1325  *      tty_read        -       read method for tty device files
1326  *      @file: pointer to tty file
1327  *      @buf: user buffer
1328  *      @count: size of user buffer
1329  *      @ppos: unused
1330  *
1331  *      Perform the read system call function on this terminal device. Checks
1332  *      for hung up devices before calling the line discipline method.
1333  *
1334  *      Locking:
1335  *              Locks the line discipline internally while needed. Multiple
1336  *      read calls may be outstanding in parallel.
1337  */
1338
1339 static ssize_t tty_read(struct file *file, char __user *buf, size_t count,
1340                         loff_t *ppos)
1341 {
1342         int i;
1343         struct tty_struct *tty;
1344         struct inode *inode;
1345         struct tty_ldisc *ld;
1346
1347         tty = (struct tty_struct *)file->private_data;
1348         inode = file->f_path.dentry->d_inode;
1349         if (tty_paranoia_check(tty, inode, "tty_read"))
1350                 return -EIO;
1351         if (!tty || (test_bit(TTY_IO_ERROR, &tty->flags)))
1352                 return -EIO;
1353
1354         /* We want to wait for the line discipline to sort out in this
1355            situation */
1356         ld = tty_ldisc_ref_wait(tty);
1357         if (ld->ops->read)
1358                 i = (ld->ops->read)(tty, file, buf, count);
1359         else
1360                 i = -EIO;
1361         tty_ldisc_deref(ld);
1362         if (i > 0)
1363                 inode->i_atime = current_fs_time(inode->i_sb);
1364         return i;
1365 }
1366
1367 void tty_write_unlock(struct tty_struct *tty)
1368 {
1369         mutex_unlock(&tty->atomic_write_lock);
1370         wake_up_interruptible(&tty->write_wait);
1371 }
1372
1373 int tty_write_lock(struct tty_struct *tty, int ndelay)
1374 {
1375         if (!mutex_trylock(&tty->atomic_write_lock)) {
1376                 if (ndelay)
1377                         return -EAGAIN;
1378                 if (mutex_lock_interruptible(&tty->atomic_write_lock))
1379                         return -ERESTARTSYS;
1380         }
1381         return 0;
1382 }
1383
1384 /*
1385  * Split writes up in sane blocksizes to avoid
1386  * denial-of-service type attacks
1387  */
1388 static inline ssize_t do_tty_write(
1389         ssize_t (*write)(struct tty_struct *, struct file *, const unsigned char *, size_t),
1390         struct tty_struct *tty,
1391         struct file *file,
1392         const char __user *buf,
1393         size_t count)
1394 {
1395         ssize_t ret, written = 0;
1396         unsigned int chunk;
1397
1398         ret = tty_write_lock(tty, file->f_flags & O_NDELAY);
1399         if (ret < 0)
1400                 return ret;
1401
1402         /*
1403          * We chunk up writes into a temporary buffer. This
1404          * simplifies low-level drivers immensely, since they
1405          * don't have locking issues and user mode accesses.
1406          *
1407          * But if TTY_NO_WRITE_SPLIT is set, we should use a
1408          * big chunk-size..
1409          *
1410          * The default chunk-size is 2kB, because the NTTY
1411          * layer has problems with bigger chunks. It will
1412          * claim to be able to handle more characters than
1413          * it actually does.
1414          *
1415          * FIXME: This can probably go away now except that 64K chunks
1416          * are too likely to fail unless switched to vmalloc...
1417          */
1418         chunk = 2048;
1419         if (test_bit(TTY_NO_WRITE_SPLIT, &tty->flags))
1420                 chunk = 65536;
1421         if (count < chunk)
1422                 chunk = count;
1423
1424         /* write_buf/write_cnt is protected by the atomic_write_lock mutex */
1425         if (tty->write_cnt < chunk) {
1426                 unsigned char *buf;
1427
1428                 if (chunk < 1024)
1429                         chunk = 1024;
1430
1431                 buf = kmalloc(chunk, GFP_KERNEL);
1432                 if (!buf) {
1433                         ret = -ENOMEM;
1434                         goto out;
1435                 }
1436                 kfree(tty->write_buf);
1437                 tty->write_cnt = chunk;
1438                 tty->write_buf = buf;
1439         }
1440
1441         /* Do the write .. */
1442         for (;;) {
1443                 size_t size = count;
1444                 if (size > chunk)
1445                         size = chunk;
1446                 ret = -EFAULT;
1447                 if (copy_from_user(tty->write_buf, buf, size))
1448                         break;
1449                 ret = write(tty, file, tty->write_buf, size);
1450                 if (ret <= 0)
1451                         break;
1452                 written += ret;
1453                 buf += ret;
1454                 count -= ret;
1455                 if (!count)
1456                         break;
1457                 ret = -ERESTARTSYS;
1458                 if (signal_pending(current))
1459                         break;
1460                 cond_resched();
1461         }
1462         if (written) {
1463                 struct inode *inode = file->f_path.dentry->d_inode;
1464                 inode->i_mtime = current_fs_time(inode->i_sb);
1465                 ret = written;
1466         }
1467 out:
1468         tty_write_unlock(tty);
1469         return ret;
1470 }
1471
1472
1473 /**
1474  *      tty_write               -       write method for tty device file
1475  *      @file: tty file pointer
1476  *      @buf: user data to write
1477  *      @count: bytes to write
1478  *      @ppos: unused
1479  *
1480  *      Write data to a tty device via the line discipline.
1481  *
1482  *      Locking:
1483  *              Locks the line discipline as required
1484  *              Writes to the tty driver are serialized by the atomic_write_lock
1485  *      and are then processed in chunks to the device. The line discipline
1486  *      write method will not be involked in parallel for each device
1487  *              The line discipline write method is called under the big
1488  *      kernel lock for historical reasons. New code should not rely on this.
1489  */
1490
1491 static ssize_t tty_write(struct file *file, const char __user *buf,
1492                                                 size_t count, loff_t *ppos)
1493 {
1494         struct tty_struct *tty;
1495         struct inode *inode = file->f_path.dentry->d_inode;
1496         ssize_t ret;
1497         struct tty_ldisc *ld;
1498
1499         tty = (struct tty_struct *)file->private_data;
1500         if (tty_paranoia_check(tty, inode, "tty_write"))
1501                 return -EIO;
1502         if (!tty || !tty->ops->write ||
1503                 (test_bit(TTY_IO_ERROR, &tty->flags)))
1504                         return -EIO;
1505         /* Short term debug to catch buggy drivers */
1506         if (tty->ops->write_room == NULL)
1507                 printk(KERN_ERR "tty driver %s lacks a write_room method.\n",
1508                         tty->driver->name);
1509         ld = tty_ldisc_ref_wait(tty);
1510         if (!ld->ops->write)
1511                 ret = -EIO;
1512         else
1513                 ret = do_tty_write(ld->ops->write, tty, file, buf, count);
1514         tty_ldisc_deref(ld);
1515         return ret;
1516 }
1517
1518 ssize_t redirected_tty_write(struct file *file, const char __user *buf,
1519                                                 size_t count, loff_t *ppos)
1520 {
1521         struct file *p = NULL;
1522
1523         spin_lock(&redirect_lock);
1524         if (redirect) {
1525                 get_file(redirect);
1526                 p = redirect;
1527         }
1528         spin_unlock(&redirect_lock);
1529
1530         if (p) {
1531                 ssize_t res;
1532                 res = vfs_write(p, buf, count, &p->f_pos);
1533                 fput(p);
1534                 return res;
1535         }
1536         return tty_write(file, buf, count, ppos);
1537 }
1538
1539 void tty_port_init(struct tty_port *port)
1540 {
1541         memset(port, 0, sizeof(*port));
1542         init_waitqueue_head(&port->open_wait);
1543         init_waitqueue_head(&port->close_wait);
1544         mutex_init(&port->mutex);
1545         port->close_delay = (50 * HZ) / 100;
1546         port->closing_wait = (3000 * HZ) / 100;
1547 }
1548 EXPORT_SYMBOL(tty_port_init);
1549
1550 int tty_port_alloc_xmit_buf(struct tty_port *port)
1551 {
1552         /* We may sleep in get_zeroed_page() */
1553         mutex_lock(&port->mutex);
1554         if (port->xmit_buf == NULL)
1555                 port->xmit_buf = (unsigned char *)get_zeroed_page(GFP_KERNEL);
1556         mutex_unlock(&port->mutex);
1557         if (port->xmit_buf == NULL)
1558                 return -ENOMEM;
1559         return 0;
1560 }
1561 EXPORT_SYMBOL(tty_port_alloc_xmit_buf);
1562
1563 void tty_port_free_xmit_buf(struct tty_port *port)
1564 {
1565         mutex_lock(&port->mutex);
1566         if (port->xmit_buf != NULL) {
1567                 free_page((unsigned long)port->xmit_buf);
1568                 port->xmit_buf = NULL;
1569         }
1570         mutex_unlock(&port->mutex);
1571 }
1572 EXPORT_SYMBOL(tty_port_free_xmit_buf);
1573
1574
1575 static char ptychar[] = "pqrstuvwxyzabcde";
1576
1577 /**
1578  *      pty_line_name   -       generate name for a pty
1579  *      @driver: the tty driver in use
1580  *      @index: the minor number
1581  *      @p: output buffer of at least 6 bytes
1582  *
1583  *      Generate a name from a driver reference and write it to the output
1584  *      buffer.
1585  *
1586  *      Locking: None
1587  */
1588 static void pty_line_name(struct tty_driver *driver, int index, char *p)
1589 {
1590         int i = index + driver->name_base;
1591         /* ->name is initialized to "ttyp", but "tty" is expected */
1592         sprintf(p, "%s%c%x",
1593                 driver->subtype == PTY_TYPE_SLAVE ? "tty" : driver->name,
1594                 ptychar[i >> 4 & 0xf], i & 0xf);
1595 }
1596
1597 /**
1598  *      pty_line_name   -       generate name for a tty
1599  *      @driver: the tty driver in use
1600  *      @index: the minor number
1601  *      @p: output buffer of at least 7 bytes
1602  *
1603  *      Generate a name from a driver reference and write it to the output
1604  *      buffer.
1605  *
1606  *      Locking: None
1607  */
1608 static void tty_line_name(struct tty_driver *driver, int index, char *p)
1609 {
1610         sprintf(p, "%s%d", driver->name, index + driver->name_base);
1611 }
1612
1613 /**
1614  *      init_dev                -       initialise a tty device
1615  *      @driver: tty driver we are opening a device on
1616  *      @idx: device index
1617  *      @tty: returned tty structure
1618  *
1619  *      Prepare a tty device. This may not be a "new" clean device but
1620  *      could also be an active device. The pty drivers require special
1621  *      handling because of this.
1622  *
1623  *      Locking:
1624  *              The function is called under the tty_mutex, which
1625  *      protects us from the tty struct or driver itself going away.
1626  *
1627  *      On exit the tty device has the line discipline attached and
1628  *      a reference count of 1. If a pair was created for pty/tty use
1629  *      and the other was a pty master then it too has a reference count of 1.
1630  *
1631  * WSH 06/09/97: Rewritten to remove races and properly clean up after a
1632  * failed open.  The new code protects the open with a mutex, so it's
1633  * really quite straightforward.  The mutex locking can probably be
1634  * relaxed for the (most common) case of reopening a tty.
1635  */
1636
1637 static int init_dev(struct tty_driver *driver, int idx,
1638         struct tty_struct **ret_tty)
1639 {
1640         struct tty_struct *tty, *o_tty;
1641         struct ktermios *tp, **tp_loc, *o_tp, **o_tp_loc;
1642         struct ktermios *ltp, **ltp_loc, *o_ltp, **o_ltp_loc;
1643         int retval = 0;
1644
1645         /* check whether we're reopening an existing tty */
1646         if (driver->flags & TTY_DRIVER_DEVPTS_MEM) {
1647                 tty = devpts_get_tty(idx);
1648                 /*
1649                  * If we don't have a tty here on a slave open, it's because
1650                  * the master already started the close process and there's
1651                  * no relation between devpts file and tty anymore.
1652                  */
1653                 if (!tty && driver->subtype == PTY_TYPE_SLAVE) {
1654                         retval = -EIO;
1655                         goto end_init;
1656                 }
1657                 /*
1658                  * It's safe from now on because init_dev() is called with
1659                  * tty_mutex held and release_dev() won't change tty->count
1660                  * or tty->flags without having to grab tty_mutex
1661                  */
1662                 if (tty && driver->subtype == PTY_TYPE_MASTER)
1663                         tty = tty->link;
1664         } else {
1665                 tty = driver->ttys[idx];
1666         }
1667         if (tty) goto fast_track;
1668
1669         /*
1670          * First time open is complex, especially for PTY devices.
1671          * This code guarantees that either everything succeeds and the
1672          * TTY is ready for operation, or else the table slots are vacated
1673          * and the allocated memory released.  (Except that the termios
1674          * and locked termios may be retained.)
1675          */
1676
1677         if (!try_module_get(driver->owner)) {
1678                 retval = -ENODEV;
1679                 goto end_init;
1680         }
1681
1682         o_tty = NULL;
1683         tp = o_tp = NULL;
1684         ltp = o_ltp = NULL;
1685
1686         tty = alloc_tty_struct();
1687         if (!tty)
1688                 goto fail_no_mem;
1689         initialize_tty_struct(tty);
1690         tty->driver = driver;
1691         tty->ops = driver->ops;
1692         tty->index = idx;
1693         tty_line_name(driver, idx, tty->name);
1694
1695         if (driver->flags & TTY_DRIVER_DEVPTS_MEM) {
1696                 tp_loc = &tty->termios;
1697                 ltp_loc = &tty->termios_locked;
1698         } else {
1699                 tp_loc = &driver->termios[idx];
1700                 ltp_loc = &driver->termios_locked[idx];
1701         }
1702
1703         if (!*tp_loc) {
1704                 tp = kmalloc(sizeof(struct ktermios), GFP_KERNEL);
1705                 if (!tp)
1706                         goto free_mem_out;
1707                 *tp = driver->init_termios;
1708         }
1709
1710         if (!*ltp_loc) {
1711                 ltp = kzalloc(sizeof(struct ktermios), GFP_KERNEL);
1712                 if (!ltp)
1713                         goto free_mem_out;
1714         }
1715
1716         if (driver->type == TTY_DRIVER_TYPE_PTY) {
1717                 o_tty = alloc_tty_struct();
1718                 if (!o_tty)
1719                         goto free_mem_out;
1720                 initialize_tty_struct(o_tty);
1721                 o_tty->driver = driver->other;
1722                 o_tty->ops = driver->ops;
1723                 o_tty->index = idx;
1724                 tty_line_name(driver->other, idx, o_tty->name);
1725
1726                 if (driver->flags & TTY_DRIVER_DEVPTS_MEM) {
1727                         o_tp_loc = &o_tty->termios;
1728                         o_ltp_loc = &o_tty->termios_locked;
1729                 } else {
1730                         o_tp_loc = &driver->other->termios[idx];
1731                         o_ltp_loc = &driver->other->termios_locked[idx];
1732                 }
1733
1734                 if (!*o_tp_loc) {
1735                         o_tp = kmalloc(sizeof(struct ktermios), GFP_KERNEL);
1736                         if (!o_tp)
1737                                 goto free_mem_out;
1738                         *o_tp = driver->other->init_termios;
1739                 }
1740
1741                 if (!*o_ltp_loc) {
1742                         o_ltp = kzalloc(sizeof(struct ktermios), GFP_KERNEL);
1743                         if (!o_ltp)
1744                                 goto free_mem_out;
1745                 }
1746
1747                 /*
1748                  * Everything allocated ... set up the o_tty structure.
1749                  */
1750                 if (!(driver->other->flags & TTY_DRIVER_DEVPTS_MEM))
1751                         driver->other->ttys[idx] = o_tty;
1752                 if (!*o_tp_loc)
1753                         *o_tp_loc = o_tp;
1754                 if (!*o_ltp_loc)
1755                         *o_ltp_loc = o_ltp;
1756                 o_tty->termios = *o_tp_loc;
1757                 o_tty->termios_locked = *o_ltp_loc;
1758                 driver->other->refcount++;
1759                 if (driver->subtype == PTY_TYPE_MASTER)
1760                         o_tty->count++;
1761
1762                 /* Establish the links in both directions */
1763                 tty->link   = o_tty;
1764                 o_tty->link = tty;
1765         }
1766
1767         /*
1768          * All structures have been allocated, so now we install them.
1769          * Failures after this point use release_tty to clean up, so
1770          * there's no need to null out the local pointers.
1771          */
1772         if (!(driver->flags & TTY_DRIVER_DEVPTS_MEM))
1773                 driver->ttys[idx] = tty;
1774
1775         if (!*tp_loc)
1776                 *tp_loc = tp;
1777         if (!*ltp_loc)
1778                 *ltp_loc = ltp;
1779         tty->termios = *tp_loc;
1780         tty->termios_locked = *ltp_loc;
1781         /* Compatibility until drivers always set this */
1782         tty->termios->c_ispeed = tty_termios_input_baud_rate(tty->termios);
1783         tty->termios->c_ospeed = tty_termios_baud_rate(tty->termios);
1784         driver->refcount++;
1785         tty->count++;
1786
1787         /*
1788          * Structures all installed ... call the ldisc open routines.
1789          * If we fail here just call release_tty to clean up.  No need
1790          * to decrement the use counts, as release_tty doesn't care.
1791          */
1792
1793         retval = tty_ldisc_setup(tty, o_tty);
1794
1795         if (retval)
1796                 goto release_mem_out;
1797          goto success;
1798
1799         /*
1800          * This fast open can be used if the tty is already open.
1801          * No memory is allocated, and the only failures are from
1802          * attempting to open a closing tty or attempting multiple
1803          * opens on a pty master.
1804          */
1805 fast_track:
1806         if (test_bit(TTY_CLOSING, &tty->flags)) {
1807                 retval = -EIO;
1808                 goto end_init;
1809         }
1810         if (driver->type == TTY_DRIVER_TYPE_PTY &&
1811             driver->subtype == PTY_TYPE_MASTER) {
1812                 /*
1813                  * special case for PTY masters: only one open permitted,
1814                  * and the slave side open count is incremented as well.
1815                  */
1816                 if (tty->count) {
1817                         retval = -EIO;
1818                         goto end_init;
1819                 }
1820                 tty->link->count++;
1821         }
1822         tty->count++;
1823         tty->driver = driver; /* N.B. why do this every time?? */
1824
1825         /* FIXME */
1826         if (!test_bit(TTY_LDISC, &tty->flags))
1827                 printk(KERN_ERR "init_dev but no ldisc\n");
1828 success:
1829         *ret_tty = tty;
1830
1831         /* All paths come through here to release the mutex */
1832 end_init:
1833         return retval;
1834
1835         /* Release locally allocated memory ... nothing placed in slots */
1836 free_mem_out:
1837         kfree(o_tp);
1838         if (o_tty)
1839                 free_tty_struct(o_tty);
1840         kfree(ltp);
1841         kfree(tp);
1842         free_tty_struct(tty);
1843
1844 fail_no_mem:
1845         module_put(driver->owner);
1846         retval = -ENOMEM;
1847         goto end_init;
1848
1849         /* call the tty release_tty routine to clean out this slot */
1850 release_mem_out:
1851         if (printk_ratelimit())
1852                 printk(KERN_INFO "init_dev: ldisc open failed, "
1853                                  "clearing slot %d\n", idx);
1854         release_tty(tty, idx);
1855         goto end_init;
1856 }
1857
1858 /**
1859  *      release_one_tty         -       release tty structure memory
1860  *
1861  *      Releases memory associated with a tty structure, and clears out the
1862  *      driver table slots. This function is called when a device is no longer
1863  *      in use. It also gets called when setup of a device fails.
1864  *
1865  *      Locking:
1866  *              tty_mutex - sometimes only
1867  *              takes the file list lock internally when working on the list
1868  *      of ttys that the driver keeps.
1869  *              FIXME: should we require tty_mutex is held here ??
1870  */
1871 static void release_one_tty(struct tty_struct *tty, int idx)
1872 {
1873         int devpts = tty->driver->flags & TTY_DRIVER_DEVPTS_MEM;
1874         struct ktermios *tp;
1875
1876         if (!devpts)
1877                 tty->driver->ttys[idx] = NULL;
1878
1879         if (tty->driver->flags & TTY_DRIVER_RESET_TERMIOS) {
1880                 tp = tty->termios;
1881                 if (!devpts)
1882                         tty->driver->termios[idx] = NULL;
1883                 kfree(tp);
1884
1885                 tp = tty->termios_locked;
1886                 if (!devpts)
1887                         tty->driver->termios_locked[idx] = NULL;
1888                 kfree(tp);
1889         }
1890
1891
1892         tty->magic = 0;
1893         tty->driver->refcount--;
1894
1895         file_list_lock();
1896         list_del_init(&tty->tty_files);
1897         file_list_unlock();
1898
1899         free_tty_struct(tty);
1900 }
1901
1902 /**
1903  *      release_tty             -       release tty structure memory
1904  *
1905  *      Release both @tty and a possible linked partner (think pty pair),
1906  *      and decrement the refcount of the backing module.
1907  *
1908  *      Locking:
1909  *              tty_mutex - sometimes only
1910  *              takes the file list lock internally when working on the list
1911  *      of ttys that the driver keeps.
1912  *              FIXME: should we require tty_mutex is held here ??
1913  */
1914 static void release_tty(struct tty_struct *tty, int idx)
1915 {
1916         struct tty_driver *driver = tty->driver;
1917
1918         if (tty->link)
1919                 release_one_tty(tty->link, idx);
1920         release_one_tty(tty, idx);
1921         module_put(driver->owner);
1922 }
1923
1924 /*
1925  * Even releasing the tty structures is a tricky business.. We have
1926  * to be very careful that the structures are all released at the
1927  * same time, as interrupts might otherwise get the wrong pointers.
1928  *
1929  * WSH 09/09/97: rewritten to avoid some nasty race conditions that could
1930  * lead to double frees or releasing memory still in use.
1931  */
1932 static void release_dev(struct file *filp)
1933 {
1934         struct tty_struct *tty, *o_tty;
1935         int     pty_master, tty_closing, o_tty_closing, do_sleep;
1936         int     devpts;
1937         int     idx;
1938         char    buf[64];
1939
1940         tty = (struct tty_struct *)filp->private_data;
1941         if (tty_paranoia_check(tty, filp->f_path.dentry->d_inode,
1942                                                         "release_dev"))
1943                 return;
1944
1945         check_tty_count(tty, "release_dev");
1946
1947         tty_fasync(-1, filp, 0);
1948
1949         idx = tty->index;
1950         pty_master = (tty->driver->type == TTY_DRIVER_TYPE_PTY &&
1951                       tty->driver->subtype == PTY_TYPE_MASTER);
1952         devpts = (tty->driver->flags & TTY_DRIVER_DEVPTS_MEM) != 0;
1953         o_tty = tty->link;
1954
1955 #ifdef TTY_PARANOIA_CHECK
1956         if (idx < 0 || idx >= tty->driver->num) {
1957                 printk(KERN_DEBUG "release_dev: bad idx when trying to "
1958                                   "free (%s)\n", tty->name);
1959                 return;
1960         }
1961         if (!(tty->driver->flags & TTY_DRIVER_DEVPTS_MEM)) {
1962                 if (tty != tty->driver->ttys[idx]) {
1963                         printk(KERN_DEBUG "release_dev: driver.table[%d] not tty "
1964                                "for (%s)\n", idx, tty->name);
1965                         return;
1966                 }
1967                 if (tty->termios != tty->driver->termios[idx]) {
1968                         printk(KERN_DEBUG "release_dev: driver.termios[%d] not termios "
1969                                "for (%s)\n",
1970                                idx, tty->name);
1971                         return;
1972                 }
1973                 if (tty->termios_locked != tty->driver->termios_locked[idx]) {
1974                         printk(KERN_DEBUG "release_dev: driver.termios_locked[%d] not "
1975                                "termios_locked for (%s)\n",
1976                                idx, tty->name);
1977                         return;
1978                 }
1979         }
1980 #endif
1981
1982 #ifdef TTY_DEBUG_HANGUP
1983         printk(KERN_DEBUG "release_dev of %s (tty count=%d)...",
1984                tty_name(tty, buf), tty->count);
1985 #endif
1986
1987 #ifdef TTY_PARANOIA_CHECK
1988         if (tty->driver->other &&
1989              !(tty->driver->flags & TTY_DRIVER_DEVPTS_MEM)) {
1990                 if (o_tty != tty->driver->other->ttys[idx]) {
1991                         printk(KERN_DEBUG "release_dev: other->table[%d] "
1992                                           "not o_tty for (%s)\n",
1993                                idx, tty->name);
1994                         return;
1995                 }
1996                 if (o_tty->termios != tty->driver->other->termios[idx]) {
1997                         printk(KERN_DEBUG "release_dev: other->termios[%d] "
1998                                           "not o_termios for (%s)\n",
1999                                idx, tty->name);
2000                         return;
2001                 }
2002                 if (o_tty->termios_locked !=
2003                       tty->driver->other->termios_locked[idx]) {
2004                         printk(KERN_DEBUG "release_dev: other->termios_locked["
2005                                           "%d] not o_termios_locked for (%s)\n",
2006                                idx, tty->name);
2007                         return;
2008                 }
2009                 if (o_tty->link != tty) {
2010                         printk(KERN_DEBUG "release_dev: bad pty pointers\n");
2011                         return;
2012                 }
2013         }
2014 #endif
2015         if (tty->ops->close)
2016                 tty->ops->close(tty, filp);
2017
2018         /*
2019          * Sanity check: if tty->count is going to zero, there shouldn't be
2020          * any waiters on tty->read_wait or tty->write_wait.  We test the
2021          * wait queues and kick everyone out _before_ actually starting to
2022          * close.  This ensures that we won't block while releasing the tty
2023          * structure.
2024          *
2025          * The test for the o_tty closing is necessary, since the master and
2026          * slave sides may close in any order.  If the slave side closes out
2027          * first, its count will be one, since the master side holds an open.
2028          * Thus this test wouldn't be triggered at the time the slave closes,
2029          * so we do it now.
2030          *
2031          * Note that it's possible for the tty to be opened again while we're
2032          * flushing out waiters.  By recalculating the closing flags before
2033          * each iteration we avoid any problems.
2034          */
2035         while (1) {
2036                 /* Guard against races with tty->count changes elsewhere and
2037                    opens on /dev/tty */
2038
2039                 mutex_lock(&tty_mutex);
2040                 tty_closing = tty->count <= 1;
2041                 o_tty_closing = o_tty &&
2042                         (o_tty->count <= (pty_master ? 1 : 0));
2043                 do_sleep = 0;
2044
2045                 if (tty_closing) {
2046                         if (waitqueue_active(&tty->read_wait)) {
2047                                 wake_up(&tty->read_wait);
2048                                 do_sleep++;
2049                         }
2050                         if (waitqueue_active(&tty->write_wait)) {
2051                                 wake_up(&tty->write_wait);
2052                                 do_sleep++;
2053                         }
2054                 }
2055                 if (o_tty_closing) {
2056                         if (waitqueue_active(&o_tty->read_wait)) {
2057                                 wake_up(&o_tty->read_wait);
2058                                 do_sleep++;
2059                         }
2060                         if (waitqueue_active(&o_tty->write_wait)) {
2061                                 wake_up(&o_tty->write_wait);
2062                                 do_sleep++;
2063                         }
2064                 }
2065                 if (!do_sleep)
2066                         break;
2067
2068                 printk(KERN_WARNING "release_dev: %s: read/write wait queue "
2069                                     "active!\n", tty_name(tty, buf));
2070                 mutex_unlock(&tty_mutex);
2071                 schedule();
2072         }
2073
2074         /*
2075          * The closing flags are now consistent with the open counts on
2076          * both sides, and we've completed the last operation that could
2077          * block, so it's safe to proceed with closing.
2078          */
2079         if (pty_master) {
2080                 if (--o_tty->count < 0) {
2081                         printk(KERN_WARNING "release_dev: bad pty slave count "
2082                                             "(%d) for %s\n",
2083                                o_tty->count, tty_name(o_tty, buf));
2084                         o_tty->count = 0;
2085                 }
2086         }
2087         if (--tty->count < 0) {
2088                 printk(KERN_WARNING "release_dev: bad tty->count (%d) for %s\n",
2089                        tty->count, tty_name(tty, buf));
2090                 tty->count = 0;
2091         }
2092
2093         /*
2094          * We've decremented tty->count, so we need to remove this file
2095          * descriptor off the tty->tty_files list; this serves two
2096          * purposes:
2097          *  - check_tty_count sees the correct number of file descriptors
2098          *    associated with this tty.
2099          *  - do_tty_hangup no longer sees this file descriptor as
2100          *    something that needs to be handled for hangups.
2101          */
2102         file_kill(filp);
2103         filp->private_data = NULL;
2104
2105         /*
2106          * Perform some housekeeping before deciding whether to return.
2107          *
2108          * Set the TTY_CLOSING flag if this was the last open.  In the
2109          * case of a pty we may have to wait around for the other side
2110          * to close, and TTY_CLOSING makes sure we can't be reopened.
2111          */
2112         if (tty_closing)
2113                 set_bit(TTY_CLOSING, &tty->flags);
2114         if (o_tty_closing)
2115                 set_bit(TTY_CLOSING, &o_tty->flags);
2116
2117         /*
2118          * If _either_ side is closing, make sure there aren't any
2119          * processes that still think tty or o_tty is their controlling
2120          * tty.
2121          */
2122         if (tty_closing || o_tty_closing) {
2123                 read_lock(&tasklist_lock);
2124                 session_clear_tty(tty->session);
2125                 if (o_tty)
2126                         session_clear_tty(o_tty->session);
2127                 read_unlock(&tasklist_lock);
2128         }
2129
2130         mutex_unlock(&tty_mutex);
2131
2132         /* check whether both sides are closing ... */
2133         if (!tty_closing || (o_tty && !o_tty_closing))
2134                 return;
2135
2136 #ifdef TTY_DEBUG_HANGUP
2137         printk(KERN_DEBUG "freeing tty structure...");
2138 #endif
2139         /*
2140          * Ask the line discipline code to release its structures
2141          */
2142         tty_ldisc_release(tty, o_tty);
2143         /*
2144          * The release_tty function takes care of the details of clearing
2145          * the slots and preserving the termios structure.
2146          */
2147         release_tty(tty, idx);
2148
2149         /* Make this pty number available for reallocation */
2150         if (devpts)
2151                 devpts_kill_index(idx);
2152 }
2153
2154 /**
2155  *      tty_open                -       open a tty device
2156  *      @inode: inode of device file
2157  *      @filp: file pointer to tty
2158  *
2159  *      tty_open and tty_release keep up the tty count that contains the
2160  *      number of opens done on a tty. We cannot use the inode-count, as
2161  *      different inodes might point to the same tty.
2162  *
2163  *      Open-counting is needed for pty masters, as well as for keeping
2164  *      track of serial lines: DTR is dropped when the last close happens.
2165  *      (This is not done solely through tty->count, now.  - Ted 1/27/92)
2166  *
2167  *      The termios state of a pty is reset on first open so that
2168  *      settings don't persist across reuse.
2169  *
2170  *      Locking: tty_mutex protects tty, get_tty_driver and init_dev work.
2171  *               tty->count should protect the rest.
2172  *               ->siglock protects ->signal/->sighand
2173  */
2174
2175 static int __tty_open(struct inode *inode, struct file *filp)
2176 {
2177         struct tty_struct *tty;
2178         int noctty, retval;
2179         struct tty_driver *driver;
2180         int index;
2181         dev_t device = inode->i_rdev;
2182         unsigned short saved_flags = filp->f_flags;
2183
2184         nonseekable_open(inode, filp);
2185
2186 retry_open:
2187         noctty = filp->f_flags & O_NOCTTY;
2188         index  = -1;
2189         retval = 0;
2190
2191         mutex_lock(&tty_mutex);
2192
2193         if (device == MKDEV(TTYAUX_MAJOR, 0)) {
2194                 tty = get_current_tty();
2195                 if (!tty) {
2196                         mutex_unlock(&tty_mutex);
2197                         return -ENXIO;
2198                 }
2199                 driver = tty->driver;
2200                 index = tty->index;
2201                 filp->f_flags |= O_NONBLOCK; /* Don't let /dev/tty block */
2202                 /* noctty = 1; */
2203                 goto got_driver;
2204         }
2205 #ifdef CONFIG_VT
2206         if (device == MKDEV(TTY_MAJOR, 0)) {
2207                 extern struct tty_driver *console_driver;
2208                 driver = console_driver;
2209                 index = fg_console;
2210                 noctty = 1;
2211                 goto got_driver;
2212         }
2213 #endif
2214         if (device == MKDEV(TTYAUX_MAJOR, 1)) {
2215                 driver = console_device(&index);
2216                 if (driver) {
2217                         /* Don't let /dev/console block */
2218                         filp->f_flags |= O_NONBLOCK;
2219                         noctty = 1;
2220                         goto got_driver;
2221                 }
2222                 mutex_unlock(&tty_mutex);
2223                 return -ENODEV;
2224         }
2225
2226         driver = get_tty_driver(device, &index);
2227         if (!driver) {
2228                 mutex_unlock(&tty_mutex);
2229                 return -ENODEV;
2230         }
2231 got_driver:
2232         retval = init_dev(driver, index, &tty);
2233         mutex_unlock(&tty_mutex);
2234         if (retval)
2235                 return retval;
2236
2237         filp->private_data = tty;
2238         file_move(filp, &tty->tty_files);
2239         check_tty_count(tty, "tty_open");
2240         if (tty->driver->type == TTY_DRIVER_TYPE_PTY &&
2241             tty->driver->subtype == PTY_TYPE_MASTER)
2242                 noctty = 1;
2243 #ifdef TTY_DEBUG_HANGUP
2244         printk(KERN_DEBUG "opening %s...", tty->name);
2245 #endif
2246         if (!retval) {
2247                 if (tty->ops->open)
2248                         retval = tty->ops->open(tty, filp);
2249                 else
2250                         retval = -ENODEV;
2251         }
2252         filp->f_flags = saved_flags;
2253
2254         if (!retval && test_bit(TTY_EXCLUSIVE, &tty->flags) &&
2255                                                 !capable(CAP_SYS_ADMIN))
2256                 retval = -EBUSY;
2257
2258         if (retval) {
2259 #ifdef TTY_DEBUG_HANGUP
2260                 printk(KERN_DEBUG "error %d in opening %s...", retval,
2261                        tty->name);
2262 #endif
2263                 release_dev(filp);
2264                 if (retval != -ERESTARTSYS)
2265                         return retval;
2266                 if (signal_pending(current))
2267                         return retval;
2268                 schedule();
2269                 /*
2270                  * Need to reset f_op in case a hangup happened.
2271                  */
2272                 if (filp->f_op == &hung_up_tty_fops)
2273                         filp->f_op = &tty_fops;
2274                 goto retry_open;
2275         }
2276
2277         mutex_lock(&tty_mutex);
2278         spin_lock_irq(&current->sighand->siglock);
2279         if (!noctty &&
2280             current->signal->leader &&
2281             !current->signal->tty &&
2282             tty->session == NULL)
2283                 __proc_set_tty(current, tty);
2284         spin_unlock_irq(&current->sighand->siglock);
2285         mutex_unlock(&tty_mutex);
2286         return 0;
2287 }
2288
2289 /* BKL pushdown: scary code avoidance wrapper */
2290 static int tty_open(struct inode *inode, struct file *filp)
2291 {
2292         int ret;
2293
2294         lock_kernel();
2295         ret = __tty_open(inode, filp);
2296         unlock_kernel();
2297         return ret;
2298 }
2299
2300
2301
2302 #ifdef CONFIG_UNIX98_PTYS
2303 /**
2304  *      ptmx_open               -       open a unix 98 pty master
2305  *      @inode: inode of device file
2306  *      @filp: file pointer to tty
2307  *
2308  *      Allocate a unix98 pty master device from the ptmx driver.
2309  *
2310  *      Locking: tty_mutex protects theinit_dev work. tty->count should
2311  *              protect the rest.
2312  *              allocated_ptys_lock handles the list of free pty numbers
2313  */
2314
2315 static int __ptmx_open(struct inode *inode, struct file *filp)
2316 {
2317         struct tty_struct *tty;
2318         int retval;
2319         int index;
2320
2321         nonseekable_open(inode, filp);
2322
2323         /* find a device that is not in use. */
2324         index = devpts_new_index();
2325         if (index < 0)
2326                 return index;
2327
2328         mutex_lock(&tty_mutex);
2329         retval = init_dev(ptm_driver, index, &tty);
2330         mutex_unlock(&tty_mutex);
2331
2332         if (retval)
2333                 goto out;
2334
2335         set_bit(TTY_PTY_LOCK, &tty->flags); /* LOCK THE SLAVE */
2336         filp->private_data = tty;
2337         file_move(filp, &tty->tty_files);
2338
2339         retval = devpts_pty_new(tty->link);
2340         if (retval)
2341                 goto out1;
2342
2343         check_tty_count(tty, "ptmx_open");
2344         retval = ptm_driver->ops->open(tty, filp);
2345         if (!retval)
2346                 return 0;
2347 out1:
2348         release_dev(filp);
2349         return retval;
2350 out:
2351         devpts_kill_index(index);
2352         return retval;
2353 }
2354
2355 static int ptmx_open(struct inode *inode, struct file *filp)
2356 {
2357         int ret;
2358
2359         lock_kernel();
2360         ret = __ptmx_open(inode, filp);
2361         unlock_kernel();
2362         return ret;
2363 }
2364 #endif
2365
2366 /**
2367  *      tty_release             -       vfs callback for close
2368  *      @inode: inode of tty
2369  *      @filp: file pointer for handle to tty
2370  *
2371  *      Called the last time each file handle is closed that references
2372  *      this tty. There may however be several such references.
2373  *
2374  *      Locking:
2375  *              Takes bkl. See release_dev
2376  */
2377
2378 static int tty_release(struct inode *inode, struct file *filp)
2379 {
2380         lock_kernel();
2381         release_dev(filp);
2382         unlock_kernel();
2383         return 0;
2384 }
2385
2386 /**
2387  *      tty_poll        -       check tty status
2388  *      @filp: file being polled
2389  *      @wait: poll wait structures to update
2390  *
2391  *      Call the line discipline polling method to obtain the poll
2392  *      status of the device.
2393  *
2394  *      Locking: locks called line discipline but ldisc poll method
2395  *      may be re-entered freely by other callers.
2396  */
2397
2398 static unsigned int tty_poll(struct file *filp, poll_table *wait)
2399 {
2400         struct tty_struct *tty;
2401         struct tty_ldisc *ld;
2402         int ret = 0;
2403
2404         tty = (struct tty_struct *)filp->private_data;
2405         if (tty_paranoia_check(tty, filp->f_path.dentry->d_inode, "tty_poll"))
2406                 return 0;
2407
2408         ld = tty_ldisc_ref_wait(tty);
2409         if (ld->ops->poll)
2410                 ret = (ld->ops->poll)(tty, filp, wait);
2411         tty_ldisc_deref(ld);
2412         return ret;
2413 }
2414
2415 static int tty_fasync(int fd, struct file *filp, int on)
2416 {
2417         struct tty_struct *tty;
2418         unsigned long flags;
2419         int retval = 0;
2420
2421         lock_kernel();
2422         tty = (struct tty_struct *)filp->private_data;
2423         if (tty_paranoia_check(tty, filp->f_path.dentry->d_inode, "tty_fasync"))
2424                 goto out;
2425
2426         retval = fasync_helper(fd, filp, on, &tty->fasync);
2427         if (retval <= 0)
2428                 goto out;
2429
2430         if (on) {
2431                 enum pid_type type;
2432                 struct pid *pid;
2433                 if (!waitqueue_active(&tty->read_wait))
2434                         tty->minimum_to_wake = 1;
2435                 spin_lock_irqsave(&tty->ctrl_lock, flags);
2436                 if (tty->pgrp) {
2437                         pid = tty->pgrp;
2438                         type = PIDTYPE_PGID;
2439                 } else {
2440                         pid = task_pid(current);
2441                         type = PIDTYPE_PID;
2442                 }
2443                 spin_unlock_irqrestore(&tty->ctrl_lock, flags);
2444                 retval = __f_setown(filp, pid, type, 0);
2445                 if (retval)
2446                         goto out;
2447         } else {
2448                 if (!tty->fasync && !waitqueue_active(&tty->read_wait))
2449                         tty->minimum_to_wake = N_TTY_BUF_SIZE;
2450         }
2451         retval = 0;
2452 out:
2453         unlock_kernel();
2454         return retval;
2455 }
2456
2457 /**
2458  *      tiocsti                 -       fake input character
2459  *      @tty: tty to fake input into
2460  *      @p: pointer to character
2461  *
2462  *      Fake input to a tty device. Does the necessary locking and
2463  *      input management.
2464  *
2465  *      FIXME: does not honour flow control ??
2466  *
2467  *      Locking:
2468  *              Called functions take tty_ldisc_lock
2469  *              current->signal->tty check is safe without locks
2470  *
2471  *      FIXME: may race normal receive processing
2472  */
2473
2474 static int tiocsti(struct tty_struct *tty, char __user *p)
2475 {
2476         char ch, mbz = 0;
2477         struct tty_ldisc *ld;
2478
2479         if ((current->signal->tty != tty) && !capable(CAP_SYS_ADMIN))
2480                 return -EPERM;
2481         if (get_user(ch, p))
2482                 return -EFAULT;
2483         ld = tty_ldisc_ref_wait(tty);
2484         ld->ops->receive_buf(tty, &ch, &mbz, 1);
2485         tty_ldisc_deref(ld);
2486         return 0;
2487 }
2488
2489 /**
2490  *      tiocgwinsz              -       implement window query ioctl
2491  *      @tty; tty
2492  *      @arg: user buffer for result
2493  *
2494  *      Copies the kernel idea of the window size into the user buffer.
2495  *
2496  *      Locking: tty->termios_mutex is taken to ensure the winsize data
2497  *              is consistent.
2498  */
2499
2500 static int tiocgwinsz(struct tty_struct *tty, struct winsize __user *arg)
2501 {
2502         int err;
2503
2504         mutex_lock(&tty->termios_mutex);
2505         err = copy_to_user(arg, &tty->winsize, sizeof(*arg));
2506         mutex_unlock(&tty->termios_mutex);
2507
2508         return err ? -EFAULT: 0;
2509 }
2510
2511 /**
2512  *      tiocswinsz              -       implement window size set ioctl
2513  *      @tty; tty
2514  *      @arg: user buffer for result
2515  *
2516  *      Copies the user idea of the window size to the kernel. Traditionally
2517  *      this is just advisory information but for the Linux console it
2518  *      actually has driver level meaning and triggers a VC resize.
2519  *
2520  *      Locking:
2521  *              Called function use the console_sem is used to ensure we do
2522  *      not try and resize the console twice at once.
2523  *              The tty->termios_mutex is used to ensure we don't double
2524  *      resize and get confused. Lock order - tty->termios_mutex before
2525  *      console sem
2526  */
2527
2528 static int tiocswinsz(struct tty_struct *tty, struct tty_struct *real_tty,
2529         struct winsize __user *arg)
2530 {
2531         struct winsize tmp_ws;
2532         struct pid *pgrp, *rpgrp;
2533         unsigned long flags;
2534
2535         if (copy_from_user(&tmp_ws, arg, sizeof(*arg)))
2536                 return -EFAULT;
2537
2538         mutex_lock(&tty->termios_mutex);
2539         if (!memcmp(&tmp_ws, &tty->winsize, sizeof(*arg)))
2540                 goto done;
2541
2542 #ifdef CONFIG_VT
2543         if (tty->driver->type == TTY_DRIVER_TYPE_CONSOLE) {
2544                 if (vc_lock_resize(tty->driver_data, tmp_ws.ws_col,
2545                                         tmp_ws.ws_row)) {
2546                         mutex_unlock(&tty->termios_mutex);
2547                         return -ENXIO;
2548                 }
2549         }
2550 #endif
2551         /* Get the PID values and reference them so we can
2552            avoid holding the tty ctrl lock while sending signals */
2553         spin_lock_irqsave(&tty->ctrl_lock, flags);
2554         pgrp = get_pid(tty->pgrp);
2555         rpgrp = get_pid(real_tty->pgrp);
2556         spin_unlock_irqrestore(&tty->ctrl_lock, flags);
2557
2558         if (pgrp)
2559                 kill_pgrp(pgrp, SIGWINCH, 1);
2560         if (rpgrp != pgrp && rpgrp)
2561                 kill_pgrp(rpgrp, SIGWINCH, 1);
2562
2563         put_pid(pgrp);
2564         put_pid(rpgrp);
2565
2566         tty->winsize = tmp_ws;
2567         real_tty->winsize = tmp_ws;
2568 done:
2569         mutex_unlock(&tty->termios_mutex);
2570         return 0;
2571 }
2572
2573 /**
2574  *      tioccons        -       allow admin to move logical console
2575  *      @file: the file to become console
2576  *
2577  *      Allow the adminstrator to move the redirected console device
2578  *
2579  *      Locking: uses redirect_lock to guard the redirect information
2580  */
2581
2582 static int tioccons(struct file *file)
2583 {
2584         if (!capable(CAP_SYS_ADMIN))
2585                 return -EPERM;
2586         if (file->f_op->write == redirected_tty_write) {
2587                 struct file *f;
2588                 spin_lock(&redirect_lock);
2589                 f = redirect;
2590                 redirect = NULL;
2591                 spin_unlock(&redirect_lock);
2592                 if (f)
2593                         fput(f);
2594                 return 0;
2595         }
2596         spin_lock(&redirect_lock);
2597         if (redirect) {
2598                 spin_unlock(&redirect_lock);
2599                 return -EBUSY;
2600         }
2601         get_file(file);
2602         redirect = file;
2603         spin_unlock(&redirect_lock);
2604         return 0;
2605 }
2606
2607 /**
2608  *      fionbio         -       non blocking ioctl
2609  *      @file: file to set blocking value
2610  *      @p: user parameter
2611  *
2612  *      Historical tty interfaces had a blocking control ioctl before
2613  *      the generic functionality existed. This piece of history is preserved
2614  *      in the expected tty API of posix OS's.
2615  *
2616  *      Locking: none, the open fle handle ensures it won't go away.
2617  */
2618
2619 static int fionbio(struct file *file, int __user *p)
2620 {
2621         int nonblock;
2622
2623         if (get_user(nonblock, p))
2624                 return -EFAULT;
2625
2626         /* file->f_flags is still BKL protected in the fs layer - vomit */
2627         lock_kernel();
2628         if (nonblock)
2629                 file->f_flags |= O_NONBLOCK;
2630         else
2631                 file->f_flags &= ~O_NONBLOCK;
2632         unlock_kernel();
2633         return 0;
2634 }
2635
2636 /**
2637  *      tiocsctty       -       set controlling tty
2638  *      @tty: tty structure
2639  *      @arg: user argument
2640  *
2641  *      This ioctl is used to manage job control. It permits a session
2642  *      leader to set this tty as the controlling tty for the session.
2643  *
2644  *      Locking:
2645  *              Takes tty_mutex() to protect tty instance
2646  *              Takes tasklist_lock internally to walk sessions
2647  *              Takes ->siglock() when updating signal->tty
2648  */
2649
2650 static int tiocsctty(struct tty_struct *tty, int arg)
2651 {
2652         int ret = 0;
2653         if (current->signal->leader && (task_session(current) == tty->session))
2654                 return ret;
2655
2656         mutex_lock(&tty_mutex);
2657         /*
2658          * The process must be a session leader and
2659          * not have a controlling tty already.
2660          */
2661         if (!current->signal->leader || current->signal->tty) {
2662                 ret = -EPERM;
2663                 goto unlock;
2664         }
2665
2666         if (tty->session) {
2667                 /*
2668                  * This tty is already the controlling
2669                  * tty for another session group!
2670                  */
2671                 if (arg == 1 && capable(CAP_SYS_ADMIN)) {
2672                         /*
2673                          * Steal it away
2674                          */
2675                         read_lock(&tasklist_lock);
2676                         session_clear_tty(tty->session);
2677                         read_unlock(&tasklist_lock);
2678                 } else {
2679                         ret = -EPERM;
2680                         goto unlock;
2681                 }
2682         }
2683         proc_set_tty(current, tty);
2684 unlock:
2685         mutex_unlock(&tty_mutex);
2686         return ret;
2687 }
2688
2689 /**
2690  *      tty_get_pgrp    -       return a ref counted pgrp pid
2691  *      @tty: tty to read
2692  *
2693  *      Returns a refcounted instance of the pid struct for the process
2694  *      group controlling the tty.
2695  */
2696
2697 struct pid *tty_get_pgrp(struct tty_struct *tty)
2698 {
2699         unsigned long flags;
2700         struct pid *pgrp;
2701
2702         spin_lock_irqsave(&tty->ctrl_lock, flags);
2703         pgrp = get_pid(tty->pgrp);
2704         spin_unlock_irqrestore(&tty->ctrl_lock, flags);
2705
2706         return pgrp;
2707 }
2708 EXPORT_SYMBOL_GPL(tty_get_pgrp);
2709
2710 /**
2711  *      tiocgpgrp               -       get process group
2712  *      @tty: tty passed by user
2713  *      @real_tty: tty side of the tty pased by the user if a pty else the tty
2714  *      @p: returned pid
2715  *
2716  *      Obtain the process group of the tty. If there is no process group
2717  *      return an error.
2718  *
2719  *      Locking: none. Reference to current->signal->tty is safe.
2720  */
2721
2722 static int tiocgpgrp(struct tty_struct *tty, struct tty_struct *real_tty, pid_t __user *p)
2723 {
2724         struct pid *pid;
2725         int ret;
2726         /*
2727          * (tty == real_tty) is a cheap way of
2728          * testing if the tty is NOT a master pty.
2729          */
2730         if (tty == real_tty && current->signal->tty != real_tty)
2731                 return -ENOTTY;
2732         pid = tty_get_pgrp(real_tty);
2733         ret =  put_user(pid_vnr(pid), p);
2734         put_pid(pid);
2735         return ret;
2736 }
2737
2738 /**
2739  *      tiocspgrp               -       attempt to set process group
2740  *      @tty: tty passed by user
2741  *      @real_tty: tty side device matching tty passed by user
2742  *      @p: pid pointer
2743  *
2744  *      Set the process group of the tty to the session passed. Only
2745  *      permitted where the tty session is our session.
2746  *
2747  *      Locking: RCU, ctrl lock
2748  */
2749
2750 static int tiocspgrp(struct tty_struct *tty, struct tty_struct *real_tty, pid_t __user *p)
2751 {
2752         struct pid *pgrp;
2753         pid_t pgrp_nr;
2754         int retval = tty_check_change(real_tty);
2755         unsigned long flags;
2756
2757         if (retval == -EIO)
2758                 return -ENOTTY;
2759         if (retval)
2760                 return retval;
2761         if (!current->signal->tty ||
2762             (current->signal->tty != real_tty) ||
2763             (real_tty->session != task_session(current)))
2764                 return -ENOTTY;
2765         if (get_user(pgrp_nr, p))
2766                 return -EFAULT;
2767         if (pgrp_nr < 0)
2768                 return -EINVAL;
2769         rcu_read_lock();
2770         pgrp = find_vpid(pgrp_nr);
2771         retval = -ESRCH;
2772         if (!pgrp)
2773                 goto out_unlock;
2774         retval = -EPERM;
2775         if (session_of_pgrp(pgrp) != task_session(current))
2776                 goto out_unlock;
2777         retval = 0;
2778         spin_lock_irqsave(&tty->ctrl_lock, flags);
2779         put_pid(real_tty->pgrp);
2780         real_tty->pgrp = get_pid(pgrp);
2781         spin_unlock_irqrestore(&tty->ctrl_lock, flags);
2782 out_unlock:
2783         rcu_read_unlock();
2784         return retval;
2785 }
2786
2787 /**
2788  *      tiocgsid                -       get session id
2789  *      @tty: tty passed by user
2790  *      @real_tty: tty side of the tty pased by the user if a pty else the tty
2791  *      @p: pointer to returned session id
2792  *
2793  *      Obtain the session id of the tty. If there is no session
2794  *      return an error.
2795  *
2796  *      Locking: none. Reference to current->signal->tty is safe.
2797  */
2798
2799 static int tiocgsid(struct tty_struct *tty, struct tty_struct *real_tty, pid_t __user *p)
2800 {
2801         /*
2802          * (tty == real_tty) is a cheap way of
2803          * testing if the tty is NOT a master pty.
2804         */
2805         if (tty == real_tty && current->signal->tty != real_tty)
2806                 return -ENOTTY;
2807         if (!real_tty->session)
2808                 return -ENOTTY;
2809         return put_user(pid_vnr(real_tty->session), p);
2810 }
2811
2812 /**
2813  *      tiocsetd        -       set line discipline
2814  *      @tty: tty device
2815  *      @p: pointer to user data
2816  *
2817  *      Set the line discipline according to user request.
2818  *
2819  *      Locking: see tty_set_ldisc, this function is just a helper
2820  */
2821
2822 static int tiocsetd(struct tty_struct *tty, int __user *p)
2823 {
2824         int ldisc;
2825         int ret;
2826
2827         if (get_user(ldisc, p))
2828                 return -EFAULT;
2829
2830         lock_kernel();
2831         ret = tty_set_ldisc(tty, ldisc);
2832         unlock_kernel();
2833
2834         return ret;
2835 }
2836
2837 /**
2838  *      send_break      -       performed time break
2839  *      @tty: device to break on
2840  *      @duration: timeout in mS
2841  *
2842  *      Perform a timed break on hardware that lacks its own driver level
2843  *      timed break functionality.
2844  *
2845  *      Locking:
2846  *              atomic_write_lock serializes
2847  *
2848  */
2849
2850 static int send_break(struct tty_struct *tty, unsigned int duration)
2851 {
2852         int retval;
2853
2854         if (tty->ops->break_ctl == NULL)
2855                 return 0;
2856
2857         if (tty->driver->flags & TTY_DRIVER_HARDWARE_BREAK)
2858                 retval = tty->ops->break_ctl(tty, duration);
2859         else {
2860                 /* Do the work ourselves */
2861                 if (tty_write_lock(tty, 0) < 0)
2862                         return -EINTR;
2863                 retval = tty->ops->break_ctl(tty, -1);
2864                 if (retval)
2865                         goto out;
2866                 if (!signal_pending(current))
2867                         msleep_interruptible(duration);
2868                 retval = tty->ops->break_ctl(tty, 0);
2869 out:
2870                 tty_write_unlock(tty);
2871                 if (signal_pending(current))
2872                         retval = -EINTR;
2873         }
2874         return retval;
2875 }
2876
2877 /**
2878  *      tty_tiocmget            -       get modem status
2879  *      @tty: tty device
2880  *      @file: user file pointer
2881  *      @p: pointer to result
2882  *
2883  *      Obtain the modem status bits from the tty driver if the feature
2884  *      is supported. Return -EINVAL if it is not available.
2885  *
2886  *      Locking: none (up to the driver)
2887  */
2888
2889 static int tty_tiocmget(struct tty_struct *tty, struct file *file, int __user *p)
2890 {
2891         int retval = -EINVAL;
2892
2893         if (tty->ops->tiocmget) {
2894                 retval = tty->ops->tiocmget(tty, file);
2895
2896                 if (retval >= 0)
2897                         retval = put_user(retval, p);
2898         }
2899         return retval;
2900 }
2901
2902 /**
2903  *      tty_tiocmset            -       set modem status
2904  *      @tty: tty device
2905  *      @file: user file pointer
2906  *      @cmd: command - clear bits, set bits or set all
2907  *      @p: pointer to desired bits
2908  *
2909  *      Set the modem status bits from the tty driver if the feature
2910  *      is supported. Return -EINVAL if it is not available.
2911  *
2912  *      Locking: none (up to the driver)
2913  */
2914
2915 static int tty_tiocmset(struct tty_struct *tty, struct file *file, unsigned int cmd,
2916              unsigned __user *p)
2917 {
2918         int retval;
2919         unsigned int set, clear, val;
2920
2921         if (tty->ops->tiocmset == NULL)
2922                 return -EINVAL;
2923
2924         retval = get_user(val, p);
2925         if (retval)
2926                 return retval;
2927         set = clear = 0;
2928         switch (cmd) {
2929         case TIOCMBIS:
2930                 set = val;
2931                 break;
2932         case TIOCMBIC:
2933                 clear = val;
2934                 break;
2935         case TIOCMSET:
2936                 set = val;
2937                 clear = ~val;
2938                 break;
2939         }
2940         set &= TIOCM_DTR|TIOCM_RTS|TIOCM_OUT1|TIOCM_OUT2|TIOCM_LOOP;
2941         clear &= TIOCM_DTR|TIOCM_RTS|TIOCM_OUT1|TIOCM_OUT2|TIOCM_LOOP;
2942         return tty->ops->tiocmset(tty, file, set, clear);
2943 }
2944
2945 /*
2946  * Split this up, as gcc can choke on it otherwise..
2947  */
2948 long tty_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
2949 {
2950         struct tty_struct *tty, *real_tty;
2951         void __user *p = (void __user *)arg;
2952         int retval;
2953         struct tty_ldisc *ld;
2954         struct inode *inode = file->f_dentry->d_inode;
2955
2956         tty = (struct tty_struct *)file->private_data;
2957         if (tty_paranoia_check(tty, inode, "tty_ioctl"))
2958                 return -EINVAL;
2959
2960         real_tty = tty;
2961         if (tty->driver->type == TTY_DRIVER_TYPE_PTY &&
2962             tty->driver->subtype == PTY_TYPE_MASTER)
2963                 real_tty = tty->link;
2964
2965
2966         /*
2967          * Factor out some common prep work
2968          */
2969         switch (cmd) {
2970         case TIOCSETD:
2971         case TIOCSBRK:
2972         case TIOCCBRK:
2973         case TCSBRK:
2974         case TCSBRKP:
2975                 retval = tty_check_change(tty);
2976                 if (retval)
2977                         return retval;
2978                 if (cmd != TIOCCBRK) {
2979                         tty_wait_until_sent(tty, 0);
2980                         if (signal_pending(current))
2981                                 return -EINTR;
2982                 }
2983                 break;
2984         }
2985
2986         /*
2987          *      Now do the stuff.
2988          */
2989         switch (cmd) {
2990         case TIOCSTI:
2991                 return tiocsti(tty, p);
2992         case TIOCGWINSZ:
2993                 return tiocgwinsz(tty, p);
2994         case TIOCSWINSZ:
2995                 return tiocswinsz(tty, real_tty, p);
2996         case TIOCCONS:
2997                 return real_tty != tty ? -EINVAL : tioccons(file);
2998         case FIONBIO:
2999                 return fionbio(file, p);
3000         case TIOCEXCL:
3001                 set_bit(TTY_EXCLUSIVE, &tty->flags);
3002                 return 0;
3003         case TIOCNXCL:
3004                 clear_bit(TTY_EXCLUSIVE, &tty->flags);
3005                 return 0;
3006         case TIOCNOTTY:
3007                 if (current->signal->tty != tty)
3008                         return -ENOTTY;
3009                 no_tty();
3010                 return 0;
3011         case TIOCSCTTY:
3012                 return tiocsctty(tty, arg);
3013         case TIOCGPGRP:
3014                 return tiocgpgrp(tty, real_tty, p);
3015         case TIOCSPGRP:
3016                 return tiocspgrp(tty, real_tty, p);
3017         case TIOCGSID:
3018                 return tiocgsid(tty, real_tty, p);
3019         case TIOCGETD:
3020                 return put_user(tty->ldisc.ops->num, (int __user *)p);
3021         case TIOCSETD:
3022                 return tiocsetd(tty, p);
3023 #ifdef CONFIG_VT
3024         case TIOCLINUX:
3025                 return tioclinux(tty, arg);
3026 #endif
3027         /*
3028          * Break handling
3029          */
3030         case TIOCSBRK:  /* Turn break on, unconditionally */
3031                 if (tty->ops->break_ctl)
3032                         return tty->ops->break_ctl(tty, -1);
3033                 return 0;
3034         case TIOCCBRK:  /* Turn break off, unconditionally */
3035                 if (tty->ops->break_ctl)
3036                         return tty->ops->break_ctl(tty, 0);
3037                 return 0;
3038         case TCSBRK:   /* SVID version: non-zero arg --> no break */
3039                 /* non-zero arg means wait for all output data
3040                  * to be sent (performed above) but don't send break.
3041                  * This is used by the tcdrain() termios function.
3042                  */
3043                 if (!arg)
3044                         return send_break(tty, 250);
3045                 return 0;
3046         case TCSBRKP:   /* support for POSIX tcsendbreak() */
3047                 return send_break(tty, arg ? arg*100 : 250);
3048
3049         case TIOCMGET:
3050                 return tty_tiocmget(tty, file, p);
3051         case TIOCMSET:
3052         case TIOCMBIC:
3053         case TIOCMBIS:
3054                 return tty_tiocmset(tty, file, cmd, p);
3055         case TCFLSH:
3056                 switch (arg) {
3057                 case TCIFLUSH:
3058                 case TCIOFLUSH:
3059                 /* flush tty buffer and allow ldisc to process ioctl */
3060                         tty_buffer_flush(tty);
3061                         break;
3062                 }
3063                 break;
3064         }
3065         if (tty->ops->ioctl) {
3066                 retval = (tty->ops->ioctl)(tty, file, cmd, arg);
3067                 if (retval != -ENOIOCTLCMD)
3068                         return retval;
3069         }
3070         ld = tty_ldisc_ref_wait(tty);
3071         retval = -EINVAL;
3072         if (ld->ops->ioctl) {
3073                 retval = ld->ops->ioctl(tty, file, cmd, arg);
3074                 if (retval == -ENOIOCTLCMD)
3075                         retval = -EINVAL;
3076         }
3077         tty_ldisc_deref(ld);
3078         return retval;
3079 }
3080
3081 #ifdef CONFIG_COMPAT
3082 static long tty_compat_ioctl(struct file *file, unsigned int cmd,
3083                                 unsigned long arg)
3084 {
3085         struct inode *inode = file->f_dentry->d_inode;
3086         struct tty_struct *tty = file->private_data;
3087         struct tty_ldisc *ld;
3088         int retval = -ENOIOCTLCMD;
3089
3090         if (tty_paranoia_check(tty, inode, "tty_ioctl"))
3091                 return -EINVAL;
3092
3093         if (tty->ops->compat_ioctl) {
3094                 retval = (tty->ops->compat_ioctl)(tty, file, cmd, arg);
3095                 if (retval != -ENOIOCTLCMD)
3096                         return retval;
3097         }
3098
3099         ld = tty_ldisc_ref_wait(tty);
3100         if (ld->ops->compat_ioctl)
3101                 retval = ld->ops->compat_ioctl(tty, file, cmd, arg);
3102         tty_ldisc_deref(ld);
3103
3104         return retval;
3105 }
3106 #endif
3107
3108 /*
3109  * This implements the "Secure Attention Key" ---  the idea is to
3110  * prevent trojan horses by killing all processes associated with this
3111  * tty when the user hits the "Secure Attention Key".  Required for
3112  * super-paranoid applications --- see the Orange Book for more details.
3113  *
3114  * This code could be nicer; ideally it should send a HUP, wait a few
3115  * seconds, then send a INT, and then a KILL signal.  But you then
3116  * have to coordinate with the init process, since all processes associated
3117  * with the current tty must be dead before the new getty is allowed
3118  * to spawn.
3119  *
3120  * Now, if it would be correct ;-/ The current code has a nasty hole -
3121  * it doesn't catch files in flight. We may send the descriptor to ourselves
3122  * via AF_UNIX socket, close it and later fetch from socket. FIXME.
3123  *
3124  * Nasty bug: do_SAK is being called in interrupt context.  This can
3125  * deadlock.  We punt it up to process context.  AKPM - 16Mar2001
3126  */
3127 void __do_SAK(struct tty_struct *tty)
3128 {
3129 #ifdef TTY_SOFT_SAK
3130         tty_hangup(tty);
3131 #else
3132         struct task_struct *g, *p;
3133         struct pid *session;
3134         int             i;
3135         struct file     *filp;
3136         struct fdtable *fdt;
3137
3138         if (!tty)
3139                 return;
3140         session = tty->session;
3141
3142         tty_ldisc_flush(tty);
3143
3144         tty_driver_flush_buffer(tty);
3145
3146         read_lock(&tasklist_lock);
3147         /* Kill the entire session */
3148         do_each_pid_task(session, PIDTYPE_SID, p) {
3149                 printk(KERN_NOTICE "SAK: killed process %d"
3150                         " (%s): task_session_nr(p)==tty->session\n",
3151                         task_pid_nr(p), p->comm);
3152                 send_sig(SIGKILL, p, 1);
3153         } while_each_pid_task(session, PIDTYPE_SID, p);
3154         /* Now kill any processes that happen to have the
3155          * tty open.
3156          */
3157         do_each_thread(g, p) {
3158                 if (p->signal->tty == tty) {
3159                         printk(KERN_NOTICE "SAK: killed process %d"
3160                             " (%s): task_session_nr(p)==tty->session\n",
3161                             task_pid_nr(p), p->comm);
3162                         send_sig(SIGKILL, p, 1);
3163                         continue;
3164                 }
3165                 task_lock(p);
3166                 if (p->files) {
3167                         /*
3168                          * We don't take a ref to the file, so we must
3169                          * hold ->file_lock instead.
3170                          */
3171                         spin_lock(&p->files->file_lock);
3172                         fdt = files_fdtable(p->files);
3173                         for (i = 0; i < fdt->max_fds; i++) {
3174                                 filp = fcheck_files(p->files, i);
3175                                 if (!filp)
3176                                         continue;
3177                                 if (filp->f_op->read == tty_read &&
3178                                     filp->private_data == tty) {
3179                                         printk(KERN_NOTICE "SAK: killed process %d"
3180                                             " (%s): fd#%d opened to the tty\n",
3181                                             task_pid_nr(p), p->comm, i);
3182                                         force_sig(SIGKILL, p);
3183                                         break;
3184                                 }
3185                         }
3186                         spin_unlock(&p->files->file_lock);
3187                 }
3188                 task_unlock(p);
3189         } while_each_thread(g, p);
3190         read_unlock(&tasklist_lock);
3191 #endif
3192 }
3193
3194 static void do_SAK_work(struct work_struct *work)
3195 {
3196         struct tty_struct *tty =
3197                 container_of(work, struct tty_struct, SAK_work);
3198         __do_SAK(tty);
3199 }
3200
3201 /*
3202  * The tq handling here is a little racy - tty->SAK_work may already be queued.
3203  * Fortunately we don't need to worry, because if ->SAK_work is already queued,
3204  * the values which we write to it will be identical to the values which it
3205  * already has. --akpm
3206  */
3207 void do_SAK(struct tty_struct *tty)
3208 {
3209         if (!tty)
3210                 return;
3211         schedule_work(&tty->SAK_work);
3212 }
3213
3214 EXPORT_SYMBOL(do_SAK);
3215
3216 /**
3217  *      flush_to_ldisc
3218  *      @work: tty structure passed from work queue.
3219  *
3220  *      This routine is called out of the software interrupt to flush data
3221  *      from the buffer chain to the line discipline.
3222  *
3223  *      Locking: holds tty->buf.lock to guard buffer list. Drops the lock
3224  *      while invoking the line discipline receive_buf method. The
3225  *      receive_buf method is single threaded for each tty instance.
3226  */
3227
3228 static void flush_to_ldisc(struct work_struct *work)
3229 {
3230         struct tty_struct *tty =
3231                 container_of(work, struct tty_struct, buf.work.work);
3232         unsigned long   flags;
3233         struct tty_ldisc *disc;
3234         struct tty_buffer *tbuf, *head;
3235         char *char_buf;
3236         unsigned char *flag_buf;
3237
3238         disc = tty_ldisc_ref(tty);
3239         if (disc == NULL)       /*  !TTY_LDISC */
3240                 return;
3241
3242         spin_lock_irqsave(&tty->buf.lock, flags);
3243         /* So we know a flush is running */
3244         set_bit(TTY_FLUSHING, &tty->flags);
3245         head = tty->buf.head;
3246         if (head != NULL) {
3247                 tty->buf.head = NULL;
3248                 for (;;) {
3249                         int count = head->commit - head->read;
3250                         if (!count) {
3251                                 if (head->next == NULL)
3252                                         break;
3253                                 tbuf = head;
3254                                 head = head->next;
3255                                 tty_buffer_free(tty, tbuf);
3256                                 continue;
3257                         }
3258                         /* Ldisc or user is trying to flush the buffers
3259                            we are feeding to the ldisc, stop feeding the
3260                            line discipline as we want to empty the queue */
3261                         if (test_bit(TTY_FLUSHPENDING, &tty->flags))
3262                                 break;
3263                         if (!tty->receive_room) {
3264                                 schedule_delayed_work(&tty->buf.work, 1);
3265                                 break;
3266                         }
3267                         if (count > tty->receive_room)
3268                                 count = tty->receive_room;
3269                         char_buf = head->char_buf_ptr + head->read;
3270                         flag_buf = head->flag_buf_ptr + head->read;
3271                         head->read += count;
3272                         spin_unlock_irqrestore(&tty->buf.lock, flags);
3273                         disc->ops->receive_buf(tty, char_buf,
3274                                                         flag_buf, count);
3275                         spin_lock_irqsave(&tty->buf.lock, flags);
3276                 }
3277                 /* Restore the queue head */
3278                 tty->buf.head = head;
3279         }
3280         /* We may have a deferred request to flush the input buffer,
3281            if so pull the chain under the lock and empty the queue */
3282         if (test_bit(TTY_FLUSHPENDING, &tty->flags)) {
3283                 __tty_buffer_flush(tty);
3284                 clear_bit(TTY_FLUSHPENDING, &tty->flags);
3285                 wake_up(&tty->read_wait);
3286         }
3287         clear_bit(TTY_FLUSHING, &tty->flags);
3288         spin_unlock_irqrestore(&tty->buf.lock, flags);
3289
3290         tty_ldisc_deref(disc);
3291 }
3292
3293 /**
3294  *      tty_flip_buffer_push    -       terminal
3295  *      @tty: tty to push
3296  *
3297  *      Queue a push of the terminal flip buffers to the line discipline. This
3298  *      function must not be called from IRQ context if tty->low_latency is set.
3299  *
3300  *      In the event of the queue being busy for flipping the work will be
3301  *      held off and retried later.
3302  *
3303  *      Locking: tty buffer lock. Driver locks in low latency mode.
3304  */
3305
3306 void tty_flip_buffer_push(struct tty_struct *tty)
3307 {
3308         unsigned long flags;
3309         spin_lock_irqsave(&tty->buf.lock, flags);
3310         if (tty->buf.tail != NULL)
3311                 tty->buf.tail->commit = tty->buf.tail->used;
3312         spin_unlock_irqrestore(&tty->buf.lock, flags);
3313
3314         if (tty->low_latency)
3315                 flush_to_ldisc(&tty->buf.work.work);
3316         else
3317                 schedule_delayed_work(&tty->buf.work, 1);
3318 }
3319
3320 EXPORT_SYMBOL(tty_flip_buffer_push);
3321
3322
3323 /**
3324  *      initialize_tty_struct
3325  *      @tty: tty to initialize
3326  *
3327  *      This subroutine initializes a tty structure that has been newly
3328  *      allocated.
3329  *
3330  *      Locking: none - tty in question must not be exposed at this point
3331  */
3332
3333 static void initialize_tty_struct(struct tty_struct *tty)
3334 {
3335         memset(tty, 0, sizeof(struct tty_struct));
3336         tty->magic = TTY_MAGIC;
3337         tty_ldisc_init(tty);
3338         tty->session = NULL;
3339         tty->pgrp = NULL;
3340         tty->overrun_time = jiffies;
3341         tty->buf.head = tty->buf.tail = NULL;
3342         tty_buffer_init(tty);
3343         INIT_DELAYED_WORK(&tty->buf.work, flush_to_ldisc);
3344         mutex_init(&tty->termios_mutex);
3345         init_waitqueue_head(&tty->write_wait);
3346         init_waitqueue_head(&tty->read_wait);
3347         INIT_WORK(&tty->hangup_work, do_tty_hangup);
3348         mutex_init(&tty->atomic_read_lock);
3349         mutex_init(&tty->atomic_write_lock);
3350         spin_lock_init(&tty->read_lock);
3351         spin_lock_init(&tty->ctrl_lock);
3352         INIT_LIST_HEAD(&tty->tty_files);
3353         INIT_WORK(&tty->SAK_work, do_SAK_work);
3354 }
3355
3356 /**
3357  *      tty_put_char    -       write one character to a tty
3358  *      @tty: tty
3359  *      @ch: character
3360  *
3361  *      Write one byte to the tty using the provided put_char method
3362  *      if present. Returns the number of characters successfully output.
3363  *
3364  *      Note: the specific put_char operation in the driver layer may go
3365  *      away soon. Don't call it directly, use this method
3366  */
3367
3368 int tty_put_char(struct tty_struct *tty, unsigned char ch)
3369 {
3370         if (tty->ops->put_char)
3371                 return tty->ops->put_char(tty, ch);
3372         return tty->ops->write(tty, &ch, 1);
3373 }
3374
3375 EXPORT_SYMBOL_GPL(tty_put_char);
3376
3377 static struct class *tty_class;
3378
3379 /**
3380  *      tty_register_device - register a tty device
3381  *      @driver: the tty driver that describes the tty device
3382  *      @index: the index in the tty driver for this tty device
3383  *      @device: a struct device that is associated with this tty device.
3384  *              This field is optional, if there is no known struct device
3385  *              for this tty device it can be set to NULL safely.
3386  *
3387  *      Returns a pointer to the struct device for this tty device
3388  *      (or ERR_PTR(-EFOO) on error).
3389  *
3390  *      This call is required to be made to register an individual tty device
3391  *      if the tty driver's flags have the TTY_DRIVER_DYNAMIC_DEV bit set.  If
3392  *      that bit is not set, this function should not be called by a tty
3393  *      driver.
3394  *
3395  *      Locking: ??
3396  */
3397
3398 struct device *tty_register_device(struct tty_driver *driver, unsigned index,
3399                                    struct device *device)
3400 {
3401         char name[64];
3402         dev_t dev = MKDEV(driver->major, driver->minor_start) + index;
3403
3404         if (index >= driver->num) {
3405                 printk(KERN_ERR "Attempt to register invalid tty line number "
3406                        " (%d).\n", index);
3407                 return ERR_PTR(-EINVAL);
3408         }
3409
3410         if (driver->type == TTY_DRIVER_TYPE_PTY)
3411                 pty_line_name(driver, index, name);
3412         else
3413                 tty_line_name(driver, index, name);
3414
3415         return device_create_drvdata(tty_class, device, dev, NULL, name);
3416 }
3417
3418 /**
3419  *      tty_unregister_device - unregister a tty device
3420  *      @driver: the tty driver that describes the tty device
3421  *      @index: the index in the tty driver for this tty device
3422  *
3423  *      If a tty device is registered with a call to tty_register_device() then
3424  *      this function must be called when the tty device is gone.
3425  *
3426  *      Locking: ??
3427  */
3428
3429 void tty_unregister_device(struct tty_driver *driver, unsigned index)
3430 {
3431         device_destroy(tty_class,
3432                 MKDEV(driver->major, driver->minor_start) + index);
3433 }
3434
3435 EXPORT_SYMBOL(tty_register_device);
3436 EXPORT_SYMBOL(tty_unregister_device);
3437
3438 struct tty_driver *alloc_tty_driver(int lines)
3439 {
3440         struct tty_driver *driver;
3441
3442         driver = kzalloc(sizeof(struct tty_driver), GFP_KERNEL);
3443         if (driver) {
3444                 driver->magic = TTY_DRIVER_MAGIC;
3445                 driver->num = lines;
3446                 /* later we'll move allocation of tables here */
3447         }
3448         return driver;
3449 }
3450
3451 void put_tty_driver(struct tty_driver *driver)
3452 {
3453         kfree(driver);
3454 }
3455
3456 void tty_set_operations(struct tty_driver *driver,
3457                         const struct tty_operations *op)
3458 {
3459         driver->ops = op;
3460 };
3461
3462 EXPORT_SYMBOL(alloc_tty_driver);
3463 EXPORT_SYMBOL(put_tty_driver);
3464 EXPORT_SYMBOL(tty_set_operations);
3465
3466 /*
3467  * Called by a tty driver to register itself.
3468  */
3469 int tty_register_driver(struct tty_driver *driver)
3470 {
3471         int error;
3472         int i;
3473         dev_t dev;
3474         void **p = NULL;
3475
3476         if (driver->flags & TTY_DRIVER_INSTALLED)
3477                 return 0;
3478
3479         if (!(driver->flags & TTY_DRIVER_DEVPTS_MEM) && driver->num) {
3480                 p = kzalloc(driver->num * 3 * sizeof(void *), GFP_KERNEL);
3481                 if (!p)
3482                         return -ENOMEM;
3483         }
3484
3485         if (!driver->major) {
3486                 error = alloc_chrdev_region(&dev, driver->minor_start,
3487                                                 driver->num, driver->name);
3488                 if (!error) {
3489                         driver->major = MAJOR(dev);
3490                         driver->minor_start = MINOR(dev);
3491                 }
3492         } else {
3493                 dev = MKDEV(driver->major, driver->minor_start);
3494                 error = register_chrdev_region(dev, driver->num, driver->name);
3495         }
3496         if (error < 0) {
3497                 kfree(p);
3498                 return error;
3499         }
3500
3501         if (p) {
3502                 driver->ttys = (struct tty_struct **)p;
3503                 driver->termios = (struct ktermios **)(p + driver->num);
3504                 driver->termios_locked = (struct ktermios **)
3505                                                         (p + driver->num * 2);
3506         } else {
3507                 driver->ttys = NULL;
3508                 driver->termios = NULL;
3509                 driver->termios_locked = NULL;
3510         }
3511
3512         cdev_init(&driver->cdev, &tty_fops);
3513         driver->cdev.owner = driver->owner;
3514         error = cdev_add(&driver->cdev, dev, driver->num);
3515         if (error) {
3516                 unregister_chrdev_region(dev, driver->num);
3517                 driver->ttys = NULL;
3518                 driver->termios = driver->termios_locked = NULL;
3519                 kfree(p);
3520                 return error;
3521         }
3522
3523         mutex_lock(&tty_mutex);
3524         list_add(&driver->tty_drivers, &tty_drivers);
3525         mutex_unlock(&tty_mutex);
3526
3527         if (!(driver->flags & TTY_DRIVER_DYNAMIC_DEV)) {
3528                 for (i = 0; i < driver->num; i++)
3529                     tty_register_device(driver, i, NULL);
3530         }
3531         proc_tty_register_driver(driver);
3532         return 0;
3533 }
3534
3535 EXPORT_SYMBOL(tty_register_driver);
3536
3537 /*
3538  * Called by a tty driver to unregister itself.
3539  */
3540 int tty_unregister_driver(struct tty_driver *driver)
3541 {
3542         int i;
3543         struct ktermios *tp;
3544         void *p;
3545
3546         if (driver->refcount)
3547                 return -EBUSY;
3548
3549         unregister_chrdev_region(MKDEV(driver->major, driver->minor_start),
3550                                 driver->num);
3551         mutex_lock(&tty_mutex);
3552         list_del(&driver->tty_drivers);
3553         mutex_unlock(&tty_mutex);
3554
3555         /*
3556          * Free the termios and termios_locked structures because
3557          * we don't want to get memory leaks when modular tty
3558          * drivers are removed from the kernel.
3559          */
3560         for (i = 0; i < driver->num; i++) {
3561                 tp = driver->termios[i];
3562                 if (tp) {
3563                         driver->termios[i] = NULL;
3564                         kfree(tp);
3565                 }
3566                 tp = driver->termios_locked[i];
3567                 if (tp) {
3568                         driver->termios_locked[i] = NULL;
3569                         kfree(tp);
3570                 }
3571                 if (!(driver->flags & TTY_DRIVER_DYNAMIC_DEV))
3572                         tty_unregister_device(driver, i);
3573         }
3574         p = driver->ttys;
3575         proc_tty_unregister_driver(driver);
3576         driver->ttys = NULL;
3577         driver->termios = driver->termios_locked = NULL;
3578         kfree(p);
3579         cdev_del(&driver->cdev);
3580         return 0;
3581 }
3582 EXPORT_SYMBOL(tty_unregister_driver);
3583
3584 dev_t tty_devnum(struct tty_struct *tty)
3585 {
3586         return MKDEV(tty->driver->major, tty->driver->minor_start) + tty->index;
3587 }
3588 EXPORT_SYMBOL(tty_devnum);
3589
3590 void proc_clear_tty(struct task_struct *p)
3591 {
3592         spin_lock_irq(&p->sighand->siglock);
3593         p->signal->tty = NULL;
3594         spin_unlock_irq(&p->sighand->siglock);
3595 }
3596 EXPORT_SYMBOL(proc_clear_tty);
3597
3598 /* Called under the sighand lock */
3599
3600 static void __proc_set_tty(struct task_struct *tsk, struct tty_struct *tty)
3601 {
3602         if (tty) {
3603                 unsigned long flags;
3604                 /* We should not have a session or pgrp to put here but.... */
3605                 spin_lock_irqsave(&tty->ctrl_lock, flags);
3606                 put_pid(tty->session);
3607                 put_pid(tty->pgrp);
3608                 tty->pgrp = get_pid(task_pgrp(tsk));
3609                 spin_unlock_irqrestore(&tty->ctrl_lock, flags);
3610                 tty->session = get_pid(task_session(tsk));
3611         }
3612         put_pid(tsk->signal->tty_old_pgrp);
3613         tsk->signal->tty = tty;
3614         tsk->signal->tty_old_pgrp = NULL;
3615 }
3616
3617 static void proc_set_tty(struct task_struct *tsk, struct tty_struct *tty)
3618 {
3619         spin_lock_irq(&tsk->sighand->siglock);
3620         __proc_set_tty(tsk, tty);
3621         spin_unlock_irq(&tsk->sighand->siglock);
3622 }
3623
3624 struct tty_struct *get_current_tty(void)
3625 {
3626         struct tty_struct *tty;
3627         WARN_ON_ONCE(!mutex_is_locked(&tty_mutex));
3628         tty = current->signal->tty;
3629         /*
3630          * session->tty can be changed/cleared from under us, make sure we
3631          * issue the load. The obtained pointer, when not NULL, is valid as
3632          * long as we hold tty_mutex.
3633          */
3634         barrier();
3635         return tty;
3636 }
3637 EXPORT_SYMBOL_GPL(get_current_tty);
3638
3639 /*
3640  * Initialize the console device. This is called *early*, so
3641  * we can't necessarily depend on lots of kernel help here.
3642  * Just do some early initializations, and do the complex setup
3643  * later.
3644  */
3645 void __init console_init(void)
3646 {
3647         initcall_t *call;
3648
3649         /* Setup the default TTY line discipline. */
3650         tty_ldisc_begin();
3651
3652         /*
3653          * set up the console device so that later boot sequences can
3654          * inform about problems etc..
3655          */
3656         call = __con_initcall_start;
3657         while (call < __con_initcall_end) {
3658                 (*call)();
3659                 call++;
3660         }
3661 }
3662
3663 static int __init tty_class_init(void)
3664 {
3665         tty_class = class_create(THIS_MODULE, "tty");
3666         if (IS_ERR(tty_class))
3667                 return PTR_ERR(tty_class);
3668         return 0;
3669 }
3670
3671 postcore_initcall(tty_class_init);
3672
3673 /* 3/2004 jmc: why do these devices exist? */
3674
3675 static struct cdev tty_cdev, console_cdev;
3676 #ifdef CONFIG_UNIX98_PTYS
3677 static struct cdev ptmx_cdev;
3678 #endif
3679 #ifdef CONFIG_VT
3680 static struct cdev vc0_cdev;
3681 #endif
3682
3683 /*
3684  * Ok, now we can initialize the rest of the tty devices and can count
3685  * on memory allocations, interrupts etc..
3686  */
3687 static int __init tty_init(void)
3688 {
3689         cdev_init(&tty_cdev, &tty_fops);
3690         if (cdev_add(&tty_cdev, MKDEV(TTYAUX_MAJOR, 0), 1) ||
3691             register_chrdev_region(MKDEV(TTYAUX_MAJOR, 0), 1, "/dev/tty") < 0)
3692                 panic("Couldn't register /dev/tty driver\n");
3693         device_create_drvdata(tty_class, NULL, MKDEV(TTYAUX_MAJOR, 0), NULL,
3694                               "tty");
3695
3696         cdev_init(&console_cdev, &console_fops);
3697         if (cdev_add(&console_cdev, MKDEV(TTYAUX_MAJOR, 1), 1) ||
3698             register_chrdev_region(MKDEV(TTYAUX_MAJOR, 1), 1, "/dev/console") < 0)
3699                 panic("Couldn't register /dev/console driver\n");
3700         device_create_drvdata(tty_class, NULL, MKDEV(TTYAUX_MAJOR, 1), NULL,
3701                               "console");
3702
3703 #ifdef CONFIG_UNIX98_PTYS
3704         cdev_init(&ptmx_cdev, &ptmx_fops);
3705         if (cdev_add(&ptmx_cdev, MKDEV(TTYAUX_MAJOR, 2), 1) ||
3706             register_chrdev_region(MKDEV(TTYAUX_MAJOR, 2), 1, "/dev/ptmx") < 0)
3707                 panic("Couldn't register /dev/ptmx driver\n");
3708         device_create_drvdata(tty_class, NULL, MKDEV(TTYAUX_MAJOR, 2), NULL, "ptmx");
3709 #endif
3710
3711 #ifdef CONFIG_VT
3712         cdev_init(&vc0_cdev, &console_fops);
3713         if (cdev_add(&vc0_cdev, MKDEV(TTY_MAJOR, 0), 1) ||
3714             register_chrdev_region(MKDEV(TTY_MAJOR, 0), 1, "/dev/vc/0") < 0)
3715                 panic("Couldn't register /dev/tty0 driver\n");
3716         device_create_drvdata(tty_class, NULL, MKDEV(TTY_MAJOR, 0), NULL, "tty0");
3717
3718         vty_init();
3719 #endif
3720         return 0;
3721 }
3722 module_init(tty_init);