5ee0b2be7d729fa2becbc6550ae3a62a2e90ec77
[firefly-linux-kernel-4.4.55.git] / drivers / tty / tty_ldisc.c
1 #include <linux/types.h>
2 #include <linux/errno.h>
3 #include <linux/kmod.h>
4 #include <linux/sched.h>
5 #include <linux/interrupt.h>
6 #include <linux/tty.h>
7 #include <linux/tty_driver.h>
8 #include <linux/file.h>
9 #include <linux/mm.h>
10 #include <linux/string.h>
11 #include <linux/slab.h>
12 #include <linux/poll.h>
13 #include <linux/proc_fs.h>
14 #include <linux/init.h>
15 #include <linux/module.h>
16 #include <linux/device.h>
17 #include <linux/wait.h>
18 #include <linux/bitops.h>
19 #include <linux/seq_file.h>
20 #include <linux/uaccess.h>
21 #include <linux/ratelimit.h>
22
23 #undef LDISC_DEBUG_HANGUP
24
25 #ifdef LDISC_DEBUG_HANGUP
26 #define tty_ldisc_debug(tty, f, args...) ({                                    \
27         char __b[64];                                                          \
28         printk(KERN_DEBUG "%s: %s: " f, __func__, tty_name(tty, __b), ##args); \
29 })
30 #else
31 #define tty_ldisc_debug(tty, f, args...)
32 #endif
33
34 /*
35  *      This guards the refcounted line discipline lists. The lock
36  *      must be taken with irqs off because there are hangup path
37  *      callers who will do ldisc lookups and cannot sleep.
38  */
39
40 static DEFINE_RAW_SPINLOCK(tty_ldisc_lock);
41 static DECLARE_WAIT_QUEUE_HEAD(tty_ldisc_wait);
42 /* Line disc dispatch table */
43 static struct tty_ldisc_ops *tty_ldiscs[NR_LDISCS];
44
45 /**
46  *      tty_register_ldisc      -       install a line discipline
47  *      @disc: ldisc number
48  *      @new_ldisc: pointer to the ldisc object
49  *
50  *      Installs a new line discipline into the kernel. The discipline
51  *      is set up as unreferenced and then made available to the kernel
52  *      from this point onwards.
53  *
54  *      Locking:
55  *              takes tty_ldisc_lock to guard against ldisc races
56  */
57
58 int tty_register_ldisc(int disc, struct tty_ldisc_ops *new_ldisc)
59 {
60         unsigned long flags;
61         int ret = 0;
62
63         if (disc < N_TTY || disc >= NR_LDISCS)
64                 return -EINVAL;
65
66         raw_spin_lock_irqsave(&tty_ldisc_lock, flags);
67         tty_ldiscs[disc] = new_ldisc;
68         new_ldisc->num = disc;
69         new_ldisc->refcount = 0;
70         raw_spin_unlock_irqrestore(&tty_ldisc_lock, flags);
71
72         return ret;
73 }
74 EXPORT_SYMBOL(tty_register_ldisc);
75
76 /**
77  *      tty_unregister_ldisc    -       unload a line discipline
78  *      @disc: ldisc number
79  *      @new_ldisc: pointer to the ldisc object
80  *
81  *      Remove a line discipline from the kernel providing it is not
82  *      currently in use.
83  *
84  *      Locking:
85  *              takes tty_ldisc_lock to guard against ldisc races
86  */
87
88 int tty_unregister_ldisc(int disc)
89 {
90         unsigned long flags;
91         int ret = 0;
92
93         if (disc < N_TTY || disc >= NR_LDISCS)
94                 return -EINVAL;
95
96         raw_spin_lock_irqsave(&tty_ldisc_lock, flags);
97         if (tty_ldiscs[disc]->refcount)
98                 ret = -EBUSY;
99         else
100                 tty_ldiscs[disc] = NULL;
101         raw_spin_unlock_irqrestore(&tty_ldisc_lock, flags);
102
103         return ret;
104 }
105 EXPORT_SYMBOL(tty_unregister_ldisc);
106
107 static struct tty_ldisc_ops *get_ldops(int disc)
108 {
109         unsigned long flags;
110         struct tty_ldisc_ops *ldops, *ret;
111
112         raw_spin_lock_irqsave(&tty_ldisc_lock, flags);
113         ret = ERR_PTR(-EINVAL);
114         ldops = tty_ldiscs[disc];
115         if (ldops) {
116                 ret = ERR_PTR(-EAGAIN);
117                 if (try_module_get(ldops->owner)) {
118                         ldops->refcount++;
119                         ret = ldops;
120                 }
121         }
122         raw_spin_unlock_irqrestore(&tty_ldisc_lock, flags);
123         return ret;
124 }
125
126 static void put_ldops(struct tty_ldisc_ops *ldops)
127 {
128         unsigned long flags;
129
130         raw_spin_lock_irqsave(&tty_ldisc_lock, flags);
131         ldops->refcount--;
132         module_put(ldops->owner);
133         raw_spin_unlock_irqrestore(&tty_ldisc_lock, flags);
134 }
135
136 /**
137  *      tty_ldisc_get           -       take a reference to an ldisc
138  *      @disc: ldisc number
139  *
140  *      Takes a reference to a line discipline. Deals with refcounts and
141  *      module locking counts. Returns NULL if the discipline is not available.
142  *      Returns a pointer to the discipline and bumps the ref count if it is
143  *      available
144  *
145  *      Locking:
146  *              takes tty_ldisc_lock to guard against ldisc races
147  */
148
149 static struct tty_ldisc *tty_ldisc_get(int disc)
150 {
151         struct tty_ldisc *ld;
152         struct tty_ldisc_ops *ldops;
153
154         if (disc < N_TTY || disc >= NR_LDISCS)
155                 return ERR_PTR(-EINVAL);
156
157         /*
158          * Get the ldisc ops - we may need to request them to be loaded
159          * dynamically and try again.
160          */
161         ldops = get_ldops(disc);
162         if (IS_ERR(ldops)) {
163                 request_module("tty-ldisc-%d", disc);
164                 ldops = get_ldops(disc);
165                 if (IS_ERR(ldops))
166                         return ERR_CAST(ldops);
167         }
168
169         ld = kmalloc(sizeof(struct tty_ldisc), GFP_KERNEL);
170         if (ld == NULL) {
171                 put_ldops(ldops);
172                 return ERR_PTR(-ENOMEM);
173         }
174
175         ld->ops = ldops;
176         atomic_set(&ld->users, 1);
177         init_waitqueue_head(&ld->wq_idle);
178
179         return ld;
180 }
181
182 static void *tty_ldiscs_seq_start(struct seq_file *m, loff_t *pos)
183 {
184         return (*pos < NR_LDISCS) ? pos : NULL;
185 }
186
187 static void *tty_ldiscs_seq_next(struct seq_file *m, void *v, loff_t *pos)
188 {
189         (*pos)++;
190         return (*pos < NR_LDISCS) ? pos : NULL;
191 }
192
193 static void tty_ldiscs_seq_stop(struct seq_file *m, void *v)
194 {
195 }
196
197 static int tty_ldiscs_seq_show(struct seq_file *m, void *v)
198 {
199         int i = *(loff_t *)v;
200         struct tty_ldisc_ops *ldops;
201
202         ldops = get_ldops(i);
203         if (IS_ERR(ldops))
204                 return 0;
205         seq_printf(m, "%-10s %2d\n", ldops->name ? ldops->name : "???", i);
206         put_ldops(ldops);
207         return 0;
208 }
209
210 static const struct seq_operations tty_ldiscs_seq_ops = {
211         .start  = tty_ldiscs_seq_start,
212         .next   = tty_ldiscs_seq_next,
213         .stop   = tty_ldiscs_seq_stop,
214         .show   = tty_ldiscs_seq_show,
215 };
216
217 static int proc_tty_ldiscs_open(struct inode *inode, struct file *file)
218 {
219         return seq_open(file, &tty_ldiscs_seq_ops);
220 }
221
222 const struct file_operations tty_ldiscs_proc_fops = {
223         .owner          = THIS_MODULE,
224         .open           = proc_tty_ldiscs_open,
225         .read           = seq_read,
226         .llseek         = seq_lseek,
227         .release        = seq_release,
228 };
229
230 /**
231  *      tty_ldisc_assign        -       set ldisc on a tty
232  *      @tty: tty to assign
233  *      @ld: line discipline
234  *
235  *      Install an instance of a line discipline into a tty structure. The
236  *      ldisc must have a reference count above zero to ensure it remains.
237  *      The tty instance refcount starts at zero.
238  *
239  *      Locking:
240  *              Caller must hold references
241  */
242
243 static void tty_ldisc_assign(struct tty_struct *tty, struct tty_ldisc *ld)
244 {
245         tty->ldisc = ld;
246 }
247
248 /**
249  *      tty_ldisc_try           -       internal helper
250  *      @tty: the tty
251  *
252  *      Make a single attempt to grab and bump the refcount on
253  *      the tty ldisc. Return 0 on failure or 1 on success. This is
254  *      used to implement both the waiting and non waiting versions
255  *      of tty_ldisc_ref
256  *
257  *      Locking: takes tty_ldisc_lock
258  */
259
260 static struct tty_ldisc *tty_ldisc_try(struct tty_struct *tty)
261 {
262         unsigned long flags;
263         struct tty_ldisc *ld;
264
265         /* FIXME: this allows reference acquire after TTY_LDISC is cleared */
266         raw_spin_lock_irqsave(&tty_ldisc_lock, flags);
267         ld = NULL;
268         if (test_bit(TTY_LDISC, &tty->flags) && tty->ldisc) {
269                 ld = tty->ldisc;
270                 atomic_inc(&ld->users);
271         }
272         raw_spin_unlock_irqrestore(&tty_ldisc_lock, flags);
273         return ld;
274 }
275
276 /**
277  *      tty_ldisc_ref_wait      -       wait for the tty ldisc
278  *      @tty: tty device
279  *
280  *      Dereference the line discipline for the terminal and take a
281  *      reference to it. If the line discipline is in flux then
282  *      wait patiently until it changes.
283  *
284  *      Note: Must not be called from an IRQ/timer context. The caller
285  *      must also be careful not to hold other locks that will deadlock
286  *      against a discipline change, such as an existing ldisc reference
287  *      (which we check for)
288  *
289  *      Locking: call functions take tty_ldisc_lock
290  */
291
292 struct tty_ldisc *tty_ldisc_ref_wait(struct tty_struct *tty)
293 {
294         struct tty_ldisc *ld;
295
296         /* wait_event is a macro */
297         wait_event(tty_ldisc_wait, (ld = tty_ldisc_try(tty)) != NULL);
298         return ld;
299 }
300 EXPORT_SYMBOL_GPL(tty_ldisc_ref_wait);
301
302 /**
303  *      tty_ldisc_ref           -       get the tty ldisc
304  *      @tty: tty device
305  *
306  *      Dereference the line discipline for the terminal and take a
307  *      reference to it. If the line discipline is in flux then
308  *      return NULL. Can be called from IRQ and timer functions.
309  *
310  *      Locking: called functions take tty_ldisc_lock
311  */
312
313 struct tty_ldisc *tty_ldisc_ref(struct tty_struct *tty)
314 {
315         return tty_ldisc_try(tty);
316 }
317 EXPORT_SYMBOL_GPL(tty_ldisc_ref);
318
319 /**
320  *      tty_ldisc_deref         -       free a tty ldisc reference
321  *      @ld: reference to free up
322  *
323  *      Undoes the effect of tty_ldisc_ref or tty_ldisc_ref_wait. May
324  *      be called in IRQ context.
325  *
326  *      Locking: takes tty_ldisc_lock
327  */
328
329 void tty_ldisc_deref(struct tty_ldisc *ld)
330 {
331         unsigned long flags;
332
333         if (WARN_ON_ONCE(!ld))
334                 return;
335
336         raw_spin_lock_irqsave(&tty_ldisc_lock, flags);
337         /*
338          * WARNs if one-too-many reader references were released
339          * - the last reference must be released with tty_ldisc_put
340          */
341         WARN_ON(atomic_dec_and_test(&ld->users));
342         raw_spin_unlock_irqrestore(&tty_ldisc_lock, flags);
343
344         if (waitqueue_active(&ld->wq_idle))
345                 wake_up(&ld->wq_idle);
346 }
347 EXPORT_SYMBOL_GPL(tty_ldisc_deref);
348
349 /**
350  *      tty_ldisc_put           -       release the ldisc
351  *
352  *      Complement of tty_ldisc_get().
353  */
354 static inline void tty_ldisc_put(struct tty_ldisc *ld)
355 {
356         unsigned long flags;
357
358         if (WARN_ON_ONCE(!ld))
359                 return;
360
361         raw_spin_lock_irqsave(&tty_ldisc_lock, flags);
362
363         /* unreleased reader reference(s) will cause this WARN */
364         WARN_ON(!atomic_dec_and_test(&ld->users));
365
366         ld->ops->refcount--;
367         module_put(ld->ops->owner);
368         kfree(ld);
369         raw_spin_unlock_irqrestore(&tty_ldisc_lock, flags);
370 }
371
372 /**
373  *      tty_ldisc_enable        -       allow ldisc use
374  *      @tty: terminal to activate ldisc on
375  *
376  *      Set the TTY_LDISC flag when the line discipline can be called
377  *      again. Do necessary wakeups for existing sleepers. Clear the LDISC
378  *      changing flag to indicate any ldisc change is now over.
379  *
380  *      Note: nobody should set the TTY_LDISC bit except via this function.
381  *      Clearing directly is allowed.
382  */
383
384 static void tty_ldisc_enable(struct tty_struct *tty)
385 {
386         clear_bit(TTY_LDISC_HALTED, &tty->flags);
387         set_bit(TTY_LDISC, &tty->flags);
388         clear_bit(TTY_LDISC_CHANGING, &tty->flags);
389         wake_up(&tty_ldisc_wait);
390 }
391
392 /**
393  *      tty_ldisc_flush -       flush line discipline queue
394  *      @tty: tty
395  *
396  *      Flush the line discipline queue (if any) for this tty. If there
397  *      is no line discipline active this is a no-op.
398  */
399
400 void tty_ldisc_flush(struct tty_struct *tty)
401 {
402         struct tty_ldisc *ld = tty_ldisc_ref(tty);
403         if (ld) {
404                 if (ld->ops->flush_buffer)
405                         ld->ops->flush_buffer(tty);
406                 tty_ldisc_deref(ld);
407         }
408         tty_buffer_flush(tty);
409 }
410 EXPORT_SYMBOL_GPL(tty_ldisc_flush);
411
412 /**
413  *      tty_set_termios_ldisc           -       set ldisc field
414  *      @tty: tty structure
415  *      @num: line discipline number
416  *
417  *      This is probably overkill for real world processors but
418  *      they are not on hot paths so a little discipline won't do
419  *      any harm.
420  *
421  *      Locking: takes termios_mutex
422  */
423
424 static void tty_set_termios_ldisc(struct tty_struct *tty, int num)
425 {
426         mutex_lock(&tty->termios_mutex);
427         tty->termios.c_line = num;
428         mutex_unlock(&tty->termios_mutex);
429 }
430
431 /**
432  *      tty_ldisc_open          -       open a line discipline
433  *      @tty: tty we are opening the ldisc on
434  *      @ld: discipline to open
435  *
436  *      A helper opening method. Also a convenient debugging and check
437  *      point.
438  *
439  *      Locking: always called with BTM already held.
440  */
441
442 static int tty_ldisc_open(struct tty_struct *tty, struct tty_ldisc *ld)
443 {
444         WARN_ON(test_and_set_bit(TTY_LDISC_OPEN, &tty->flags));
445         if (ld->ops->open) {
446                 int ret;
447                 /* BTM here locks versus a hangup event */
448                 ret = ld->ops->open(tty);
449                 if (ret)
450                         clear_bit(TTY_LDISC_OPEN, &tty->flags);
451                 return ret;
452         }
453         return 0;
454 }
455
456 /**
457  *      tty_ldisc_close         -       close a line discipline
458  *      @tty: tty we are opening the ldisc on
459  *      @ld: discipline to close
460  *
461  *      A helper close method. Also a convenient debugging and check
462  *      point.
463  */
464
465 static void tty_ldisc_close(struct tty_struct *tty, struct tty_ldisc *ld)
466 {
467         WARN_ON(!test_bit(TTY_LDISC_OPEN, &tty->flags));
468         clear_bit(TTY_LDISC_OPEN, &tty->flags);
469         if (ld->ops->close)
470                 ld->ops->close(tty);
471 }
472
473 /**
474  *      tty_ldisc_restore       -       helper for tty ldisc change
475  *      @tty: tty to recover
476  *      @old: previous ldisc
477  *
478  *      Restore the previous line discipline or N_TTY when a line discipline
479  *      change fails due to an open error
480  */
481
482 static void tty_ldisc_restore(struct tty_struct *tty, struct tty_ldisc *old)
483 {
484         char buf[64];
485         struct tty_ldisc *new_ldisc;
486         int r;
487
488         /* There is an outstanding reference here so this is safe */
489         old = tty_ldisc_get(old->ops->num);
490         WARN_ON(IS_ERR(old));
491         tty_ldisc_assign(tty, old);
492         tty_set_termios_ldisc(tty, old->ops->num);
493         if (tty_ldisc_open(tty, old) < 0) {
494                 tty_ldisc_put(old);
495                 /* This driver is always present */
496                 new_ldisc = tty_ldisc_get(N_TTY);
497                 if (IS_ERR(new_ldisc))
498                         panic("n_tty: get");
499                 tty_ldisc_assign(tty, new_ldisc);
500                 tty_set_termios_ldisc(tty, N_TTY);
501                 r = tty_ldisc_open(tty, new_ldisc);
502                 if (r < 0)
503                         panic("Couldn't open N_TTY ldisc for "
504                               "%s --- error %d.",
505                               tty_name(tty, buf), r);
506         }
507 }
508
509 /**
510  *      tty_ldisc_wait_idle     -       wait for the ldisc to become idle
511  *      @tty: tty to wait for
512  *      @timeout: for how long to wait at most
513  *
514  *      Wait for the line discipline to become idle. The discipline must
515  *      have been halted for this to guarantee it remains idle.
516  */
517 static int tty_ldisc_wait_idle(struct tty_struct *tty, long timeout)
518 {
519         long ret;
520         ret = wait_event_timeout(tty->ldisc->wq_idle,
521                         atomic_read(&tty->ldisc->users) == 1, timeout);
522         return ret > 0 ? 0 : -EBUSY;
523 }
524
525 /**
526  *      tty_ldisc_halt          -       shut down the line discipline
527  *      @tty: tty device
528  *      @o_tty: paired pty device (can be NULL)
529  *      @timeout: # of jiffies to wait for ldisc refs to be released
530  *
531  *      Shut down the line discipline and work queue for this tty device and
532  *      its paired pty (if exists). Clearing the TTY_LDISC flag ensures
533  *      no further references can be obtained, while waiting for existing
534  *      references to be released ensures no more data is fed to the ldisc.
535  *
536  *      You need to do a 'flush_scheduled_work()' (outside the ldisc_mutex)
537  *      in order to make sure any currently executing ldisc work is also
538  *      flushed.
539  */
540
541 static int tty_ldisc_halt(struct tty_struct *tty, struct tty_struct *o_tty,
542                           long timeout)
543 {
544         int retval;
545
546         clear_bit(TTY_LDISC, &tty->flags);
547         if (o_tty)
548                 clear_bit(TTY_LDISC, &o_tty->flags);
549
550         retval = tty_ldisc_wait_idle(tty, timeout);
551         if (!retval && o_tty)
552                 retval = tty_ldisc_wait_idle(o_tty, timeout);
553         if (retval)
554                 return retval;
555
556         set_bit(TTY_LDISC_HALTED, &tty->flags);
557         if (o_tty)
558                 set_bit(TTY_LDISC_HALTED, &o_tty->flags);
559
560         return 0;
561 }
562
563 /**
564  *      tty_ldisc_hangup_halt - halt the line discipline for hangup
565  *      @tty: tty being hung up
566  *
567  *      Shut down the line discipline and work queue for the tty device
568  *      being hungup. Clear the TTY_LDISC flag to ensure no further
569  *      references can be obtained and wait for remaining references to be
570  *      released to ensure no more data is fed to this ldisc.
571  *      Caller must hold legacy and ->ldisc_mutex.
572  *
573  *      NB: tty_set_ldisc() is prevented from changing the ldisc concurrently
574  *      with this function by checking the TTY_HUPPING flag.
575  */
576 static bool tty_ldisc_hangup_halt(struct tty_struct *tty)
577 {
578         char cur_n[TASK_COMM_LEN], tty_n[64];
579         long timeout = 3 * HZ;
580
581         clear_bit(TTY_LDISC, &tty->flags);
582
583         if (tty->ldisc) {       /* Not yet closed */
584                 tty_unlock(tty);
585
586                 while (tty_ldisc_wait_idle(tty, timeout) == -EBUSY) {
587                         timeout = MAX_SCHEDULE_TIMEOUT;
588                         printk_ratelimited(KERN_WARNING
589                                 "%s: waiting (%s) for %s took too long, but we keep waiting...\n",
590                                 __func__, get_task_comm(cur_n, current),
591                                 tty_name(tty, tty_n));
592                 }
593
594                 set_bit(TTY_LDISC_HALTED, &tty->flags);
595
596                 /* must reacquire both locks and preserve lock order */
597                 mutex_unlock(&tty->ldisc_mutex);
598                 tty_lock(tty);
599                 mutex_lock(&tty->ldisc_mutex);
600         }
601         return !!tty->ldisc;
602 }
603
604 /**
605  *      tty_set_ldisc           -       set line discipline
606  *      @tty: the terminal to set
607  *      @ldisc: the line discipline
608  *
609  *      Set the discipline of a tty line. Must be called from a process
610  *      context. The ldisc change logic has to protect itself against any
611  *      overlapping ldisc change (including on the other end of pty pairs),
612  *      the close of one side of a tty/pty pair, and eventually hangup.
613  *
614  *      Locking: takes tty_ldisc_lock, termios_mutex
615  */
616
617 int tty_set_ldisc(struct tty_struct *tty, int ldisc)
618 {
619         int retval;
620         struct tty_ldisc *o_ldisc, *new_ldisc;
621         struct tty_struct *o_tty;
622
623         new_ldisc = tty_ldisc_get(ldisc);
624         if (IS_ERR(new_ldisc))
625                 return PTR_ERR(new_ldisc);
626
627         tty_lock(tty);
628         /*
629          *      We need to look at the tty locking here for pty/tty pairs
630          *      when both sides try to change in parallel.
631          */
632
633         o_tty = tty->link;      /* o_tty is the pty side or NULL */
634
635
636         /*
637          *      Check the no-op case
638          */
639
640         if (tty->ldisc->ops->num == ldisc) {
641                 tty_unlock(tty);
642                 tty_ldisc_put(new_ldisc);
643                 return 0;
644         }
645
646         tty_unlock(tty);
647         /*
648          *      Problem: What do we do if this blocks ?
649          *      We could deadlock here
650          */
651
652         tty_wait_until_sent(tty, 0);
653
654         tty_lock(tty);
655         mutex_lock(&tty->ldisc_mutex);
656
657         /*
658          *      We could be midstream of another ldisc change which has
659          *      dropped the lock during processing. If so we need to wait.
660          */
661
662         while (test_bit(TTY_LDISC_CHANGING, &tty->flags)) {
663                 mutex_unlock(&tty->ldisc_mutex);
664                 tty_unlock(tty);
665                 wait_event(tty_ldisc_wait,
666                         test_bit(TTY_LDISC_CHANGING, &tty->flags) == 0);
667                 tty_lock(tty);
668                 mutex_lock(&tty->ldisc_mutex);
669         }
670
671         set_bit(TTY_LDISC_CHANGING, &tty->flags);
672
673         /*
674          *      No more input please, we are switching. The new ldisc
675          *      will update this value in the ldisc open function
676          */
677
678         tty->receive_room = 0;
679
680         o_ldisc = tty->ldisc;
681
682         tty_unlock(tty);
683         /*
684          *      Make sure we don't change while someone holds a
685          *      reference to the line discipline. The TTY_LDISC bit
686          *      prevents anyone taking a reference once it is clear.
687          *      We need the lock to avoid racing reference takers.
688          *
689          *      We must clear the TTY_LDISC bit here to avoid a livelock
690          *      with a userspace app continually trying to use the tty in
691          *      parallel to the change and re-referencing the tty.
692          */
693
694         retval = tty_ldisc_halt(tty, o_tty, 5 * HZ);
695
696         /*
697          * Wait for hangup to complete, if pending.
698          * We must drop the mutex here in case a hangup is also in process.
699          */
700
701         mutex_unlock(&tty->ldisc_mutex);
702
703         flush_work(&tty->hangup_work);
704
705         tty_lock(tty);
706         mutex_lock(&tty->ldisc_mutex);
707
708         /* handle wait idle failure locked */
709         if (retval) {
710                 tty_ldisc_put(new_ldisc);
711                 goto enable;
712         }
713
714         if (test_bit(TTY_HUPPING, &tty->flags)) {
715                 /* We were raced by the hangup method. It will have stomped
716                    the ldisc data and closed the ldisc down */
717                 clear_bit(TTY_LDISC_CHANGING, &tty->flags);
718                 mutex_unlock(&tty->ldisc_mutex);
719                 tty_ldisc_put(new_ldisc);
720                 tty_unlock(tty);
721                 return -EIO;
722         }
723
724         /* Shutdown the current discipline. */
725         tty_ldisc_close(tty, o_ldisc);
726
727         /* Now set up the new line discipline. */
728         tty_ldisc_assign(tty, new_ldisc);
729         tty_set_termios_ldisc(tty, ldisc);
730
731         retval = tty_ldisc_open(tty, new_ldisc);
732         if (retval < 0) {
733                 /* Back to the old one or N_TTY if we can't */
734                 tty_ldisc_put(new_ldisc);
735                 tty_ldisc_restore(tty, o_ldisc);
736         }
737
738         /* At this point we hold a reference to the new ldisc and a
739            a reference to the old ldisc. If we ended up flipping back
740            to the existing ldisc we have two references to it */
741
742         if (tty->ldisc->ops->num != o_ldisc->ops->num && tty->ops->set_ldisc)
743                 tty->ops->set_ldisc(tty);
744
745         tty_ldisc_put(o_ldisc);
746
747 enable:
748         /*
749          *      Allow ldisc referencing to occur again
750          */
751
752         tty_ldisc_enable(tty);
753         if (o_tty)
754                 tty_ldisc_enable(o_tty);
755
756         /* Restart the work queue in case no characters kick it off. Safe if
757            already running */
758         schedule_work(&tty->port->buf.work);
759         if (o_tty)
760                 schedule_work(&o_tty->port->buf.work);
761
762         mutex_unlock(&tty->ldisc_mutex);
763         tty_unlock(tty);
764         return retval;
765 }
766
767 /**
768  *      tty_reset_termios       -       reset terminal state
769  *      @tty: tty to reset
770  *
771  *      Restore a terminal to the driver default state.
772  */
773
774 static void tty_reset_termios(struct tty_struct *tty)
775 {
776         mutex_lock(&tty->termios_mutex);
777         tty->termios = tty->driver->init_termios;
778         tty->termios.c_ispeed = tty_termios_input_baud_rate(&tty->termios);
779         tty->termios.c_ospeed = tty_termios_baud_rate(&tty->termios);
780         mutex_unlock(&tty->termios_mutex);
781 }
782
783
784 /**
785  *      tty_ldisc_reinit        -       reinitialise the tty ldisc
786  *      @tty: tty to reinit
787  *      @ldisc: line discipline to reinitialize
788  *
789  *      Switch the tty to a line discipline and leave the ldisc
790  *      state closed
791  */
792
793 static int tty_ldisc_reinit(struct tty_struct *tty, int ldisc)
794 {
795         struct tty_ldisc *ld = tty_ldisc_get(ldisc);
796
797         if (IS_ERR(ld))
798                 return -1;
799
800         tty_ldisc_close(tty, tty->ldisc);
801         tty_ldisc_put(tty->ldisc);
802         tty->ldisc = NULL;
803         /*
804          *      Switch the line discipline back
805          */
806         tty_ldisc_assign(tty, ld);
807         tty_set_termios_ldisc(tty, ldisc);
808
809         return 0;
810 }
811
812 /**
813  *      tty_ldisc_hangup                -       hangup ldisc reset
814  *      @tty: tty being hung up
815  *
816  *      Some tty devices reset their termios when they receive a hangup
817  *      event. In that situation we must also switch back to N_TTY properly
818  *      before we reset the termios data.
819  *
820  *      Locking: We can take the ldisc mutex as the rest of the code is
821  *      careful to allow for this.
822  *
823  *      In the pty pair case this occurs in the close() path of the
824  *      tty itself so we must be careful about locking rules.
825  */
826
827 void tty_ldisc_hangup(struct tty_struct *tty)
828 {
829         struct tty_ldisc *ld;
830         int reset = tty->driver->flags & TTY_DRIVER_RESET_TERMIOS;
831         int err = 0;
832
833         tty_ldisc_debug(tty, "closing ldisc: %p\n", tty->ldisc);
834
835         /*
836          * FIXME! What are the locking issues here? This may me overdoing
837          * things... This question is especially important now that we've
838          * removed the irqlock.
839          */
840         ld = tty_ldisc_ref(tty);
841         if (ld != NULL) {
842                 /* We may have no line discipline at this point */
843                 if (ld->ops->flush_buffer)
844                         ld->ops->flush_buffer(tty);
845                 tty_driver_flush_buffer(tty);
846                 if ((test_bit(TTY_DO_WRITE_WAKEUP, &tty->flags)) &&
847                     ld->ops->write_wakeup)
848                         ld->ops->write_wakeup(tty);
849                 if (ld->ops->hangup)
850                         ld->ops->hangup(tty);
851                 tty_ldisc_deref(ld);
852         }
853         /*
854          * FIXME: Once we trust the LDISC code better we can wait here for
855          * ldisc completion and fix the driver call race
856          */
857         wake_up_interruptible_poll(&tty->write_wait, POLLOUT);
858         wake_up_interruptible_poll(&tty->read_wait, POLLIN);
859         /*
860          * Shutdown the current line discipline, and reset it to
861          * N_TTY if need be.
862          *
863          * Avoid racing set_ldisc or tty_ldisc_release
864          */
865         mutex_lock(&tty->ldisc_mutex);
866
867         if (tty_ldisc_hangup_halt(tty)) {
868
869                 /* At this point we have a halted ldisc; we want to close it and
870                    reopen a new ldisc. We could defer the reopen to the next
871                    open but it means auditing a lot of other paths so this is
872                    a FIXME */
873                 if (reset == 0) {
874
875                         if (!tty_ldisc_reinit(tty, tty->termios.c_line))
876                                 err = tty_ldisc_open(tty, tty->ldisc);
877                         else
878                                 err = 1;
879                 }
880                 /* If the re-open fails or we reset then go to N_TTY. The
881                    N_TTY open cannot fail */
882                 if (reset || err) {
883                         BUG_ON(tty_ldisc_reinit(tty, N_TTY));
884                         WARN_ON(tty_ldisc_open(tty, tty->ldisc));
885                 }
886                 tty_ldisc_enable(tty);
887         }
888         mutex_unlock(&tty->ldisc_mutex);
889         if (reset)
890                 tty_reset_termios(tty);
891
892         tty_ldisc_debug(tty, "re-opened ldisc: %p\n", tty->ldisc);
893 }
894
895 /**
896  *      tty_ldisc_setup                 -       open line discipline
897  *      @tty: tty being shut down
898  *      @o_tty: pair tty for pty/tty pairs
899  *
900  *      Called during the initial open of a tty/pty pair in order to set up the
901  *      line disciplines and bind them to the tty. This has no locking issues
902  *      as the device isn't yet active.
903  */
904
905 int tty_ldisc_setup(struct tty_struct *tty, struct tty_struct *o_tty)
906 {
907         struct tty_ldisc *ld = tty->ldisc;
908         int retval;
909
910         retval = tty_ldisc_open(tty, ld);
911         if (retval)
912                 return retval;
913
914         if (o_tty) {
915                 retval = tty_ldisc_open(o_tty, o_tty->ldisc);
916                 if (retval) {
917                         tty_ldisc_close(tty, ld);
918                         return retval;
919                 }
920                 tty_ldisc_enable(o_tty);
921         }
922         tty_ldisc_enable(tty);
923         return 0;
924 }
925
926 static void tty_ldisc_kill(struct tty_struct *tty)
927 {
928         mutex_lock(&tty->ldisc_mutex);
929         /*
930          * Now kill off the ldisc
931          */
932         tty_ldisc_close(tty, tty->ldisc);
933         tty_ldisc_put(tty->ldisc);
934         /* Force an oops if we mess this up */
935         tty->ldisc = NULL;
936
937         /* Ensure the next open requests the N_TTY ldisc */
938         tty_set_termios_ldisc(tty, N_TTY);
939         mutex_unlock(&tty->ldisc_mutex);
940 }
941
942 /**
943  *      tty_ldisc_release               -       release line discipline
944  *      @tty: tty being shut down
945  *      @o_tty: pair tty for pty/tty pairs
946  *
947  *      Called during the final close of a tty/pty pair in order to shut down
948  *      the line discpline layer. On exit the ldisc assigned is N_TTY and the
949  *      ldisc has not been opened.
950  */
951
952 void tty_ldisc_release(struct tty_struct *tty, struct tty_struct *o_tty)
953 {
954         /*
955          * Shutdown this line discipline. As this is the final close,
956          * it does not race with the set_ldisc code path.
957          */
958
959         tty_ldisc_debug(tty, "closing ldisc: %p\n", tty->ldisc);
960
961         tty_ldisc_halt(tty, o_tty, MAX_SCHEDULE_TIMEOUT);
962
963         tty_lock_pair(tty, o_tty);
964         /* This will need doing differently if we need to lock */
965         tty_ldisc_kill(tty);
966         if (o_tty)
967                 tty_ldisc_kill(o_tty);
968
969         tty_unlock_pair(tty, o_tty);
970         /* And the memory resources remaining (buffers, termios) will be
971            disposed of when the kref hits zero */
972
973         tty_ldisc_debug(tty, "ldisc closed\n");
974 }
975
976 /**
977  *      tty_ldisc_init          -       ldisc setup for new tty
978  *      @tty: tty being allocated
979  *
980  *      Set up the line discipline objects for a newly allocated tty. Note that
981  *      the tty structure is not completely set up when this call is made.
982  */
983
984 void tty_ldisc_init(struct tty_struct *tty)
985 {
986         struct tty_ldisc *ld = tty_ldisc_get(N_TTY);
987         if (IS_ERR(ld))
988                 panic("n_tty: init_tty");
989         tty_ldisc_assign(tty, ld);
990 }
991
992 /**
993  *      tty_ldisc_init          -       ldisc cleanup for new tty
994  *      @tty: tty that was allocated recently
995  *
996  *      The tty structure must not becompletely set up (tty_ldisc_setup) when
997  *      this call is made.
998  */
999 void tty_ldisc_deinit(struct tty_struct *tty)
1000 {
1001         tty_ldisc_put(tty->ldisc);
1002         tty_ldisc_assign(tty, NULL);
1003 }
1004
1005 void tty_ldisc_begin(void)
1006 {
1007         /* Setup the default TTY line discipline. */
1008         (void) tty_register_ldisc(N_TTY, &tty_ldisc_N_TTY);
1009 }