[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <YiH6cXo1qThA1X6B@ip-172-31-19-208.ap-northeast-1.compute.internal>
Date: Fri, 4 Mar 2022 11:39:29 +0000
From: Hyeonggon Yoo <42.hyeyoo@...il.com>
To: Byungchul Park <byungchul.park@....com>
Cc: torvalds@...ux-foundation.org, damien.lemoal@...nsource.wdc.com,
linux-ide@...r.kernel.org, adilger.kernel@...ger.ca,
linux-ext4@...r.kernel.org, mingo@...hat.com,
linux-kernel@...r.kernel.org, peterz@...radead.org,
will@...nel.org, tglx@...utronix.de, rostedt@...dmis.org,
joel@...lfernandes.org, sashal@...nel.org, daniel.vetter@...ll.ch,
chris@...is-wilson.co.uk, duyuyang@...il.com,
johannes.berg@...el.com, tj@...nel.org, tytso@....edu,
willy@...radead.org, david@...morbit.com, amir73il@...il.com,
bfields@...ldses.org, gregkh@...uxfoundation.org,
kernel-team@....com, linux-mm@...ck.org, akpm@...ux-foundation.org,
mhocko@...nel.org, minchan@...nel.org, hannes@...xchg.org,
vdavydov.dev@...il.com, sj@...nel.org, jglisse@...hat.com,
dennis@...nel.org, cl@...ux.com, penberg@...nel.org,
rientjes@...gle.com, vbabka@...e.cz, ngupta@...are.org,
linux-block@...r.kernel.org, paolo.valente@...aro.org,
josef@...icpanda.com, linux-fsdevel@...r.kernel.org,
viro@...iv.linux.org.uk, jack@...e.cz, jack@...e.com,
jlayton@...nel.org, dan.j.williams@...el.com, hch@...radead.org,
djwong@...nel.org, dri-devel@...ts.freedesktop.org,
airlied@...ux.ie, rodrigosiqueiramelo@...il.com,
melissa.srw@...il.com, hamohammed.sa@...il.com
Subject: Re: [PATCH v4 22/24] dept: Don't create dependencies between
different depths in any case
On Fri, Mar 04, 2022 at 04:06:41PM +0900, Byungchul Park wrote:
> Dept already prevents creating dependencies between different depths of
> the class indicated by *_lock_nested() when the lock acquisitions happen
> consecutively.
>
> lock A0 with depth
> lock_nested A1 with depth + 1
> ...
> unlock A1
> unlock A0
>
> Dept does not create A0 -> A1 dependency in this case, either.
>
> However, once another class cut in, the code becomes problematic. When
> Dept tries to create real dependencies, it does not only create real
> ones but also wrong ones between different depths of the class.
>
> lock A0 with depth
> lock B
> lock_nested A1 with depth + 1
> ...
> unlock A1
> unlock B
> unlock A0
>
> Even in this case, Dept should not create A0 -> A1 dependency.
>
> So let Dept not create wrong dependencies between different depths of
> the class in any case.
>
> Reported-by: 42.hyeyoo@...il.com
> Signed-off-by: Byungchul Park <byungchul.park@....com>
> ---
> kernel/dependency/dept.c | 9 +--------
> 1 file changed, 1 insertion(+), 8 deletions(-)
>
> diff --git a/kernel/dependency/dept.c b/kernel/dependency/dept.c
> index 5d4efc3..cc1b3a3 100644
> --- a/kernel/dependency/dept.c
> +++ b/kernel/dependency/dept.c
> @@ -1458,14 +1458,7 @@ static void add_wait(struct dept_class *c, unsigned long ip,
>
> eh = dt->ecxt_held + i;
> if (eh->ecxt->class != c || eh->nest == ne)
> - break;
> - }
> -
> - for (; i >= 0; i--) {
> - struct dept_ecxt_held *eh;
> -
> - eh = dt->ecxt_held + i;
> - add_dep(eh->ecxt, w);
> + add_dep(eh->ecxt, w);
> }
>
> if (!wait_consumed(w) && !rich_stack) {
> --
> 1.9.1
>
>
Works as expected, Thanks!
I would report if there is anything else interesting.
Tested-by: Hyeonggon Yoo <42.hyeyoo@...il.com>
--
Thank you, You are awesome!
Hyeonggon :-)
Powered by blists - more mailing lists