Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f18f9498 authored by Alan Cox's avatar Alan Cox Committed by Greg Kroah-Hartman
Browse files

tty: Push the lock down further into the ldisc code

parent eeb89d91
Loading
Loading
Loading
Loading
+0 −2
Original line number Diff line number Diff line
@@ -1347,9 +1347,7 @@ struct tty_struct *tty_init_dev(struct tty_driver *driver, int idx,
	 * If we fail here just call release_tty to clean up.  No need
	 * to decrement the use counts, as release_tty doesn't care.
	 */
	lock_kernel();
	retval = tty_ldisc_setup(tty, tty->link);
	unlock_kernel();
	if (retval)
		goto release_mem_out;
	return tty;
+9 −3
Original line number Diff line number Diff line
@@ -445,8 +445,14 @@ static void tty_set_termios_ldisc(struct tty_struct *tty, int num)
static int tty_ldisc_open(struct tty_struct *tty, struct tty_ldisc *ld)
{
	WARN_ON(test_and_set_bit(TTY_LDISC_OPEN, &tty->flags));
	if (ld->ops->open)
		return ld->ops->open(tty);
	if (ld->ops->open) {
		int ret;
                /* BKL here locks verus a hangup event */
		lock_kernel();
		ret = ld->ops->open(tty);
		unlock_kernel();
		return ret;
	}
	return 0;
}

@@ -566,6 +572,7 @@ int tty_set_ldisc(struct tty_struct *tty, int ldisc)
		return 0;
	}

	unlock_kernel();
	/*
	 *	Problem: What do we do if this blocks ?
	 *	We could deadlock here
@@ -573,7 +580,6 @@ int tty_set_ldisc(struct tty_struct *tty, int ldisc)

	tty_wait_until_sent(tty, 0);

	unlock_kernel();
	mutex_lock(&tty->ldisc_mutex);

	/*