n_tty: Eliminate echo_commit memory barrier
[firefly-linux-kernel-4.4.55.git] / drivers / tty / n_tty.c
1 /*
2  * n_tty.c --- implements the N_TTY line discipline.
3  *
4  * This code used to be in tty_io.c, but things are getting hairy
5  * enough that it made sense to split things off.  (The N_TTY
6  * processing has changed so much that it's hardly recognizable,
7  * anyway...)
8  *
9  * Note that the open routine for N_TTY is guaranteed never to return
10  * an error.  This is because Linux will fall back to setting a line
11  * to N_TTY if it can not switch to any other line discipline.
12  *
13  * Written by Theodore Ts'o, Copyright 1994.
14  *
15  * This file also contains code originally written by Linus Torvalds,
16  * Copyright 1991, 1992, 1993, and by Julian Cowley, Copyright 1994.
17  *
18  * This file may be redistributed under the terms of the GNU General Public
19  * License.
20  *
21  * Reduced memory usage for older ARM systems  - Russell King.
22  *
23  * 2000/01/20   Fixed SMP locking on put_tty_queue using bits of
24  *              the patch by Andrew J. Kroll <ag784@freenet.buffalo.edu>
25  *              who actually finally proved there really was a race.
26  *
27  * 2002/03/18   Implemented n_tty_wakeup to send SIGIO POLL_OUTs to
28  *              waiting writing processes-Sapan Bhatia <sapan@corewars.org>.
29  *              Also fixed a bug in BLOCKING mode where n_tty_write returns
30  *              EAGAIN
31  */
32
33 #include <linux/types.h>
34 #include <linux/major.h>
35 #include <linux/errno.h>
36 #include <linux/signal.h>
37 #include <linux/fcntl.h>
38 #include <linux/sched.h>
39 #include <linux/interrupt.h>
40 #include <linux/tty.h>
41 #include <linux/timer.h>
42 #include <linux/ctype.h>
43 #include <linux/mm.h>
44 #include <linux/string.h>
45 #include <linux/slab.h>
46 #include <linux/poll.h>
47 #include <linux/bitops.h>
48 #include <linux/audit.h>
49 #include <linux/file.h>
50 #include <linux/uaccess.h>
51 #include <linux/module.h>
52 #include <linux/ratelimit.h>
53
54
55 /* number of characters left in xmit buffer before select has we have room */
56 #define WAKEUP_CHARS 256
57
58 /*
59  * This defines the low- and high-watermarks for throttling and
60  * unthrottling the TTY driver.  These watermarks are used for
61  * controlling the space in the read buffer.
62  */
63 #define TTY_THRESHOLD_THROTTLE          128 /* now based on remaining room */
64 #define TTY_THRESHOLD_UNTHROTTLE        128
65
66 /*
67  * Special byte codes used in the echo buffer to represent operations
68  * or special handling of characters.  Bytes in the echo buffer that
69  * are not part of such special blocks are treated as normal character
70  * codes.
71  */
72 #define ECHO_OP_START 0xff
73 #define ECHO_OP_MOVE_BACK_COL 0x80
74 #define ECHO_OP_SET_CANON_COL 0x81
75 #define ECHO_OP_ERASE_TAB 0x82
76
77 #undef N_TTY_TRACE
78 #ifdef N_TTY_TRACE
79 # define n_tty_trace(f, args...)        trace_printk(f, ##args)
80 #else
81 # define n_tty_trace(f, args...)
82 #endif
83
84 struct n_tty_data {
85         /* producer-published */
86         size_t read_head;
87         size_t canon_head;
88         DECLARE_BITMAP(process_char_map, 256);
89
90         /* private to n_tty_receive_overrun (single-threaded) */
91         unsigned long overrun_time;
92         int num_overrun;
93
94         /* non-atomic */
95         bool no_room;
96
97         /* must hold exclusive termios_rwsem to reset these */
98         unsigned char lnext:1, erasing:1, raw:1, real_raw:1, icanon:1;
99
100         /* shared by producer and consumer */
101         char *read_buf;
102         DECLARE_BITMAP(read_flags, N_TTY_BUF_SIZE);
103
104         int minimum_to_wake;
105
106         /* consumer-published */
107         size_t read_tail;
108
109         unsigned char *echo_buf;
110         size_t echo_head;
111         size_t echo_tail;
112         size_t echo_commit;
113
114         /* protected by output lock */
115         unsigned int column;
116         unsigned int canon_column;
117
118         struct mutex atomic_read_lock;
119         struct mutex output_lock;
120 };
121
122 static inline size_t read_cnt(struct n_tty_data *ldata)
123 {
124         return ldata->read_head - ldata->read_tail;
125 }
126
127 static inline unsigned char read_buf(struct n_tty_data *ldata, size_t i)
128 {
129         return ldata->read_buf[i & (N_TTY_BUF_SIZE - 1)];
130 }
131
132 static inline unsigned char *read_buf_addr(struct n_tty_data *ldata, size_t i)
133 {
134         return &ldata->read_buf[i & (N_TTY_BUF_SIZE - 1)];
135 }
136
137 static inline unsigned char echo_buf(struct n_tty_data *ldata, size_t i)
138 {
139         return ldata->echo_buf[i & (N_TTY_BUF_SIZE - 1)];
140 }
141
142 static inline unsigned char *echo_buf_addr(struct n_tty_data *ldata, size_t i)
143 {
144         return &ldata->echo_buf[i & (N_TTY_BUF_SIZE - 1)];
145 }
146
147 static inline int tty_put_user(struct tty_struct *tty, unsigned char x,
148                                unsigned char __user *ptr)
149 {
150         struct n_tty_data *ldata = tty->disc_data;
151
152         tty_audit_add_data(tty, &x, 1, ldata->icanon);
153         return put_user(x, ptr);
154 }
155
156 static int receive_room(struct tty_struct *tty)
157 {
158         struct n_tty_data *ldata = tty->disc_data;
159         int left;
160
161         if (I_PARMRK(tty)) {
162                 /* Multiply read_cnt by 3, since each byte might take up to
163                  * three times as many spaces when PARMRK is set (depending on
164                  * its flags, e.g. parity error). */
165                 left = N_TTY_BUF_SIZE - read_cnt(ldata) * 3 - 1;
166         } else
167                 left = N_TTY_BUF_SIZE - read_cnt(ldata) - 1;
168
169         /*
170          * If we are doing input canonicalization, and there are no
171          * pending newlines, let characters through without limit, so
172          * that erase characters will be handled.  Other excess
173          * characters will be beeped.
174          */
175         if (left <= 0)
176                 left = ldata->icanon && ldata->canon_head == ldata->read_tail;
177
178         return left;
179 }
180
181 /**
182  *      n_tty_set_room  -       receive space
183  *      @tty: terminal
184  *
185  *      Re-schedules the flip buffer work if space just became available.
186  *
187  *      Caller holds exclusive termios_rwsem
188  *         or
189  *      n_tty_read()/consumer path:
190  *              holds non-exclusive termios_rwsem
191  */
192
193 static void n_tty_set_room(struct tty_struct *tty)
194 {
195         struct n_tty_data *ldata = tty->disc_data;
196
197         /* Did this open up the receive buffer? We may need to flip */
198         if (unlikely(ldata->no_room) && receive_room(tty)) {
199                 ldata->no_room = 0;
200
201                 WARN_RATELIMIT(tty->port->itty == NULL,
202                                 "scheduling with invalid itty\n");
203                 /* see if ldisc has been killed - if so, this means that
204                  * even though the ldisc has been halted and ->buf.work
205                  * cancelled, ->buf.work is about to be rescheduled
206                  */
207                 WARN_RATELIMIT(test_bit(TTY_LDISC_HALTED, &tty->flags),
208                                "scheduling buffer work for halted ldisc\n");
209                 queue_work(system_unbound_wq, &tty->port->buf.work);
210         }
211 }
212
213 static ssize_t chars_in_buffer(struct tty_struct *tty)
214 {
215         struct n_tty_data *ldata = tty->disc_data;
216         ssize_t n = 0;
217
218         if (!ldata->icanon)
219                 n = read_cnt(ldata);
220         else
221                 n = ldata->canon_head - ldata->read_tail;
222         return n;
223 }
224
225 /**
226  *      n_tty_write_wakeup      -       asynchronous I/O notifier
227  *      @tty: tty device
228  *
229  *      Required for the ptys, serial driver etc. since processes
230  *      that attach themselves to the master and rely on ASYNC
231  *      IO must be woken up
232  */
233
234 static void n_tty_write_wakeup(struct tty_struct *tty)
235 {
236         if (tty->fasync && test_and_clear_bit(TTY_DO_WRITE_WAKEUP, &tty->flags))
237                 kill_fasync(&tty->fasync, SIGIO, POLL_OUT);
238 }
239
240 static inline void n_tty_check_throttle(struct tty_struct *tty)
241 {
242         if (tty->driver->type == TTY_DRIVER_TYPE_PTY)
243                 return;
244         /*
245          * Check the remaining room for the input canonicalization
246          * mode.  We don't want to throttle the driver if we're in
247          * canonical mode and don't have a newline yet!
248          */
249         while (1) {
250                 int throttled;
251                 tty_set_flow_change(tty, TTY_THROTTLE_SAFE);
252                 if (receive_room(tty) >= TTY_THRESHOLD_THROTTLE)
253                         break;
254                 throttled = tty_throttle_safe(tty);
255                 if (!throttled)
256                         break;
257         }
258         __tty_set_flow_change(tty, 0);
259 }
260
261 static inline void n_tty_check_unthrottle(struct tty_struct *tty)
262 {
263         if (tty->driver->type == TTY_DRIVER_TYPE_PTY &&
264             tty->link->ldisc->ops->write_wakeup == n_tty_write_wakeup) {
265                 if (chars_in_buffer(tty) > TTY_THRESHOLD_UNTHROTTLE)
266                         return;
267                 if (!tty->count)
268                         return;
269                 n_tty_set_room(tty);
270                 n_tty_write_wakeup(tty->link);
271                 wake_up_interruptible_poll(&tty->link->write_wait, POLLOUT);
272                 return;
273         }
274
275         /* If there is enough space in the read buffer now, let the
276          * low-level driver know. We use chars_in_buffer() to
277          * check the buffer, as it now knows about canonical mode.
278          * Otherwise, if the driver is throttled and the line is
279          * longer than TTY_THRESHOLD_UNTHROTTLE in canonical mode,
280          * we won't get any more characters.
281          */
282
283         while (1) {
284                 int unthrottled;
285                 tty_set_flow_change(tty, TTY_UNTHROTTLE_SAFE);
286                 if (chars_in_buffer(tty) > TTY_THRESHOLD_UNTHROTTLE)
287                         break;
288                 if (!tty->count)
289                         break;
290                 n_tty_set_room(tty);
291                 unthrottled = tty_unthrottle_safe(tty);
292                 if (!unthrottled)
293                         break;
294         }
295         __tty_set_flow_change(tty, 0);
296 }
297
298 /**
299  *      put_tty_queue           -       add character to tty
300  *      @c: character
301  *      @ldata: n_tty data
302  *
303  *      Add a character to the tty read_buf queue.
304  *
305  *      n_tty_receive_buf()/producer path:
306  *              caller holds non-exclusive termios_rwsem
307  *              modifies read_head
308  *
309  *      read_head is only considered 'published' if canonical mode is
310  *      not active.
311  */
312
313 static void put_tty_queue(unsigned char c, struct n_tty_data *ldata)
314 {
315         if (read_cnt(ldata) < N_TTY_BUF_SIZE) {
316                 *read_buf_addr(ldata, ldata->read_head) = c;
317                 ldata->read_head++;
318         }
319 }
320
321 /**
322  *      reset_buffer_flags      -       reset buffer state
323  *      @tty: terminal to reset
324  *
325  *      Reset the read buffer counters and clear the flags.
326  *      Called from n_tty_open() and n_tty_flush_buffer().
327  *
328  *      Locking: caller holds exclusive termios_rwsem
329  *               (or locking is not required)
330  */
331
332 static void reset_buffer_flags(struct n_tty_data *ldata)
333 {
334         ldata->read_head = ldata->canon_head = ldata->read_tail = 0;
335         ldata->echo_head = ldata->echo_tail = ldata->echo_commit = 0;
336
337         ldata->erasing = 0;
338         bitmap_zero(ldata->read_flags, N_TTY_BUF_SIZE);
339 }
340
341 static void n_tty_packet_mode_flush(struct tty_struct *tty)
342 {
343         unsigned long flags;
344
345         spin_lock_irqsave(&tty->ctrl_lock, flags);
346         if (tty->link->packet) {
347                 tty->ctrl_status |= TIOCPKT_FLUSHREAD;
348                 wake_up_interruptible(&tty->link->read_wait);
349         }
350         spin_unlock_irqrestore(&tty->ctrl_lock, flags);
351 }
352
353 /**
354  *      n_tty_flush_buffer      -       clean input queue
355  *      @tty:   terminal device
356  *
357  *      Flush the input buffer. Called when the tty layer wants the
358  *      buffer flushed (eg at hangup) or when the N_TTY line discipline
359  *      internally has to clean the pending queue (for example some signals).
360  *
361  *      Holds termios_rwsem to exclude producer/consumer while
362  *      buffer indices are reset.
363  *
364  *      Locking: ctrl_lock, exclusive termios_rwsem
365  */
366
367 static void n_tty_flush_buffer(struct tty_struct *tty)
368 {
369         down_write(&tty->termios_rwsem);
370         reset_buffer_flags(tty->disc_data);
371         n_tty_set_room(tty);
372
373         if (tty->link)
374                 n_tty_packet_mode_flush(tty);
375         up_write(&tty->termios_rwsem);
376 }
377
378 /**
379  *      n_tty_chars_in_buffer   -       report available bytes
380  *      @tty: tty device
381  *
382  *      Report the number of characters buffered to be delivered to user
383  *      at this instant in time.
384  *
385  *      Locking: exclusive termios_rwsem
386  */
387
388 static ssize_t n_tty_chars_in_buffer(struct tty_struct *tty)
389 {
390         ssize_t n;
391
392         WARN_ONCE(1, "%s is deprecated and scheduled for removal.", __func__);
393
394         down_write(&tty->termios_rwsem);
395         n = chars_in_buffer(tty);
396         up_write(&tty->termios_rwsem);
397         return n;
398 }
399
400 /**
401  *      is_utf8_continuation    -       utf8 multibyte check
402  *      @c: byte to check
403  *
404  *      Returns true if the utf8 character 'c' is a multibyte continuation
405  *      character. We use this to correctly compute the on screen size
406  *      of the character when printing
407  */
408
409 static inline int is_utf8_continuation(unsigned char c)
410 {
411         return (c & 0xc0) == 0x80;
412 }
413
414 /**
415  *      is_continuation         -       multibyte check
416  *      @c: byte to check
417  *
418  *      Returns true if the utf8 character 'c' is a multibyte continuation
419  *      character and the terminal is in unicode mode.
420  */
421
422 static inline int is_continuation(unsigned char c, struct tty_struct *tty)
423 {
424         return I_IUTF8(tty) && is_utf8_continuation(c);
425 }
426
427 /**
428  *      do_output_char                  -       output one character
429  *      @c: character (or partial unicode symbol)
430  *      @tty: terminal device
431  *      @space: space available in tty driver write buffer
432  *
433  *      This is a helper function that handles one output character
434  *      (including special characters like TAB, CR, LF, etc.),
435  *      doing OPOST processing and putting the results in the
436  *      tty driver's write buffer.
437  *
438  *      Note that Linux currently ignores TABDLY, CRDLY, VTDLY, FFDLY
439  *      and NLDLY.  They simply aren't relevant in the world today.
440  *      If you ever need them, add them here.
441  *
442  *      Returns the number of bytes of buffer space used or -1 if
443  *      no space left.
444  *
445  *      Locking: should be called under the output_lock to protect
446  *               the column state and space left in the buffer
447  */
448
449 static int do_output_char(unsigned char c, struct tty_struct *tty, int space)
450 {
451         struct n_tty_data *ldata = tty->disc_data;
452         int     spaces;
453
454         if (!space)
455                 return -1;
456
457         switch (c) {
458         case '\n':
459                 if (O_ONLRET(tty))
460                         ldata->column = 0;
461                 if (O_ONLCR(tty)) {
462                         if (space < 2)
463                                 return -1;
464                         ldata->canon_column = ldata->column = 0;
465                         tty->ops->write(tty, "\r\n", 2);
466                         return 2;
467                 }
468                 ldata->canon_column = ldata->column;
469                 break;
470         case '\r':
471                 if (O_ONOCR(tty) && ldata->column == 0)
472                         return 0;
473                 if (O_OCRNL(tty)) {
474                         c = '\n';
475                         if (O_ONLRET(tty))
476                                 ldata->canon_column = ldata->column = 0;
477                         break;
478                 }
479                 ldata->canon_column = ldata->column = 0;
480                 break;
481         case '\t':
482                 spaces = 8 - (ldata->column & 7);
483                 if (O_TABDLY(tty) == XTABS) {
484                         if (space < spaces)
485                                 return -1;
486                         ldata->column += spaces;
487                         tty->ops->write(tty, "        ", spaces);
488                         return spaces;
489                 }
490                 ldata->column += spaces;
491                 break;
492         case '\b':
493                 if (ldata->column > 0)
494                         ldata->column--;
495                 break;
496         default:
497                 if (!iscntrl(c)) {
498                         if (O_OLCUC(tty))
499                                 c = toupper(c);
500                         if (!is_continuation(c, tty))
501                                 ldata->column++;
502                 }
503                 break;
504         }
505
506         tty_put_char(tty, c);
507         return 1;
508 }
509
510 /**
511  *      process_output                  -       output post processor
512  *      @c: character (or partial unicode symbol)
513  *      @tty: terminal device
514  *
515  *      Output one character with OPOST processing.
516  *      Returns -1 when the output device is full and the character
517  *      must be retried.
518  *
519  *      Locking: output_lock to protect column state and space left
520  *               (also, this is called from n_tty_write under the
521  *                tty layer write lock)
522  */
523
524 static int process_output(unsigned char c, struct tty_struct *tty)
525 {
526         struct n_tty_data *ldata = tty->disc_data;
527         int     space, retval;
528
529         mutex_lock(&ldata->output_lock);
530
531         space = tty_write_room(tty);
532         retval = do_output_char(c, tty, space);
533
534         mutex_unlock(&ldata->output_lock);
535         if (retval < 0)
536                 return -1;
537         else
538                 return 0;
539 }
540
541 /**
542  *      process_output_block            -       block post processor
543  *      @tty: terminal device
544  *      @buf: character buffer
545  *      @nr: number of bytes to output
546  *
547  *      Output a block of characters with OPOST processing.
548  *      Returns the number of characters output.
549  *
550  *      This path is used to speed up block console writes, among other
551  *      things when processing blocks of output data. It handles only
552  *      the simple cases normally found and helps to generate blocks of
553  *      symbols for the console driver and thus improve performance.
554  *
555  *      Locking: output_lock to protect column state and space left
556  *               (also, this is called from n_tty_write under the
557  *                tty layer write lock)
558  */
559
560 static ssize_t process_output_block(struct tty_struct *tty,
561                                     const unsigned char *buf, unsigned int nr)
562 {
563         struct n_tty_data *ldata = tty->disc_data;
564         int     space;
565         int     i;
566         const unsigned char *cp;
567
568         mutex_lock(&ldata->output_lock);
569
570         space = tty_write_room(tty);
571         if (!space) {
572                 mutex_unlock(&ldata->output_lock);
573                 return 0;
574         }
575         if (nr > space)
576                 nr = space;
577
578         for (i = 0, cp = buf; i < nr; i++, cp++) {
579                 unsigned char c = *cp;
580
581                 switch (c) {
582                 case '\n':
583                         if (O_ONLRET(tty))
584                                 ldata->column = 0;
585                         if (O_ONLCR(tty))
586                                 goto break_out;
587                         ldata->canon_column = ldata->column;
588                         break;
589                 case '\r':
590                         if (O_ONOCR(tty) && ldata->column == 0)
591                                 goto break_out;
592                         if (O_OCRNL(tty))
593                                 goto break_out;
594                         ldata->canon_column = ldata->column = 0;
595                         break;
596                 case '\t':
597                         goto break_out;
598                 case '\b':
599                         if (ldata->column > 0)
600                                 ldata->column--;
601                         break;
602                 default:
603                         if (!iscntrl(c)) {
604                                 if (O_OLCUC(tty))
605                                         goto break_out;
606                                 if (!is_continuation(c, tty))
607                                         ldata->column++;
608                         }
609                         break;
610                 }
611         }
612 break_out:
613         i = tty->ops->write(tty, buf, i);
614
615         mutex_unlock(&ldata->output_lock);
616         return i;
617 }
618
619 /**
620  *      process_echoes  -       write pending echo characters
621  *      @tty: terminal device
622  *
623  *      Write previously buffered echo (and other ldisc-generated)
624  *      characters to the tty.
625  *
626  *      Characters generated by the ldisc (including echoes) need to
627  *      be buffered because the driver's write buffer can fill during
628  *      heavy program output.  Echoing straight to the driver will
629  *      often fail under these conditions, causing lost characters and
630  *      resulting mismatches of ldisc state information.
631  *
632  *      Since the ldisc state must represent the characters actually sent
633  *      to the driver at the time of the write, operations like certain
634  *      changes in column state are also saved in the buffer and executed
635  *      here.
636  *
637  *      A circular fifo buffer is used so that the most recent characters
638  *      are prioritized.  Also, when control characters are echoed with a
639  *      prefixed "^", the pair is treated atomically and thus not separated.
640  *
641  *      Locking: callers must hold output_lock
642  */
643
644 static void __process_echoes(struct tty_struct *tty)
645 {
646         struct n_tty_data *ldata = tty->disc_data;
647         int     space, nr;
648         size_t tail;
649         unsigned char c;
650
651         space = tty_write_room(tty);
652
653         tail = ldata->echo_tail;
654         nr = ldata->echo_commit - ldata->echo_tail;
655         while (nr > 0) {
656                 c = echo_buf(ldata, tail);
657                 if (c == ECHO_OP_START) {
658                         unsigned char op;
659                         int no_space_left = 0;
660
661                         /*
662                          * If the buffer byte is the start of a multi-byte
663                          * operation, get the next byte, which is either the
664                          * op code or a control character value.
665                          */
666                         op = echo_buf(ldata, tail + 1);
667
668                         switch (op) {
669                                 unsigned int num_chars, num_bs;
670
671                         case ECHO_OP_ERASE_TAB:
672                                 num_chars = echo_buf(ldata, tail + 2);
673
674                                 /*
675                                  * Determine how many columns to go back
676                                  * in order to erase the tab.
677                                  * This depends on the number of columns
678                                  * used by other characters within the tab
679                                  * area.  If this (modulo 8) count is from
680                                  * the start of input rather than from a
681                                  * previous tab, we offset by canon column.
682                                  * Otherwise, tab spacing is normal.
683                                  */
684                                 if (!(num_chars & 0x80))
685                                         num_chars += ldata->canon_column;
686                                 num_bs = 8 - (num_chars & 7);
687
688                                 if (num_bs > space) {
689                                         no_space_left = 1;
690                                         break;
691                                 }
692                                 space -= num_bs;
693                                 while (num_bs--) {
694                                         tty_put_char(tty, '\b');
695                                         if (ldata->column > 0)
696                                                 ldata->column--;
697                                 }
698                                 tail += 3;
699                                 nr -= 3;
700                                 break;
701
702                         case ECHO_OP_SET_CANON_COL:
703                                 ldata->canon_column = ldata->column;
704                                 tail += 2;
705                                 nr -= 2;
706                                 break;
707
708                         case ECHO_OP_MOVE_BACK_COL:
709                                 if (ldata->column > 0)
710                                         ldata->column--;
711                                 tail += 2;
712                                 nr -= 2;
713                                 break;
714
715                         case ECHO_OP_START:
716                                 /* This is an escaped echo op start code */
717                                 if (!space) {
718                                         no_space_left = 1;
719                                         break;
720                                 }
721                                 tty_put_char(tty, ECHO_OP_START);
722                                 ldata->column++;
723                                 space--;
724                                 tail += 2;
725                                 nr -= 2;
726                                 break;
727
728                         default:
729                                 /*
730                                  * If the op is not a special byte code,
731                                  * it is a ctrl char tagged to be echoed
732                                  * as "^X" (where X is the letter
733                                  * representing the control char).
734                                  * Note that we must ensure there is
735                                  * enough space for the whole ctrl pair.
736                                  *
737                                  */
738                                 if (space < 2) {
739                                         no_space_left = 1;
740                                         break;
741                                 }
742                                 tty_put_char(tty, '^');
743                                 tty_put_char(tty, op ^ 0100);
744                                 ldata->column += 2;
745                                 space -= 2;
746                                 tail += 2;
747                                 nr -= 2;
748                         }
749
750                         if (no_space_left)
751                                 break;
752                 } else {
753                         if (O_OPOST(tty)) {
754                                 int retval = do_output_char(c, tty, space);
755                                 if (retval < 0)
756                                         break;
757                                 space -= retval;
758                         } else {
759                                 if (!space)
760                                         break;
761                                 tty_put_char(tty, c);
762                                 space -= 1;
763                         }
764                         tail += 1;
765                         nr -= 1;
766                 }
767         }
768
769         ldata->echo_tail = tail;
770 }
771
772 static void commit_echoes(struct tty_struct *tty)
773 {
774         struct n_tty_data *ldata = tty->disc_data;
775
776         mutex_lock(&ldata->output_lock);
777         ldata->echo_commit = ldata->echo_head;
778         __process_echoes(tty);
779         mutex_unlock(&ldata->output_lock);
780
781         if (tty->ops->flush_chars)
782                 tty->ops->flush_chars(tty);
783 }
784
785 static void process_echoes(struct tty_struct *tty)
786 {
787         struct n_tty_data *ldata = tty->disc_data;
788
789         if (!L_ECHO(tty) || ldata->echo_commit == ldata->echo_tail)
790                 return;
791
792         mutex_lock(&ldata->output_lock);
793         __process_echoes(tty);
794         mutex_unlock(&ldata->output_lock);
795
796         if (tty->ops->flush_chars)
797                 tty->ops->flush_chars(tty);
798 }
799
800 /**
801  *      add_echo_byte   -       add a byte to the echo buffer
802  *      @c: unicode byte to echo
803  *      @ldata: n_tty data
804  *
805  *      Add a character or operation byte to the echo buffer.
806  *
807  *      Locks: may claim output_lock to prevent concurrent modify of
808  *             echo_tail by process_echoes().
809  */
810
811 static void add_echo_byte(unsigned char c, struct n_tty_data *ldata)
812 {
813         if (ldata->echo_head - ldata->echo_tail == N_TTY_BUF_SIZE) {
814                 size_t head = ldata->echo_head;
815
816                 mutex_lock(&ldata->output_lock);
817                 /*
818                  * Since the buffer start position needs to be advanced,
819                  * be sure to step by a whole operation byte group.
820                  */
821                 if (echo_buf(ldata, head) == ECHO_OP_START) {
822                         if (echo_buf(ldata, head + 1) == ECHO_OP_ERASE_TAB)
823                                 ldata->echo_tail += 3;
824                         else
825                                 ldata->echo_tail += 2;
826                 } else
827                         ldata->echo_tail++;
828                 mutex_unlock(&ldata->output_lock);
829         }
830
831         *echo_buf_addr(ldata, ldata->echo_head++) = c;
832 }
833
834 /**
835  *      echo_move_back_col      -       add operation to move back a column
836  *      @ldata: n_tty data
837  *
838  *      Add an operation to the echo buffer to move back one column.
839  */
840
841 static void echo_move_back_col(struct n_tty_data *ldata)
842 {
843         add_echo_byte(ECHO_OP_START, ldata);
844         add_echo_byte(ECHO_OP_MOVE_BACK_COL, ldata);
845 }
846
847 /**
848  *      echo_set_canon_col      -       add operation to set the canon column
849  *      @ldata: n_tty data
850  *
851  *      Add an operation to the echo buffer to set the canon column
852  *      to the current column.
853  */
854
855 static void echo_set_canon_col(struct n_tty_data *ldata)
856 {
857         add_echo_byte(ECHO_OP_START, ldata);
858         add_echo_byte(ECHO_OP_SET_CANON_COL, ldata);
859 }
860
861 /**
862  *      echo_erase_tab  -       add operation to erase a tab
863  *      @num_chars: number of character columns already used
864  *      @after_tab: true if num_chars starts after a previous tab
865  *      @ldata: n_tty data
866  *
867  *      Add an operation to the echo buffer to erase a tab.
868  *
869  *      Called by the eraser function, which knows how many character
870  *      columns have been used since either a previous tab or the start
871  *      of input.  This information will be used later, along with
872  *      canon column (if applicable), to go back the correct number
873  *      of columns.
874  */
875
876 static void echo_erase_tab(unsigned int num_chars, int after_tab,
877                            struct n_tty_data *ldata)
878 {
879         add_echo_byte(ECHO_OP_START, ldata);
880         add_echo_byte(ECHO_OP_ERASE_TAB, ldata);
881
882         /* We only need to know this modulo 8 (tab spacing) */
883         num_chars &= 7;
884
885         /* Set the high bit as a flag if num_chars is after a previous tab */
886         if (after_tab)
887                 num_chars |= 0x80;
888
889         add_echo_byte(num_chars, ldata);
890 }
891
892 /**
893  *      echo_char_raw   -       echo a character raw
894  *      @c: unicode byte to echo
895  *      @tty: terminal device
896  *
897  *      Echo user input back onto the screen. This must be called only when
898  *      L_ECHO(tty) is true. Called from the driver receive_buf path.
899  *
900  *      This variant does not treat control characters specially.
901  */
902
903 static void echo_char_raw(unsigned char c, struct n_tty_data *ldata)
904 {
905         if (c == ECHO_OP_START) {
906                 add_echo_byte(ECHO_OP_START, ldata);
907                 add_echo_byte(ECHO_OP_START, ldata);
908         } else {
909                 add_echo_byte(c, ldata);
910         }
911 }
912
913 /**
914  *      echo_char       -       echo a character
915  *      @c: unicode byte to echo
916  *      @tty: terminal device
917  *
918  *      Echo user input back onto the screen. This must be called only when
919  *      L_ECHO(tty) is true. Called from the driver receive_buf path.
920  *
921  *      This variant tags control characters to be echoed as "^X"
922  *      (where X is the letter representing the control char).
923  */
924
925 static void echo_char(unsigned char c, struct tty_struct *tty)
926 {
927         struct n_tty_data *ldata = tty->disc_data;
928
929         if (c == ECHO_OP_START) {
930                 add_echo_byte(ECHO_OP_START, ldata);
931                 add_echo_byte(ECHO_OP_START, ldata);
932         } else {
933                 if (L_ECHOCTL(tty) && iscntrl(c) && c != '\t')
934                         add_echo_byte(ECHO_OP_START, ldata);
935                 add_echo_byte(c, ldata);
936         }
937 }
938
939 /**
940  *      finish_erasing          -       complete erase
941  *      @ldata: n_tty data
942  */
943
944 static inline void finish_erasing(struct n_tty_data *ldata)
945 {
946         if (ldata->erasing) {
947                 echo_char_raw('/', ldata);
948                 ldata->erasing = 0;
949         }
950 }
951
952 /**
953  *      eraser          -       handle erase function
954  *      @c: character input
955  *      @tty: terminal device
956  *
957  *      Perform erase and necessary output when an erase character is
958  *      present in the stream from the driver layer. Handles the complexities
959  *      of UTF-8 multibyte symbols.
960  *
961  *      n_tty_receive_buf()/producer path:
962  *              caller holds non-exclusive termios_rwsem
963  *              modifies read_head
964  *
965  *      Modifying the read_head is not considered a publish in this context
966  *      because canonical mode is active -- only canon_head publishes
967  */
968
969 static void eraser(unsigned char c, struct tty_struct *tty)
970 {
971         struct n_tty_data *ldata = tty->disc_data;
972         enum { ERASE, WERASE, KILL } kill_type;
973         size_t head;
974         size_t cnt;
975         int seen_alnums;
976
977         if (ldata->read_head == ldata->canon_head) {
978                 /* process_output('\a', tty); */ /* what do you think? */
979                 return;
980         }
981         if (c == ERASE_CHAR(tty))
982                 kill_type = ERASE;
983         else if (c == WERASE_CHAR(tty))
984                 kill_type = WERASE;
985         else {
986                 if (!L_ECHO(tty)) {
987                         ldata->read_head = ldata->canon_head;
988                         return;
989                 }
990                 if (!L_ECHOK(tty) || !L_ECHOKE(tty) || !L_ECHOE(tty)) {
991                         ldata->read_head = ldata->canon_head;
992                         finish_erasing(ldata);
993                         echo_char(KILL_CHAR(tty), tty);
994                         /* Add a newline if ECHOK is on and ECHOKE is off. */
995                         if (L_ECHOK(tty))
996                                 echo_char_raw('\n', ldata);
997                         return;
998                 }
999                 kill_type = KILL;
1000         }
1001
1002         seen_alnums = 0;
1003         while (ldata->read_head != ldata->canon_head) {
1004                 head = ldata->read_head;
1005
1006                 /* erase a single possibly multibyte character */
1007                 do {
1008                         head--;
1009                         c = read_buf(ldata, head);
1010                 } while (is_continuation(c, tty) && head != ldata->canon_head);
1011
1012                 /* do not partially erase */
1013                 if (is_continuation(c, tty))
1014                         break;
1015
1016                 if (kill_type == WERASE) {
1017                         /* Equivalent to BSD's ALTWERASE. */
1018                         if (isalnum(c) || c == '_')
1019                                 seen_alnums++;
1020                         else if (seen_alnums)
1021                                 break;
1022                 }
1023                 cnt = ldata->read_head - head;
1024                 ldata->read_head = head;
1025                 if (L_ECHO(tty)) {
1026                         if (L_ECHOPRT(tty)) {
1027                                 if (!ldata->erasing) {
1028                                         echo_char_raw('\\', ldata);
1029                                         ldata->erasing = 1;
1030                                 }
1031                                 /* if cnt > 1, output a multi-byte character */
1032                                 echo_char(c, tty);
1033                                 while (--cnt > 0) {
1034                                         head++;
1035                                         echo_char_raw(read_buf(ldata, head), ldata);
1036                                         echo_move_back_col(ldata);
1037                                 }
1038                         } else if (kill_type == ERASE && !L_ECHOE(tty)) {
1039                                 echo_char(ERASE_CHAR(tty), tty);
1040                         } else if (c == '\t') {
1041                                 unsigned int num_chars = 0;
1042                                 int after_tab = 0;
1043                                 size_t tail = ldata->read_head;
1044
1045                                 /*
1046                                  * Count the columns used for characters
1047                                  * since the start of input or after a
1048                                  * previous tab.
1049                                  * This info is used to go back the correct
1050                                  * number of columns.
1051                                  */
1052                                 while (tail != ldata->canon_head) {
1053                                         tail--;
1054                                         c = read_buf(ldata, tail);
1055                                         if (c == '\t') {
1056                                                 after_tab = 1;
1057                                                 break;
1058                                         } else if (iscntrl(c)) {
1059                                                 if (L_ECHOCTL(tty))
1060                                                         num_chars += 2;
1061                                         } else if (!is_continuation(c, tty)) {
1062                                                 num_chars++;
1063                                         }
1064                                 }
1065                                 echo_erase_tab(num_chars, after_tab, ldata);
1066                         } else {
1067                                 if (iscntrl(c) && L_ECHOCTL(tty)) {
1068                                         echo_char_raw('\b', ldata);
1069                                         echo_char_raw(' ', ldata);
1070                                         echo_char_raw('\b', ldata);
1071                                 }
1072                                 if (!iscntrl(c) || L_ECHOCTL(tty)) {
1073                                         echo_char_raw('\b', ldata);
1074                                         echo_char_raw(' ', ldata);
1075                                         echo_char_raw('\b', ldata);
1076                                 }
1077                         }
1078                 }
1079                 if (kill_type == ERASE)
1080                         break;
1081         }
1082         if (ldata->read_head == ldata->canon_head && L_ECHO(tty))
1083                 finish_erasing(ldata);
1084 }
1085
1086 /**
1087  *      isig            -       handle the ISIG optio
1088  *      @sig: signal
1089  *      @tty: terminal
1090  *
1091  *      Called when a signal is being sent due to terminal input.
1092  *      Called from the driver receive_buf path so serialized.
1093  *
1094  *      Locking: ctrl_lock
1095  */
1096
1097 static inline void isig(int sig, struct tty_struct *tty)
1098 {
1099         struct pid *tty_pgrp = tty_get_pgrp(tty);
1100         if (tty_pgrp) {
1101                 kill_pgrp(tty_pgrp, sig, 1);
1102                 put_pid(tty_pgrp);
1103         }
1104 }
1105
1106 /**
1107  *      n_tty_receive_break     -       handle break
1108  *      @tty: terminal
1109  *
1110  *      An RS232 break event has been hit in the incoming bitstream. This
1111  *      can cause a variety of events depending upon the termios settings.
1112  *
1113  *      n_tty_receive_buf()/producer path:
1114  *              caller holds non-exclusive termios_rwsem
1115  *              publishes read_head via put_tty_queue()
1116  *
1117  *      Note: may get exclusive termios_rwsem if flushing input buffer
1118  */
1119
1120 static inline void n_tty_receive_break(struct tty_struct *tty)
1121 {
1122         struct n_tty_data *ldata = tty->disc_data;
1123
1124         if (I_IGNBRK(tty))
1125                 return;
1126         if (I_BRKINT(tty)) {
1127                 isig(SIGINT, tty);
1128                 if (!L_NOFLSH(tty)) {
1129                         /* flushing needs exclusive termios_rwsem */
1130                         up_read(&tty->termios_rwsem);
1131                         n_tty_flush_buffer(tty);
1132                         tty_driver_flush_buffer(tty);
1133                         down_read(&tty->termios_rwsem);
1134                 }
1135                 return;
1136         }
1137         if (I_PARMRK(tty)) {
1138                 put_tty_queue('\377', ldata);
1139                 put_tty_queue('\0', ldata);
1140         }
1141         put_tty_queue('\0', ldata);
1142         wake_up_interruptible(&tty->read_wait);
1143 }
1144
1145 /**
1146  *      n_tty_receive_overrun   -       handle overrun reporting
1147  *      @tty: terminal
1148  *
1149  *      Data arrived faster than we could process it. While the tty
1150  *      driver has flagged this the bits that were missed are gone
1151  *      forever.
1152  *
1153  *      Called from the receive_buf path so single threaded. Does not
1154  *      need locking as num_overrun and overrun_time are function
1155  *      private.
1156  */
1157
1158 static inline void n_tty_receive_overrun(struct tty_struct *tty)
1159 {
1160         struct n_tty_data *ldata = tty->disc_data;
1161         char buf[64];
1162
1163         ldata->num_overrun++;
1164         if (time_after(jiffies, ldata->overrun_time + HZ) ||
1165                         time_after(ldata->overrun_time, jiffies)) {
1166                 printk(KERN_WARNING "%s: %d input overrun(s)\n",
1167                         tty_name(tty, buf),
1168                         ldata->num_overrun);
1169                 ldata->overrun_time = jiffies;
1170                 ldata->num_overrun = 0;
1171         }
1172 }
1173
1174 /**
1175  *      n_tty_receive_parity_error      -       error notifier
1176  *      @tty: terminal device
1177  *      @c: character
1178  *
1179  *      Process a parity error and queue the right data to indicate
1180  *      the error case if necessary.
1181  *
1182  *      n_tty_receive_buf()/producer path:
1183  *              caller holds non-exclusive termios_rwsem
1184  *              publishes read_head via put_tty_queue()
1185  */
1186 static inline void n_tty_receive_parity_error(struct tty_struct *tty,
1187                                               unsigned char c)
1188 {
1189         struct n_tty_data *ldata = tty->disc_data;
1190
1191         if (I_IGNPAR(tty))
1192                 return;
1193         if (I_PARMRK(tty)) {
1194                 put_tty_queue('\377', ldata);
1195                 put_tty_queue('\0', ldata);
1196                 put_tty_queue(c, ldata);
1197         } else  if (I_INPCK(tty))
1198                 put_tty_queue('\0', ldata);
1199         else
1200                 put_tty_queue(c, ldata);
1201         wake_up_interruptible(&tty->read_wait);
1202 }
1203
1204 /**
1205  *      n_tty_receive_char      -       perform processing
1206  *      @tty: terminal device
1207  *      @c: character
1208  *
1209  *      Process an individual character of input received from the driver.
1210  *      This is serialized with respect to itself by the rules for the
1211  *      driver above.
1212  *
1213  *      n_tty_receive_buf()/producer path:
1214  *              caller holds non-exclusive termios_rwsem
1215  *              publishes canon_head if canonical mode is active
1216  *              otherwise, publishes read_head via put_tty_queue()
1217  */
1218
1219 static inline void n_tty_receive_char(struct tty_struct *tty, unsigned char c)
1220 {
1221         struct n_tty_data *ldata = tty->disc_data;
1222         int parmrk;
1223
1224         if (ldata->raw) {
1225                 put_tty_queue(c, ldata);
1226                 return;
1227         }
1228
1229         if (I_ISTRIP(tty))
1230                 c &= 0x7f;
1231         if (I_IUCLC(tty) && L_IEXTEN(tty))
1232                 c = tolower(c);
1233
1234         if (L_EXTPROC(tty)) {
1235                 put_tty_queue(c, ldata);
1236                 return;
1237         }
1238
1239         if (tty->stopped && !tty->flow_stopped && I_IXON(tty) &&
1240             I_IXANY(tty) && c != START_CHAR(tty) && c != STOP_CHAR(tty) &&
1241             c != INTR_CHAR(tty) && c != QUIT_CHAR(tty) && c != SUSP_CHAR(tty)) {
1242                 start_tty(tty);
1243                 process_echoes(tty);
1244         }
1245
1246         if (tty->closing) {
1247                 if (I_IXON(tty)) {
1248                         if (c == START_CHAR(tty)) {
1249                                 start_tty(tty);
1250                                 process_echoes(tty);
1251                         } else if (c == STOP_CHAR(tty))
1252                                 stop_tty(tty);
1253                 }
1254                 return;
1255         }
1256
1257         /*
1258          * If the previous character was LNEXT, or we know that this
1259          * character is not one of the characters that we'll have to
1260          * handle specially, do shortcut processing to speed things
1261          * up.
1262          */
1263         if (!test_bit(c, ldata->process_char_map) || ldata->lnext) {
1264                 ldata->lnext = 0;
1265                 parmrk = (c == (unsigned char) '\377' && I_PARMRK(tty)) ? 1 : 0;
1266                 if (read_cnt(ldata) >= (N_TTY_BUF_SIZE - parmrk - 1)) {
1267                         /* beep if no space */
1268                         if (L_ECHO(tty))
1269                                 process_output('\a', tty);
1270                         return;
1271                 }
1272                 if (L_ECHO(tty)) {
1273                         finish_erasing(ldata);
1274                         /* Record the column of first canon char. */
1275                         if (ldata->canon_head == ldata->read_head)
1276                                 echo_set_canon_col(ldata);
1277                         echo_char(c, tty);
1278                         commit_echoes(tty);
1279                 }
1280                 if (parmrk)
1281                         put_tty_queue(c, ldata);
1282                 put_tty_queue(c, ldata);
1283                 return;
1284         }
1285
1286         if (I_IXON(tty)) {
1287                 if (c == START_CHAR(tty)) {
1288                         start_tty(tty);
1289                         commit_echoes(tty);
1290                         return;
1291                 }
1292                 if (c == STOP_CHAR(tty)) {
1293                         stop_tty(tty);
1294                         return;
1295                 }
1296         }
1297
1298         if (L_ISIG(tty)) {
1299                 int signal;
1300                 signal = SIGINT;
1301                 if (c == INTR_CHAR(tty))
1302                         goto send_signal;
1303                 signal = SIGQUIT;
1304                 if (c == QUIT_CHAR(tty))
1305                         goto send_signal;
1306                 signal = SIGTSTP;
1307                 if (c == SUSP_CHAR(tty)) {
1308 send_signal:
1309                         if (!L_NOFLSH(tty)) {
1310                                 /* flushing needs exclusive termios_rwsem */
1311                                 up_read(&tty->termios_rwsem);
1312                                 n_tty_flush_buffer(tty);
1313                                 tty_driver_flush_buffer(tty);
1314                                 down_read(&tty->termios_rwsem);
1315                         }
1316                         if (I_IXON(tty))
1317                                 start_tty(tty);
1318                         if (L_ECHO(tty)) {
1319                                 echo_char(c, tty);
1320                                 commit_echoes(tty);
1321                         }
1322                         isig(signal, tty);
1323                         return;
1324                 }
1325         }
1326
1327         if (c == '\r') {
1328                 if (I_IGNCR(tty))
1329                         return;
1330                 if (I_ICRNL(tty))
1331                         c = '\n';
1332         } else if (c == '\n' && I_INLCR(tty))
1333                 c = '\r';
1334
1335         if (ldata->icanon) {
1336                 if (c == ERASE_CHAR(tty) || c == KILL_CHAR(tty) ||
1337                     (c == WERASE_CHAR(tty) && L_IEXTEN(tty))) {
1338                         eraser(c, tty);
1339                         commit_echoes(tty);
1340                         return;
1341                 }
1342                 if (c == LNEXT_CHAR(tty) && L_IEXTEN(tty)) {
1343                         ldata->lnext = 1;
1344                         if (L_ECHO(tty)) {
1345                                 finish_erasing(ldata);
1346                                 if (L_ECHOCTL(tty)) {
1347                                         echo_char_raw('^', ldata);
1348                                         echo_char_raw('\b', ldata);
1349                                         commit_echoes(tty);
1350                                 }
1351                         }
1352                         return;
1353                 }
1354                 if (c == REPRINT_CHAR(tty) && L_ECHO(tty) &&
1355                     L_IEXTEN(tty)) {
1356                         size_t tail = ldata->canon_head;
1357
1358                         finish_erasing(ldata);
1359                         echo_char(c, tty);
1360                         echo_char_raw('\n', ldata);
1361                         while (tail != ldata->read_head) {
1362                                 echo_char(read_buf(ldata, tail), tty);
1363                                 tail++;
1364                         }
1365                         commit_echoes(tty);
1366                         return;
1367                 }
1368                 if (c == '\n') {
1369                         if (read_cnt(ldata) >= N_TTY_BUF_SIZE) {
1370                                 if (L_ECHO(tty))
1371                                         process_output('\a', tty);
1372                                 return;
1373                         }
1374                         if (L_ECHO(tty) || L_ECHONL(tty)) {
1375                                 echo_char_raw('\n', ldata);
1376                                 commit_echoes(tty);
1377                         }
1378                         goto handle_newline;
1379                 }
1380                 if (c == EOF_CHAR(tty)) {
1381                         if (read_cnt(ldata) >= N_TTY_BUF_SIZE)
1382                                 return;
1383                         if (ldata->canon_head != ldata->read_head)
1384                                 set_bit(TTY_PUSH, &tty->flags);
1385                         c = __DISABLED_CHAR;
1386                         goto handle_newline;
1387                 }
1388                 if ((c == EOL_CHAR(tty)) ||
1389                     (c == EOL2_CHAR(tty) && L_IEXTEN(tty))) {
1390                         parmrk = (c == (unsigned char) '\377' && I_PARMRK(tty))
1391                                  ? 1 : 0;
1392                         if (read_cnt(ldata) >= (N_TTY_BUF_SIZE - parmrk)) {
1393                                 if (L_ECHO(tty))
1394                                         process_output('\a', tty);
1395                                 return;
1396                         }
1397                         /*
1398                          * XXX are EOL_CHAR and EOL2_CHAR echoed?!?
1399                          */
1400                         if (L_ECHO(tty)) {
1401                                 /* Record the column of first canon char. */
1402                                 if (ldata->canon_head == ldata->read_head)
1403                                         echo_set_canon_col(ldata);
1404                                 echo_char(c, tty);
1405                                 commit_echoes(tty);
1406                         }
1407                         /*
1408                          * XXX does PARMRK doubling happen for
1409                          * EOL_CHAR and EOL2_CHAR?
1410                          */
1411                         if (parmrk)
1412                                 put_tty_queue(c, ldata);
1413
1414 handle_newline:
1415                         set_bit(ldata->read_head & (N_TTY_BUF_SIZE - 1), ldata->read_flags);
1416                         put_tty_queue(c, ldata);
1417                         ldata->canon_head = ldata->read_head;
1418                         kill_fasync(&tty->fasync, SIGIO, POLL_IN);
1419                         if (waitqueue_active(&tty->read_wait))
1420                                 wake_up_interruptible(&tty->read_wait);
1421                         return;
1422                 }
1423         }
1424
1425         parmrk = (c == (unsigned char) '\377' && I_PARMRK(tty)) ? 1 : 0;
1426         if (read_cnt(ldata) >= (N_TTY_BUF_SIZE - parmrk - 1)) {
1427                 /* beep if no space */
1428                 if (L_ECHO(tty))
1429                         process_output('\a', tty);
1430                 return;
1431         }
1432         if (L_ECHO(tty)) {
1433                 finish_erasing(ldata);
1434                 if (c == '\n')
1435                         echo_char_raw('\n', ldata);
1436                 else {
1437                         /* Record the column of first canon char. */
1438                         if (ldata->canon_head == ldata->read_head)
1439                                 echo_set_canon_col(ldata);
1440                         echo_char(c, tty);
1441                 }
1442                 commit_echoes(tty);
1443         }
1444
1445         if (parmrk)
1446                 put_tty_queue(c, ldata);
1447
1448         put_tty_queue(c, ldata);
1449 }
1450
1451 /**
1452  *      n_tty_receive_buf       -       data receive
1453  *      @tty: terminal device
1454  *      @cp: buffer
1455  *      @fp: flag buffer
1456  *      @count: characters
1457  *
1458  *      Called by the terminal driver when a block of characters has
1459  *      been received. This function must be called from soft contexts
1460  *      not from interrupt context. The driver is responsible for making
1461  *      calls one at a time and in order (or using flush_to_ldisc)
1462  *
1463  *      n_tty_receive_buf()/producer path:
1464  *              claims non-exclusive termios_rwsem
1465  *              publishes read_head and canon_head
1466  */
1467
1468 static void __receive_buf(struct tty_struct *tty, const unsigned char *cp,
1469                           char *fp, int count)
1470 {
1471         struct n_tty_data *ldata = tty->disc_data;
1472         const unsigned char *p;
1473         char *f, flags = TTY_NORMAL;
1474         char    buf[64];
1475
1476         if (ldata->real_raw) {
1477                 size_t n, head;
1478
1479                 head = ldata->read_head & (N_TTY_BUF_SIZE - 1);
1480                 n = N_TTY_BUF_SIZE - max(read_cnt(ldata), head);
1481                 n = min_t(size_t, count, n);
1482                 memcpy(read_buf_addr(ldata, head), cp, n);
1483                 ldata->read_head += n;
1484                 cp += n;
1485                 count -= n;
1486
1487                 head = ldata->read_head & (N_TTY_BUF_SIZE - 1);
1488                 n = N_TTY_BUF_SIZE - max(read_cnt(ldata), head);
1489                 n = min_t(size_t, count, n);
1490                 memcpy(read_buf_addr(ldata, head), cp, n);
1491                 ldata->read_head += n;
1492         } else {
1493                 int i;
1494
1495                 for (i = count, p = cp, f = fp; i; i--, p++) {
1496                         if (f)
1497                                 flags = *f++;
1498                         switch (flags) {
1499                         case TTY_NORMAL:
1500                                 n_tty_receive_char(tty, *p);
1501                                 break;
1502                         case TTY_BREAK:
1503                                 n_tty_receive_break(tty);
1504                                 break;
1505                         case TTY_PARITY:
1506                         case TTY_FRAME:
1507                                 n_tty_receive_parity_error(tty, *p);
1508                                 break;
1509                         case TTY_OVERRUN:
1510                                 n_tty_receive_overrun(tty);
1511                                 break;
1512                         default:
1513                                 printk(KERN_ERR "%s: unknown flag %d\n",
1514                                        tty_name(tty, buf), flags);
1515                                 break;
1516                         }
1517                 }
1518                 if (tty->ops->flush_chars)
1519                         tty->ops->flush_chars(tty);
1520         }
1521
1522         if ((!ldata->icanon && (read_cnt(ldata) >= ldata->minimum_to_wake)) ||
1523                 L_EXTPROC(tty)) {
1524                 kill_fasync(&tty->fasync, SIGIO, POLL_IN);
1525                 if (waitqueue_active(&tty->read_wait))
1526                         wake_up_interruptible(&tty->read_wait);
1527         }
1528
1529         n_tty_check_throttle(tty);
1530 }
1531
1532 static void n_tty_receive_buf(struct tty_struct *tty, const unsigned char *cp,
1533                               char *fp, int count)
1534 {
1535         down_read(&tty->termios_rwsem);
1536         __receive_buf(tty, cp, fp, count);
1537         up_read(&tty->termios_rwsem);
1538 }
1539
1540 static int n_tty_receive_buf2(struct tty_struct *tty, const unsigned char *cp,
1541                               char *fp, int count)
1542 {
1543         struct n_tty_data *ldata = tty->disc_data;
1544         int room;
1545
1546         down_read(&tty->termios_rwsem);
1547
1548         tty->receive_room = room = receive_room(tty);
1549         if (!room)
1550                 ldata->no_room = 1;
1551         count = min(count, room);
1552         if (count)
1553                 __receive_buf(tty, cp, fp, count);
1554
1555         up_read(&tty->termios_rwsem);
1556
1557         return count;
1558 }
1559
1560 int is_ignored(int sig)
1561 {
1562         return (sigismember(&current->blocked, sig) ||
1563                 current->sighand->action[sig-1].sa.sa_handler == SIG_IGN);
1564 }
1565
1566 /**
1567  *      n_tty_set_termios       -       termios data changed
1568  *      @tty: terminal
1569  *      @old: previous data
1570  *
1571  *      Called by the tty layer when the user changes termios flags so
1572  *      that the line discipline can plan ahead. This function cannot sleep
1573  *      and is protected from re-entry by the tty layer. The user is
1574  *      guaranteed that this function will not be re-entered or in progress
1575  *      when the ldisc is closed.
1576  *
1577  *      Locking: Caller holds tty->termios_rwsem
1578  */
1579
1580 static void n_tty_set_termios(struct tty_struct *tty, struct ktermios *old)
1581 {
1582         struct n_tty_data *ldata = tty->disc_data;
1583         int canon_change = 1;
1584
1585         if (old)
1586                 canon_change = (old->c_lflag ^ tty->termios.c_lflag) & ICANON;
1587         if (canon_change) {
1588                 bitmap_zero(ldata->read_flags, N_TTY_BUF_SIZE);
1589                 ldata->canon_head = ldata->read_tail;
1590                 ldata->erasing = 0;
1591                 ldata->lnext = 0;
1592         }
1593
1594         if (canon_change && !L_ICANON(tty) && read_cnt(ldata))
1595                 wake_up_interruptible(&tty->read_wait);
1596
1597         ldata->icanon = (L_ICANON(tty) != 0);
1598
1599         if (I_ISTRIP(tty) || I_IUCLC(tty) || I_IGNCR(tty) ||
1600             I_ICRNL(tty) || I_INLCR(tty) || L_ICANON(tty) ||
1601             I_IXON(tty) || L_ISIG(tty) || L_ECHO(tty) ||
1602             I_PARMRK(tty)) {
1603                 bitmap_zero(ldata->process_char_map, 256);
1604
1605                 if (I_IGNCR(tty) || I_ICRNL(tty))
1606                         set_bit('\r', ldata->process_char_map);
1607                 if (I_INLCR(tty))
1608                         set_bit('\n', ldata->process_char_map);
1609
1610                 if (L_ICANON(tty)) {
1611                         set_bit(ERASE_CHAR(tty), ldata->process_char_map);
1612                         set_bit(KILL_CHAR(tty), ldata->process_char_map);
1613                         set_bit(EOF_CHAR(tty), ldata->process_char_map);
1614                         set_bit('\n', ldata->process_char_map);
1615                         set_bit(EOL_CHAR(tty), ldata->process_char_map);
1616                         if (L_IEXTEN(tty)) {
1617                                 set_bit(WERASE_CHAR(tty),
1618                                         ldata->process_char_map);
1619                                 set_bit(LNEXT_CHAR(tty),
1620                                         ldata->process_char_map);
1621                                 set_bit(EOL2_CHAR(tty),
1622                                         ldata->process_char_map);
1623                                 if (L_ECHO(tty))
1624                                         set_bit(REPRINT_CHAR(tty),
1625                                                 ldata->process_char_map);
1626                         }
1627                 }
1628                 if (I_IXON(tty)) {
1629                         set_bit(START_CHAR(tty), ldata->process_char_map);
1630                         set_bit(STOP_CHAR(tty), ldata->process_char_map);
1631                 }
1632                 if (L_ISIG(tty)) {
1633                         set_bit(INTR_CHAR(tty), ldata->process_char_map);
1634                         set_bit(QUIT_CHAR(tty), ldata->process_char_map);
1635                         set_bit(SUSP_CHAR(tty), ldata->process_char_map);
1636                 }
1637                 clear_bit(__DISABLED_CHAR, ldata->process_char_map);
1638                 ldata->raw = 0;
1639                 ldata->real_raw = 0;
1640         } else {
1641                 ldata->raw = 1;
1642                 if ((I_IGNBRK(tty) || (!I_BRKINT(tty) && !I_PARMRK(tty))) &&
1643                     (I_IGNPAR(tty) || !I_INPCK(tty)) &&
1644                     (tty->driver->flags & TTY_DRIVER_REAL_RAW))
1645                         ldata->real_raw = 1;
1646                 else
1647                         ldata->real_raw = 0;
1648         }
1649         n_tty_set_room(tty);
1650         /*
1651          * Fix tty hang when I_IXON(tty) is cleared, but the tty
1652          * been stopped by STOP_CHAR(tty) before it.
1653          */
1654         if (!I_IXON(tty) && old && (old->c_iflag & IXON) && !tty->flow_stopped) {
1655                 start_tty(tty);
1656         }
1657
1658         /* The termios change make the tty ready for I/O */
1659         wake_up_interruptible(&tty->write_wait);
1660         wake_up_interruptible(&tty->read_wait);
1661 }
1662
1663 /**
1664  *      n_tty_close             -       close the ldisc for this tty
1665  *      @tty: device
1666  *
1667  *      Called from the terminal layer when this line discipline is
1668  *      being shut down, either because of a close or becsuse of a
1669  *      discipline change. The function will not be called while other
1670  *      ldisc methods are in progress.
1671  */
1672
1673 static void n_tty_close(struct tty_struct *tty)
1674 {
1675         struct n_tty_data *ldata = tty->disc_data;
1676
1677         if (tty->link)
1678                 n_tty_packet_mode_flush(tty);
1679
1680         kfree(ldata->read_buf);
1681         kfree(ldata->echo_buf);
1682         kfree(ldata);
1683         tty->disc_data = NULL;
1684 }
1685
1686 /**
1687  *      n_tty_open              -       open an ldisc
1688  *      @tty: terminal to open
1689  *
1690  *      Called when this line discipline is being attached to the
1691  *      terminal device. Can sleep. Called serialized so that no
1692  *      other events will occur in parallel. No further open will occur
1693  *      until a close.
1694  */
1695
1696 static int n_tty_open(struct tty_struct *tty)
1697 {
1698         struct n_tty_data *ldata;
1699
1700         ldata = kzalloc(sizeof(*ldata), GFP_KERNEL);
1701         if (!ldata)
1702                 goto err;
1703
1704         ldata->overrun_time = jiffies;
1705         mutex_init(&ldata->atomic_read_lock);
1706         mutex_init(&ldata->output_lock);
1707
1708         /* These are ugly. Currently a malloc failure here can panic */
1709         ldata->read_buf = kzalloc(N_TTY_BUF_SIZE, GFP_KERNEL);
1710         ldata->echo_buf = kzalloc(N_TTY_BUF_SIZE, GFP_KERNEL);
1711         if (!ldata->read_buf || !ldata->echo_buf)
1712                 goto err_free_bufs;
1713
1714         tty->disc_data = ldata;
1715         reset_buffer_flags(tty->disc_data);
1716         ldata->column = 0;
1717         ldata->minimum_to_wake = 1;
1718         tty->closing = 0;
1719         /* indicate buffer work may resume */
1720         clear_bit(TTY_LDISC_HALTED, &tty->flags);
1721         n_tty_set_termios(tty, NULL);
1722         tty_unthrottle(tty);
1723
1724         return 0;
1725 err_free_bufs:
1726         kfree(ldata->read_buf);
1727         kfree(ldata->echo_buf);
1728         kfree(ldata);
1729 err:
1730         return -ENOMEM;
1731 }
1732
1733 static inline int input_available_p(struct tty_struct *tty, int amt)
1734 {
1735         struct n_tty_data *ldata = tty->disc_data;
1736
1737         if (ldata->icanon && !L_EXTPROC(tty)) {
1738                 if (ldata->canon_head != ldata->read_tail)
1739                         return 1;
1740         } else if (read_cnt(ldata) >= (amt ? amt : 1))
1741                 return 1;
1742
1743         return 0;
1744 }
1745
1746 /**
1747  *      copy_from_read_buf      -       copy read data directly
1748  *      @tty: terminal device
1749  *      @b: user data
1750  *      @nr: size of data
1751  *
1752  *      Helper function to speed up n_tty_read.  It is only called when
1753  *      ICANON is off; it copies characters straight from the tty queue to
1754  *      user space directly.  It can be profitably called twice; once to
1755  *      drain the space from the tail pointer to the (physical) end of the
1756  *      buffer, and once to drain the space from the (physical) beginning of
1757  *      the buffer to head pointer.
1758  *
1759  *      Called under the ldata->atomic_read_lock sem
1760  *
1761  *      n_tty_read()/consumer path:
1762  *              caller holds non-exclusive termios_rwsem
1763  *              read_tail published
1764  */
1765
1766 static int copy_from_read_buf(struct tty_struct *tty,
1767                                       unsigned char __user **b,
1768                                       size_t *nr)
1769
1770 {
1771         struct n_tty_data *ldata = tty->disc_data;
1772         int retval;
1773         size_t n;
1774         bool is_eof;
1775         size_t tail = ldata->read_tail & (N_TTY_BUF_SIZE - 1);
1776
1777         retval = 0;
1778         n = min(read_cnt(ldata), N_TTY_BUF_SIZE - tail);
1779         n = min(*nr, n);
1780         if (n) {
1781                 retval = copy_to_user(*b, read_buf_addr(ldata, tail), n);
1782                 n -= retval;
1783                 is_eof = n == 1 && read_buf(ldata, tail) == EOF_CHAR(tty);
1784                 tty_audit_add_data(tty, read_buf_addr(ldata, tail), n,
1785                                 ldata->icanon);
1786                 ldata->read_tail += n;
1787                 /* Turn single EOF into zero-length read */
1788                 if (L_EXTPROC(tty) && ldata->icanon && is_eof && !read_cnt(ldata))
1789                         n = 0;
1790                 *b += n;
1791                 *nr -= n;
1792         }
1793         return retval;
1794 }
1795
1796 /**
1797  *      canon_copy_from_read_buf        -       copy read data in canonical mode
1798  *      @tty: terminal device
1799  *      @b: user data
1800  *      @nr: size of data
1801  *
1802  *      Helper function for n_tty_read.  It is only called when ICANON is on;
1803  *      it copies one line of input up to and including the line-delimiting
1804  *      character into the user-space buffer.
1805  *
1806  *      Called under the atomic_read_lock mutex
1807  *
1808  *      n_tty_read()/consumer path:
1809  *              caller holds non-exclusive termios_rwsem
1810  *              read_tail published
1811  */
1812
1813 static int canon_copy_from_read_buf(struct tty_struct *tty,
1814                                     unsigned char __user **b,
1815                                     size_t *nr)
1816 {
1817         struct n_tty_data *ldata = tty->disc_data;
1818         size_t n, size, more, c;
1819         size_t eol;
1820         size_t tail;
1821         int ret, found = 0;
1822
1823         /* N.B. avoid overrun if nr == 0 */
1824         n = min(*nr, read_cnt(ldata));
1825         if (!n)
1826                 return 0;
1827
1828         tail = ldata->read_tail & (N_TTY_BUF_SIZE - 1);
1829         size = min_t(size_t, tail + n, N_TTY_BUF_SIZE);
1830
1831         n_tty_trace("%s: nr:%zu tail:%zu n:%zu size:%zu\n",
1832                     __func__, *nr, tail, n, size);
1833
1834         eol = find_next_bit(ldata->read_flags, size, tail);
1835         more = n - (size - tail);
1836         if (eol == N_TTY_BUF_SIZE && more) {
1837                 /* scan wrapped without finding set bit */
1838                 eol = find_next_bit(ldata->read_flags, more, 0);
1839                 if (eol != more)
1840                         found = 1;
1841         } else if (eol != size)
1842                 found = 1;
1843
1844         size = N_TTY_BUF_SIZE - tail;
1845         n = (found + eol + size) & (N_TTY_BUF_SIZE - 1);
1846         c = n;
1847
1848         if (found && read_buf(ldata, eol) == __DISABLED_CHAR)
1849                 n--;
1850
1851         n_tty_trace("%s: eol:%zu found:%d n:%zu c:%zu size:%zu more:%zu\n",
1852                     __func__, eol, found, n, c, size, more);
1853
1854         if (n > size) {
1855                 ret = copy_to_user(*b, read_buf_addr(ldata, tail), size);
1856                 if (ret)
1857                         return -EFAULT;
1858                 ret = copy_to_user(*b + size, ldata->read_buf, n - size);
1859         } else
1860                 ret = copy_to_user(*b, read_buf_addr(ldata, tail), n);
1861
1862         if (ret)
1863                 return -EFAULT;
1864         *b += n;
1865         *nr -= n;
1866
1867         if (found)
1868                 clear_bit(eol, ldata->read_flags);
1869         smp_mb__after_clear_bit();
1870         ldata->read_tail += c;
1871
1872         if (found)
1873                 tty_audit_push(tty);
1874         return 0;
1875 }
1876
1877 extern ssize_t redirected_tty_write(struct file *, const char __user *,
1878                                                         size_t, loff_t *);
1879
1880 /**
1881  *      job_control             -       check job control
1882  *      @tty: tty
1883  *      @file: file handle
1884  *
1885  *      Perform job control management checks on this file/tty descriptor
1886  *      and if appropriate send any needed signals and return a negative
1887  *      error code if action should be taken.
1888  *
1889  *      Locking: redirected write test is safe
1890  *               current->signal->tty check is safe
1891  *               ctrl_lock to safely reference tty->pgrp
1892  */
1893
1894 static int job_control(struct tty_struct *tty, struct file *file)
1895 {
1896         /* Job control check -- must be done at start and after
1897            every sleep (POSIX.1 7.1.1.4). */
1898         /* NOTE: not yet done after every sleep pending a thorough
1899            check of the logic of this change. -- jlc */
1900         /* don't stop on /dev/console */
1901         if (file->f_op->write == redirected_tty_write ||
1902             current->signal->tty != tty)
1903                 return 0;
1904
1905         spin_lock_irq(&tty->ctrl_lock);
1906         if (!tty->pgrp)
1907                 printk(KERN_ERR "n_tty_read: no tty->pgrp!\n");
1908         else if (task_pgrp(current) != tty->pgrp) {
1909                 spin_unlock_irq(&tty->ctrl_lock);
1910                 if (is_ignored(SIGTTIN) || is_current_pgrp_orphaned())
1911                         return -EIO;
1912                 kill_pgrp(task_pgrp(current), SIGTTIN, 1);
1913                 set_thread_flag(TIF_SIGPENDING);
1914                 return -ERESTARTSYS;
1915         }
1916         spin_unlock_irq(&tty->ctrl_lock);
1917         return 0;
1918 }
1919
1920
1921 /**
1922  *      n_tty_read              -       read function for tty
1923  *      @tty: tty device
1924  *      @file: file object
1925  *      @buf: userspace buffer pointer
1926  *      @nr: size of I/O
1927  *
1928  *      Perform reads for the line discipline. We are guaranteed that the
1929  *      line discipline will not be closed under us but we may get multiple
1930  *      parallel readers and must handle this ourselves. We may also get
1931  *      a hangup. Always called in user context, may sleep.
1932  *
1933  *      This code must be sure never to sleep through a hangup.
1934  *
1935  *      n_tty_read()/consumer path:
1936  *              claims non-exclusive termios_rwsem
1937  *              publishes read_tail
1938  */
1939
1940 static ssize_t n_tty_read(struct tty_struct *tty, struct file *file,
1941                          unsigned char __user *buf, size_t nr)
1942 {
1943         struct n_tty_data *ldata = tty->disc_data;
1944         unsigned char __user *b = buf;
1945         DECLARE_WAITQUEUE(wait, current);
1946         int c;
1947         int minimum, time;
1948         ssize_t retval = 0;
1949         ssize_t size;
1950         long timeout;
1951         unsigned long flags;
1952         int packet;
1953
1954 do_it_again:
1955         c = job_control(tty, file);
1956         if (c < 0)
1957                 return c;
1958
1959         down_read(&tty->termios_rwsem);
1960
1961         minimum = time = 0;
1962         timeout = MAX_SCHEDULE_TIMEOUT;
1963         if (!ldata->icanon) {
1964                 minimum = MIN_CHAR(tty);
1965                 if (minimum) {
1966                         time = (HZ / 10) * TIME_CHAR(tty);
1967                         if (time)
1968                                 ldata->minimum_to_wake = 1;
1969                         else if (!waitqueue_active(&tty->read_wait) ||
1970                                  (ldata->minimum_to_wake > minimum))
1971                                 ldata->minimum_to_wake = minimum;
1972                 } else {
1973                         timeout = (HZ / 10) * TIME_CHAR(tty);
1974                         ldata->minimum_to_wake = minimum = 1;
1975                 }
1976         }
1977
1978         /*
1979          *      Internal serialization of reads.
1980          */
1981         if (file->f_flags & O_NONBLOCK) {
1982                 if (!mutex_trylock(&ldata->atomic_read_lock)) {
1983                         up_read(&tty->termios_rwsem);
1984                         return -EAGAIN;
1985                 }
1986         } else {
1987                 if (mutex_lock_interruptible(&ldata->atomic_read_lock)) {
1988                         up_read(&tty->termios_rwsem);
1989                         return -ERESTARTSYS;
1990                 }
1991         }
1992         packet = tty->packet;
1993
1994         add_wait_queue(&tty->read_wait, &wait);
1995         while (nr) {
1996                 /* First test for status change. */
1997                 if (packet && tty->link->ctrl_status) {
1998                         unsigned char cs;
1999                         if (b != buf)
2000                                 break;
2001                         spin_lock_irqsave(&tty->link->ctrl_lock, flags);
2002                         cs = tty->link->ctrl_status;
2003                         tty->link->ctrl_status = 0;
2004                         spin_unlock_irqrestore(&tty->link->ctrl_lock, flags);
2005                         if (tty_put_user(tty, cs, b++)) {
2006                                 retval = -EFAULT;
2007                                 b--;
2008                                 break;
2009                         }
2010                         nr--;
2011                         break;
2012                 }
2013                 /* This statement must be first before checking for input
2014                    so that any interrupt will set the state back to
2015                    TASK_RUNNING. */
2016                 set_current_state(TASK_INTERRUPTIBLE);
2017
2018                 if (((minimum - (b - buf)) < ldata->minimum_to_wake) &&
2019                     ((minimum - (b - buf)) >= 1))
2020                         ldata->minimum_to_wake = (minimum - (b - buf));
2021
2022                 if (!input_available_p(tty, 0)) {
2023                         if (test_bit(TTY_OTHER_CLOSED, &tty->flags)) {
2024                                 retval = -EIO;
2025                                 break;
2026                         }
2027                         if (tty_hung_up_p(file))
2028                                 break;
2029                         if (!timeout)
2030                                 break;
2031                         if (file->f_flags & O_NONBLOCK) {
2032                                 retval = -EAGAIN;
2033                                 break;
2034                         }
2035                         if (signal_pending(current)) {
2036                                 retval = -ERESTARTSYS;
2037                                 break;
2038                         }
2039                         n_tty_set_room(tty);
2040                         up_read(&tty->termios_rwsem);
2041
2042                         timeout = schedule_timeout(timeout);
2043
2044                         down_read(&tty->termios_rwsem);
2045                         continue;
2046                 }
2047                 __set_current_state(TASK_RUNNING);
2048
2049                 /* Deal with packet mode. */
2050                 if (packet && b == buf) {
2051                         if (tty_put_user(tty, TIOCPKT_DATA, b++)) {
2052                                 retval = -EFAULT;
2053                                 b--;
2054                                 break;
2055                         }
2056                         nr--;
2057                 }
2058
2059                 if (ldata->icanon && !L_EXTPROC(tty)) {
2060                         retval = canon_copy_from_read_buf(tty, &b, &nr);
2061                         if (retval)
2062                                 break;
2063                 } else {
2064                         int uncopied;
2065                         /* The copy function takes the read lock and handles
2066                            locking internally for this case */
2067                         uncopied = copy_from_read_buf(tty, &b, &nr);
2068                         uncopied += copy_from_read_buf(tty, &b, &nr);
2069                         if (uncopied) {
2070                                 retval = -EFAULT;
2071                                 break;
2072                         }
2073                 }
2074
2075                 n_tty_check_unthrottle(tty);
2076
2077                 if (b - buf >= minimum)
2078                         break;
2079                 if (time)
2080                         timeout = time;
2081         }
2082         mutex_unlock(&ldata->atomic_read_lock);
2083         remove_wait_queue(&tty->read_wait, &wait);
2084
2085         if (!waitqueue_active(&tty->read_wait))
2086                 ldata->minimum_to_wake = minimum;
2087
2088         __set_current_state(TASK_RUNNING);
2089         size = b - buf;
2090         if (size) {
2091                 retval = size;
2092                 if (nr)
2093                         clear_bit(TTY_PUSH, &tty->flags);
2094         } else if (test_and_clear_bit(TTY_PUSH, &tty->flags)) {
2095                 up_read(&tty->termios_rwsem);
2096                 goto do_it_again;
2097         }
2098
2099         n_tty_set_room(tty);
2100         up_read(&tty->termios_rwsem);
2101         return retval;
2102 }
2103
2104 /**
2105  *      n_tty_write             -       write function for tty
2106  *      @tty: tty device
2107  *      @file: file object
2108  *      @buf: userspace buffer pointer
2109  *      @nr: size of I/O
2110  *
2111  *      Write function of the terminal device.  This is serialized with
2112  *      respect to other write callers but not to termios changes, reads
2113  *      and other such events.  Since the receive code will echo characters,
2114  *      thus calling driver write methods, the output_lock is used in
2115  *      the output processing functions called here as well as in the
2116  *      echo processing function to protect the column state and space
2117  *      left in the buffer.
2118  *
2119  *      This code must be sure never to sleep through a hangup.
2120  *
2121  *      Locking: output_lock to protect column state and space left
2122  *               (note that the process_output*() functions take this
2123  *                lock themselves)
2124  */
2125
2126 static ssize_t n_tty_write(struct tty_struct *tty, struct file *file,
2127                            const unsigned char *buf, size_t nr)
2128 {
2129         const unsigned char *b = buf;
2130         DECLARE_WAITQUEUE(wait, current);
2131         int c;
2132         ssize_t retval = 0;
2133
2134         /* Job control check -- must be done at start (POSIX.1 7.1.1.4). */
2135         if (L_TOSTOP(tty) && file->f_op->write != redirected_tty_write) {
2136                 retval = tty_check_change(tty);
2137                 if (retval)
2138                         return retval;
2139         }
2140
2141         down_read(&tty->termios_rwsem);
2142
2143         /* Write out any echoed characters that are still pending */
2144         process_echoes(tty);
2145
2146         add_wait_queue(&tty->write_wait, &wait);
2147         while (1) {
2148                 set_current_state(TASK_INTERRUPTIBLE);
2149                 if (signal_pending(current)) {
2150                         retval = -ERESTARTSYS;
2151                         break;
2152                 }
2153                 if (tty_hung_up_p(file) || (tty->link && !tty->link->count)) {
2154                         retval = -EIO;
2155                         break;
2156                 }
2157                 if (O_OPOST(tty)) {
2158                         while (nr > 0) {
2159                                 ssize_t num = process_output_block(tty, b, nr);
2160                                 if (num < 0) {
2161                                         if (num == -EAGAIN)
2162                                                 break;
2163                                         retval = num;
2164                                         goto break_out;
2165                                 }
2166                                 b += num;
2167                                 nr -= num;
2168                                 if (nr == 0)
2169                                         break;
2170                                 c = *b;
2171                                 if (process_output(c, tty) < 0)
2172                                         break;
2173                                 b++; nr--;
2174                         }
2175                         if (tty->ops->flush_chars)
2176                                 tty->ops->flush_chars(tty);
2177                 } else {
2178                         while (nr > 0) {
2179                                 c = tty->ops->write(tty, b, nr);
2180                                 if (c < 0) {
2181                                         retval = c;
2182                                         goto break_out;
2183                                 }
2184                                 if (!c)
2185                                         break;
2186                                 b += c;
2187                                 nr -= c;
2188                         }
2189                 }
2190                 if (!nr)
2191                         break;
2192                 if (file->f_flags & O_NONBLOCK) {
2193                         retval = -EAGAIN;
2194                         break;
2195                 }
2196                 up_read(&tty->termios_rwsem);
2197
2198                 schedule();
2199
2200                 down_read(&tty->termios_rwsem);
2201         }
2202 break_out:
2203         __set_current_state(TASK_RUNNING);
2204         remove_wait_queue(&tty->write_wait, &wait);
2205         if (b - buf != nr && tty->fasync)
2206                 set_bit(TTY_DO_WRITE_WAKEUP, &tty->flags);
2207         up_read(&tty->termios_rwsem);
2208         return (b - buf) ? b - buf : retval;
2209 }
2210
2211 /**
2212  *      n_tty_poll              -       poll method for N_TTY
2213  *      @tty: terminal device
2214  *      @file: file accessing it
2215  *      @wait: poll table
2216  *
2217  *      Called when the line discipline is asked to poll() for data or
2218  *      for special events. This code is not serialized with respect to
2219  *      other events save open/close.
2220  *
2221  *      This code must be sure never to sleep through a hangup.
2222  *      Called without the kernel lock held - fine
2223  */
2224
2225 static unsigned int n_tty_poll(struct tty_struct *tty, struct file *file,
2226                                                         poll_table *wait)
2227 {
2228         struct n_tty_data *ldata = tty->disc_data;
2229         unsigned int mask = 0;
2230
2231         poll_wait(file, &tty->read_wait, wait);
2232         poll_wait(file, &tty->write_wait, wait);
2233         if (input_available_p(tty, TIME_CHAR(tty) ? 0 : MIN_CHAR(tty)))
2234                 mask |= POLLIN | POLLRDNORM;
2235         if (tty->packet && tty->link->ctrl_status)
2236                 mask |= POLLPRI | POLLIN | POLLRDNORM;
2237         if (test_bit(TTY_OTHER_CLOSED, &tty->flags))
2238                 mask |= POLLHUP;
2239         if (tty_hung_up_p(file))
2240                 mask |= POLLHUP;
2241         if (!(mask & (POLLHUP | POLLIN | POLLRDNORM))) {
2242                 if (MIN_CHAR(tty) && !TIME_CHAR(tty))
2243                         ldata->minimum_to_wake = MIN_CHAR(tty);
2244                 else
2245                         ldata->minimum_to_wake = 1;
2246         }
2247         if (tty->ops->write && !tty_is_writelocked(tty) &&
2248                         tty_chars_in_buffer(tty) < WAKEUP_CHARS &&
2249                         tty_write_room(tty) > 0)
2250                 mask |= POLLOUT | POLLWRNORM;
2251         return mask;
2252 }
2253
2254 static unsigned long inq_canon(struct n_tty_data *ldata)
2255 {
2256         size_t nr, head, tail;
2257
2258         if (ldata->canon_head == ldata->read_tail)
2259                 return 0;
2260         head = ldata->canon_head;
2261         tail = ldata->read_tail;
2262         nr = head - tail;
2263         /* Skip EOF-chars.. */
2264         while (head != tail) {
2265                 if (test_bit(tail & (N_TTY_BUF_SIZE - 1), ldata->read_flags) &&
2266                     read_buf(ldata, tail) == __DISABLED_CHAR)
2267                         nr--;
2268                 tail++;
2269         }
2270         return nr;
2271 }
2272
2273 static int n_tty_ioctl(struct tty_struct *tty, struct file *file,
2274                        unsigned int cmd, unsigned long arg)
2275 {
2276         struct n_tty_data *ldata = tty->disc_data;
2277         int retval;
2278
2279         switch (cmd) {
2280         case TIOCOUTQ:
2281                 return put_user(tty_chars_in_buffer(tty), (int __user *) arg);
2282         case TIOCINQ:
2283                 down_write(&tty->termios_rwsem);
2284                 if (L_ICANON(tty))
2285                         retval = inq_canon(ldata);
2286                 else
2287                         retval = read_cnt(ldata);
2288                 up_write(&tty->termios_rwsem);
2289                 return put_user(retval, (unsigned int __user *) arg);
2290         default:
2291                 return n_tty_ioctl_helper(tty, file, cmd, arg);
2292         }
2293 }
2294
2295 static void n_tty_fasync(struct tty_struct *tty, int on)
2296 {
2297         struct n_tty_data *ldata = tty->disc_data;
2298
2299         if (!waitqueue_active(&tty->read_wait)) {
2300                 if (on)
2301                         ldata->minimum_to_wake = 1;
2302                 else if (!tty->fasync)
2303                         ldata->minimum_to_wake = N_TTY_BUF_SIZE;
2304         }
2305 }
2306
2307 struct tty_ldisc_ops tty_ldisc_N_TTY = {
2308         .magic           = TTY_LDISC_MAGIC,
2309         .name            = "n_tty",
2310         .open            = n_tty_open,
2311         .close           = n_tty_close,
2312         .flush_buffer    = n_tty_flush_buffer,
2313         .chars_in_buffer = n_tty_chars_in_buffer,
2314         .read            = n_tty_read,
2315         .write           = n_tty_write,
2316         .ioctl           = n_tty_ioctl,
2317         .set_termios     = n_tty_set_termios,
2318         .poll            = n_tty_poll,
2319         .receive_buf     = n_tty_receive_buf,
2320         .write_wakeup    = n_tty_write_wakeup,
2321         .fasync          = n_tty_fasync,
2322         .receive_buf2    = n_tty_receive_buf2,
2323 };
2324
2325 /**
2326  *      n_tty_inherit_ops       -       inherit N_TTY methods
2327  *      @ops: struct tty_ldisc_ops where to save N_TTY methods
2328  *
2329  *      Enables a 'subclass' line discipline to 'inherit' N_TTY
2330  *      methods.
2331  */
2332
2333 void n_tty_inherit_ops(struct tty_ldisc_ops *ops)
2334 {
2335         *ops = tty_ldisc_N_TTY;
2336         ops->owner = NULL;
2337         ops->refcount = ops->flags = 0;
2338 }
2339 EXPORT_SYMBOL_GPL(n_tty_inherit_ops);