From: Andrew Morton <akpm@linux-foundation.org>
To: Alan Cox <alan@lxorguk.ukuu.org.uk>
Cc: linux-kernel@vger.kernel.org
Subject: Re: [PATCH] tty_ioctl: Soft carrier handling
Date: Mon, 10 Mar 2008 21:26:47 -0700 [thread overview]
Message-ID: <20080310212647.19a31a23.akpm@linux-foundation.org> (raw)
In-Reply-To: <20080310215613.43c7acb0@core>
On Mon, 10 Mar 2008 21:56:13 +0000 Alan Cox <alan@lxorguk.ukuu.org.uk> wrote:
> First cut at moving the soft carrier handling knowledge entirely into the
> core code. One or two drivers still needed to snoop these functions to
> track CLOCAL internally. Instead make TIOCSSOFTCAR generate the same
> driver calls as other termios ioctls changing the clocal flag. This
> allows us to remove any driver knowledge and special casing. Also while
> we are at it we can fix the error handling.
>
> Signed-off-by: Alan Cox <alan@redhat.com>
>
> diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla-2.6.25-rc3-mm1/drivers/char/tty_ioctl.c linux-2.6.25-rc3-mm1/drivers/char/tty_ioctl.c
> --- linux.vanilla-2.6.25-rc3-mm1/drivers/char/tty_ioctl.c 2008-03-10 12:57:53.000000000 +0000
> +++ linux-2.6.25-rc3-mm1/drivers/char/tty_ioctl.c 2008-03-10 13:27:09.000000000 +0000
> @@ -753,6 +756,32 @@
> }
>
> /**
> + * tty_change_softcar - carrier change ioctl helper
> + * @tty: tty to update
> + * @arg: enable/disable CLOCAL
> + *
> + * Perform a change to the CLOCAL state and call into the driver
> + * layer to make it visible. All done with the termios mutex
> + */
> +
> +static int tty_change_softcar(struct tty_struct *tty, int arg)
> +{
> + int ret = 0;
> + int bit = arg ? CLOCAL : 0;
> + struct ktermios old = *tty->termios;
> +
> + mutex_lock(&tty->termios_mutex);
change_termios() modifies tty->termios under tty->termios_mutex, which is
very sensible.
Hence (surely?) all code which takes a copy of tty->termios should do so
under tty->termios_mutex so that it doesn't get a copy of an internally
inconsistent, half-overwritten structure.
But this code doesn't do that, nor does change_termios(), set_termios() and
perhaps other places.
Confused.
> + tty->termios->c_cflag &= ~CLOCAL;
> + tty->termios->c_cflag |= bit;
> + if (tty->driver->set_termios)
> + tty->driver->set_termios(tty, &old);
> + if ((tty->termios->c_cflag & CLOCAL) != bit)
> + ret = -EINVAL;
> + mutex_unlock(&tty->termios_mutex);
> + return ret;
> +}
prev parent reply other threads:[~2008-03-11 4:27 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-03-10 21:56 [PATCH] tty_ioctl: Soft carrier handling Alan Cox
2008-03-10 22:24 ` Jiri Slaby
2008-03-12 13:22 ` Alan Cox
2008-03-11 4:26 ` Andrew Morton [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20080310212647.19a31a23.akpm@linux-foundation.org \
--to=akpm@linux-foundation.org \
--cc=alan@lxorguk.ukuu.org.uk \
--cc=linux-kernel@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.