tty_ldisc.c (597473720f4dc69749542bfcfed4a927a43d935e) | tty_ldisc.c (eec4844fae7c033a0c1fc1eb3b8517aeb8b6cc49) |
---|---|
1// SPDX-License-Identifier: GPL-2.0 2#include <linux/types.h> 3#include <linux/errno.h> 4#include <linux/kmod.h> 5#include <linux/sched.h> 6#include <linux/interrupt.h> 7#include <linux/tty.h> 8#include <linux/tty_driver.h> --- 473 unchanged lines hidden (view full) --- 482 * @ld: discipline to close 483 * 484 * A helper close method. Also a convenient debugging and check 485 * point. 486 */ 487 488static void tty_ldisc_close(struct tty_struct *tty, struct tty_ldisc *ld) 489{ | 1// SPDX-License-Identifier: GPL-2.0 2#include <linux/types.h> 3#include <linux/errno.h> 4#include <linux/kmod.h> 5#include <linux/sched.h> 6#include <linux/interrupt.h> 7#include <linux/tty.h> 8#include <linux/tty_driver.h> --- 473 unchanged lines hidden (view full) --- 482 * @ld: discipline to close 483 * 484 * A helper close method. Also a convenient debugging and check 485 * point. 486 */ 487 488static void tty_ldisc_close(struct tty_struct *tty, struct tty_ldisc *ld) 489{ |
490 lockdep_assert_held_exclusive(&tty->ldisc_sem); | 490 lockdep_assert_held_write(&tty->ldisc_sem); |
491 WARN_ON(!test_bit(TTY_LDISC_OPEN, &tty->flags)); 492 clear_bit(TTY_LDISC_OPEN, &tty->flags); 493 if (ld->ops->close) 494 ld->ops->close(tty); 495 tty_ldisc_debug(tty, "%p: closed\n", ld); 496} 497 498/** --- 5 unchanged lines hidden (view full) --- 504 * ldisc fails and we need something attached. 505 */ 506 507static int tty_ldisc_failto(struct tty_struct *tty, int ld) 508{ 509 struct tty_ldisc *disc = tty_ldisc_get(tty, ld); 510 int r; 511 | 491 WARN_ON(!test_bit(TTY_LDISC_OPEN, &tty->flags)); 492 clear_bit(TTY_LDISC_OPEN, &tty->flags); 493 if (ld->ops->close) 494 ld->ops->close(tty); 495 tty_ldisc_debug(tty, "%p: closed\n", ld); 496} 497 498/** --- 5 unchanged lines hidden (view full) --- 504 * ldisc fails and we need something attached. 505 */ 506 507static int tty_ldisc_failto(struct tty_struct *tty, int ld) 508{ 509 struct tty_ldisc *disc = tty_ldisc_get(tty, ld); 510 int r; 511 |
512 lockdep_assert_held_exclusive(&tty->ldisc_sem); | 512 lockdep_assert_held_write(&tty->ldisc_sem); |
513 if (IS_ERR(disc)) 514 return PTR_ERR(disc); 515 tty->ldisc = disc; 516 tty_set_termios_ldisc(tty, ld); 517 if ((r = tty_ldisc_open(tty, disc)) < 0) 518 tty_ldisc_put(disc); 519 return r; 520} --- 107 unchanged lines hidden (view full) --- 628/** 629 * tty_ldisc_kill - teardown ldisc 630 * @tty: tty being released 631 * 632 * Perform final close of the ldisc and reset tty->ldisc 633 */ 634static void tty_ldisc_kill(struct tty_struct *tty) 635{ | 513 if (IS_ERR(disc)) 514 return PTR_ERR(disc); 515 tty->ldisc = disc; 516 tty_set_termios_ldisc(tty, ld); 517 if ((r = tty_ldisc_open(tty, disc)) < 0) 518 tty_ldisc_put(disc); 519 return r; 520} --- 107 unchanged lines hidden (view full) --- 628/** 629 * tty_ldisc_kill - teardown ldisc 630 * @tty: tty being released 631 * 632 * Perform final close of the ldisc and reset tty->ldisc 633 */ 634static void tty_ldisc_kill(struct tty_struct *tty) 635{ |
636 lockdep_assert_held_exclusive(&tty->ldisc_sem); | 636 lockdep_assert_held_write(&tty->ldisc_sem); |
637 if (!tty->ldisc) 638 return; 639 /* 640 * Now kill off the ldisc 641 */ 642 tty_ldisc_close(tty, tty->ldisc); 643 tty_ldisc_put(tty->ldisc); 644 /* Force an oops if we mess this up */ --- 31 unchanged lines hidden (view full) --- 676 * Returns 0 if successful, otherwise error code < 0 677 */ 678 679int tty_ldisc_reinit(struct tty_struct *tty, int disc) 680{ 681 struct tty_ldisc *ld; 682 int retval; 683 | 637 if (!tty->ldisc) 638 return; 639 /* 640 * Now kill off the ldisc 641 */ 642 tty_ldisc_close(tty, tty->ldisc); 643 tty_ldisc_put(tty->ldisc); 644 /* Force an oops if we mess this up */ --- 31 unchanged lines hidden (view full) --- 676 * Returns 0 if successful, otherwise error code < 0 677 */ 678 679int tty_ldisc_reinit(struct tty_struct *tty, int disc) 680{ 681 struct tty_ldisc *ld; 682 int retval; 683 |
684 lockdep_assert_held_exclusive(&tty->ldisc_sem); | 684 lockdep_assert_held_write(&tty->ldisc_sem); |
685 ld = tty_ldisc_get(tty, disc); 686 if (IS_ERR(ld)) { 687 BUG_ON(disc == N_TTY); 688 return PTR_ERR(ld); 689 } 690 691 if (tty->ldisc) { 692 tty_ldisc_close(tty, tty->ldisc); --- 157 unchanged lines hidden (view full) --- 850void tty_ldisc_deinit(struct tty_struct *tty) 851{ 852 /* no ldisc_sem, tty is being destroyed */ 853 if (tty->ldisc) 854 tty_ldisc_put(tty->ldisc); 855 tty->ldisc = NULL; 856} 857 | 685 ld = tty_ldisc_get(tty, disc); 686 if (IS_ERR(ld)) { 687 BUG_ON(disc == N_TTY); 688 return PTR_ERR(ld); 689 } 690 691 if (tty->ldisc) { 692 tty_ldisc_close(tty, tty->ldisc); --- 157 unchanged lines hidden (view full) --- 850void tty_ldisc_deinit(struct tty_struct *tty) 851{ 852 /* no ldisc_sem, tty is being destroyed */ 853 if (tty->ldisc) 854 tty_ldisc_put(tty->ldisc); 855 tty->ldisc = NULL; 856} 857 |
858static int zero; 859static int one = 1; | |
860static struct ctl_table tty_table[] = { 861 { 862 .procname = "ldisc_autoload", 863 .data = &tty_ldisc_autoload, 864 .maxlen = sizeof(tty_ldisc_autoload), 865 .mode = 0644, 866 .proc_handler = proc_dointvec, | 858static struct ctl_table tty_table[] = { 859 { 860 .procname = "ldisc_autoload", 861 .data = &tty_ldisc_autoload, 862 .maxlen = sizeof(tty_ldisc_autoload), 863 .mode = 0644, 864 .proc_handler = proc_dointvec, |
867 .extra1 = &zero, 868 .extra2 = &one, | 865 .extra1 = SYSCTL_ZERO, 866 .extra2 = SYSCTL_ONE, |
869 }, 870 { } 871}; 872 873static struct ctl_table tty_dir_table[] = { 874 { 875 .procname = "tty", 876 .mode = 0555, --- 18 unchanged lines hidden --- | 867 }, 868 { } 869}; 870 871static struct ctl_table tty_dir_table[] = { 872 { 873 .procname = "tty", 874 .mode = 0555, --- 18 unchanged lines hidden --- |