From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751231AbdFDLfd (ORCPT ); Sun, 4 Jun 2017 07:35:33 -0400 Received: from mout.gmx.net ([212.227.17.21]:54066 "EHLO mout.gmx.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750847AbdFDLfZ (ORCPT ); Sun, 4 Jun 2017 07:35:25 -0400 Message-ID: <1496576071.6573.13.camel@gmx.de> Subject: Re: [bisected] Re: tty lockdep trace From: Mike Galbraith To: Vegard Nossum , Greg Kroah-Hartman Cc: Dave Jones , Linux Kernel , Jiri Slaby Date: Sun, 04 Jun 2017 13:34:31 +0200 In-Reply-To: <6b025884-8fbc-1ae2-3119-63e601453ad6@oracle.com> References: <20170531172117.nj5fwgqspibg7rs6@codemonkey.org.uk> <1496471632.11868.1.camel@gmx.de> <20170604083225.GA2959@kroah.com> <1496566972.16375.10.camel@gmx.de> <6b025884-8fbc-1ae2-3119-63e601453ad6@oracle.com> Content-Type: text/plain; charset="UTF-8" X-Mailer: Evolution 3.20.5 Mime-Version: 1.0 Content-Transfer-Encoding: 7bit X-Provags-ID: V03:K0:aVfPWQ68K60zkGZPbgnJ/kNGIwws3YnqarGGrMjV9yhxArKTWdO vweLL8jl6X63VTvqNIEsk4lq/h7wDb5EI5Bqc5vwxbZFG7FXg9EUKNqsp3as+NADaMu5abh krmQ4s5ZcqMj4uoCIgxTh8NqItA4tgMRcCfoUAv9ssjTcRAS0WhHcV8MdB+JEY/i23zg5Ms /5g7U/j9t0e/PHJrh1izw== X-UI-Out-Filterresults: notjunk:1;V01:K0:j3/qaHLLoIs=:56CR7Uc+uBEG1gqf/8lQQ5 nkOIuXZU/NRbfdFeq6ULIvCEA4ssZ8wpQByoeCD0DtQ3sEBT4U0wUOQPJpvBKF6G1v6uwy9Dc Ltx8ZlzDjdVViAx7YlKRxGebBD9DoZQ2IP9lOlTVyBAZrnaFKzn9Q6UY74mta3mUCMpq2ZsrS rm2mUdrxkAZcT5FEv0H4dJVIMe1wzRfOn/kpMxmSLw7vWHFQYfKiMgV/UjeuvzmPaFad3daic cqwR6TLWe3LF9K06tQPLx8V8t6sNvH9mqevYZfNXuXKzR7tIJov45sypOwe0WqF5mMo6pm1mZ Auia8kyq5+j9zpn3Rok5pk9cOagShCvch5Qo9Qor81BaroGVxUvYTi4JOW6txqxxIIE2jGStK y7lqTd34/holEeMvRNZeaQ9ZAD+4SYFdiePmNixU7DXbLTX7J35Ad56dtSwqUbQoa58dlAi2c wLljKGEOd8d7VdM0BIfphxpg+GCMeOwny2PkU3V3rIhyfQyWvNhPnhPEEq87se/o71K0DFQME P1/UAwRmrbtFaHlXhCM4sDnrEgQ9WMkUArJleM50/AKAqoPvR4gQ1sr/di3EY43WTOvTJzH3r ZNNFT1dHzH24jlYhVogBGLZ9ehE2hNqMR92hKDAAhGUMlJ9yFgvqtaKCxMzreh302IVKCZk4f a9LtvlOhriGjGn3IeppKTTU3YtRy+rK8MvyYIQR5JoR0s9P8JTovd1b1AHL6xS3jmTO1Wyl2K cJd384bQF7lFZqnHSlESSPUj3/L52CNeNdU4gQ1cupDtkowFxn56/oZNWR6e5NbSe3iMM0m0a foqR0eU Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Sun, 2017-06-04 at 12:00 +0200, Vegard Nossum wrote: > > I don't know how you did it, but this passes my testing (reproducers for > both the original issue and the lockdep splat/hang). I suppose I can sign it off, see if that inspires anyone to come up with something better. drivers/tty: Fix 925bb1ce47f4 circular locking dependency 925bb1ce47f4 (tty: fix port buffer locking) upset lockdep by holding buf->lock while acquiring tty->atomic_write_lock. Move acquisition to flush_to_ldisc(), taking it prior to taking buf->lock. Costs a reference, but appeases lockdep. Signed-off-by: Mike Galbraith Fixes: 925bb1ce47f4 ("tty: fix port buffer locking") --- drivers/tty/tty_buffer.c | 10 ++++++++++ drivers/tty/tty_port.c | 2 -- 2 files changed, 10 insertions(+), 2 deletions(-) --- a/drivers/tty/tty_buffer.c +++ b/drivers/tty/tty_buffer.c @@ -465,7 +465,13 @@ static void flush_to_ldisc(struct work_s { struct tty_port *port = container_of(work, struct tty_port, buf.work); struct tty_bufhead *buf = &port->buf; + struct tty_struct *tty = READ_ONCE(port->itty); + struct tty_ldisc *disc = NULL; + if (tty) + disc = tty_ldisc_ref(tty); + if (disc) + mutex_lock(&tty->atomic_write_lock); mutex_lock(&buf->lock); while (1) { @@ -501,6 +507,10 @@ static void flush_to_ldisc(struct work_s } mutex_unlock(&buf->lock); + if (disc) { + mutex_unlock(&tty->atomic_write_lock); + tty_ldisc_deref(disc); + } } --- a/drivers/tty/tty_port.c +++ b/drivers/tty/tty_port.c @@ -34,9 +34,7 @@ static int tty_port_default_receive_buf( if (!disc) return 0; - mutex_lock(&tty->atomic_write_lock); ret = tty_ldisc_receive_buf(disc, p, (char *)f, count); - mutex_unlock(&tty->atomic_write_lock); tty_ldisc_deref(disc);