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