Re: [PATCH 16/18] lib/stackdepot: annotate racy slab_index accesses

From: Andrew Morton
Date: Tue Jan 31 2023 - 16:14:15 EST


On Tue, 31 Jan 2023 19:57:58 +0100 Andrey Konovalov <andreyknvl@xxxxxxxxx> wrote:

> On Tue, Jan 31, 2023 at 9:41 AM Marco Elver <elver@xxxxxxxxxx> wrote:
> >
> > > diff --git a/lib/stackdepot.c b/lib/stackdepot.c
> > > index f291ad6a4e72..cc2fe8563af4 100644
> > > --- a/lib/stackdepot.c
> > > +++ b/lib/stackdepot.c
> > > @@ -269,8 +269,11 @@ depot_alloc_stack(unsigned long *entries, int size, u32 hash, void **prealloc)
> > > return NULL;
> > > }
> > >
> > > - /* Move on to the next slab. */
> > > - slab_index++;
> > > + /*
> > > + * Move on to the next slab.
> > > + * WRITE_ONCE annotates a race with stack_depot_fetch.
> >
> > "Pairs with potential concurrent read in stack_depot_fetch()." would be clearer.
> >
> > I wouldn't say WRITE_ONCE annotates a race (race = involves 2+
> > accesses, but here's just 1), it just marks this access here which
> > itself is paired with the potential racing read in the other function.
>
> Will do in v2. Thanks!

Please let's not redo an 18-patch series for a single line comment
change. If there are more substantial changes then OK.

I queued this as a to-be-squashed fixup against "/stackdepot: annotate
racy slab_index accesses":


From: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx>
Subject: lib-stackdepot-annotate-racy-slab_index-accesses-fix
Date: Tue Jan 31 01:10:50 PM PST 2023

enhance comment, per Marco

Cc: Alexander Potapenko <glider@xxxxxxxxxx>
Cc: Andrey Konovalov <andreyknvl@xxxxxxxxxx>
Cc: Evgenii Stepanov <eugenis@xxxxxxxxxx>
Cc: Marco Elver <elver@xxxxxxxxxx>
Cc: Vlastimil Babka <vbabka@xxxxxxx>
Signed-off-by: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx>
---

lib/stackdepot.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)

--- a/lib/stackdepot.c~lib-stackdepot-annotate-racy-slab_index-accesses-fix
+++ a/lib/stackdepot.c
@@ -271,7 +271,8 @@ depot_alloc_stack(unsigned long *entries

/*
* Move on to the next slab.
- * WRITE_ONCE annotates a race with stack_depot_fetch.
+ * WRITE_ONCE pairs with potential concurrent read in
+ * stack_depot_fetch().
*/
WRITE_ONCE(slab_index, slab_index + 1);
slab_offset = 0;
_