[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <CACT4Y+YMK=fh0G-qL7d8zpop9iNzKKwE3F0HKgjiPTsXXNbp0w@mail.gmail.com>
Date: Wed, 20 Jan 2016 12:54:55 +0100
From: Dmitry Vyukov <dvyukov@...gle.com>
To: Peter Zijlstra <peterz@...radead.org>
Cc: One Thousand Gnomes <gnomes@...rguk.ukuu.org.uk>,
Ingo Molnar <mingo@...hat.com>,
Greg Kroah-Hartman <gregkh@...uxfoundation.org>,
Jiri Slaby <jslaby@...e.com>,
LKML <linux-kernel@...r.kernel.org>,
J Freyensee <james_p_freyensee@...ux.intel.com>,
syzkaller <syzkaller@...glegroups.com>,
Kostya Serebryany <kcc@...gle.com>,
Alexander Potapenko <glider@...gle.com>,
Sasha Levin <sasha.levin@...cle.com>,
Eric Dumazet <edumazet@...gle.com>
Subject: Re: tty: deadlock between n_tracerouter_receivebuf and flush_to_ldisc
On Wed, Jan 20, 2016 at 12:44 PM, Peter Zijlstra <peterz@...radead.org> wrote:
> On Wed, Jan 20, 2016 at 10:36:01AM +0100, Dmitry Vyukov wrote:
>
>> +Peter, Ingo, can you please suggest a way to annotate this locking
>> pattern to avoid lockdep false positive?
>
> No, because I haven't a clue what the actual problem is.
>
> The report is fairly clear on how:
>
> routelock
> &port->buf.lock/1
> &o_tty->termios_rwsem/1
> &buf->lock
>
> gets established, and shows where we try:
>
> &buf->lock
> routelock
>
> Which gives a circle, ergo deadlock.
>
> Show which link is wrong and why, and I can suggest ways of annotating
> that.
Alan provided an explanation calling this "false report":
https://groups.google.com/d/msg/syzkaller/YrV0bzdfa-g/cCVoUf1OFQAJ
And I don't understand how the following is a deadlock, since there is
no cycle...
Possible unsafe locking scenario:
CPU0 CPU1
---- ----
lock(&buf->lock);
lock(&o_tty->termios_rwsem/1);
lock(&buf->lock);
lock(routelock);
Shouldn't it look like:
Possible unsafe locking scenario:
CPU0 CPU1
---- ----
lock(&buf->lock);
lock(routelock);
lock(&buf->lock);
lock(routelock);
?
Powered by blists - more mailing lists