On 4/8/24 2:57 PM, Greg Kroah-Hartman wrote: > 6.8-stable review patch. If anyone has any objections, please let me know. > > ------------------ > > From: Peter Collingbourne <pcc@xxxxxxxxxx> > > [ Upstream commit a6c1d9cb9a68bfa4512248419c4f4d880d19fe90 ] > > Commit 3ee34eabac2a ("lib/stackdepot: fix first entry having a 0-handle") > changed the meaning of the pool_index field to mean "the pool index plus > 1". This made the code accessing this field less self-documenting, as > well as causing debuggers such as drgn to not be able to easily remain > compatible with both old and new kernels, because they typically do that > by testing for presence of the new field. Because stackdepot is a > debugging tool, we should make sure that it is debugger friendly. > Therefore, give the field a different name to improve readability as well > as enabling debugger backwards compatibility. > > This is needed in 6.9, which would otherwise become an odd release with > the new semantics and old name so debuggers wouldn't recognize the new > semantics there. This got me curious so I did check what's going on, so mentioning the result here others don't need to repeat that. > Fixes: 3ee34eabac2a ("lib/stackdepot: fix first entry having a 0-handle") It's because this was backported to 6.8.2 despite: > This bug has been lurking since the very beginning of stackdepot, but no > one really cared as it seems. Because of that I am not adding a Fixes > tag. Then indeed this commit would be needed too in 6.8.y in order to not confuse drgn and co. I forgot that the stable MM extemption is based on source code paths, not commits going through the mm tree, so it didn't cover stackdepot itself. > Link: https://lkml.kernel.org/r/20240402001500.53533-1-pcc@xxxxxxxxxx > Link: https://linux-review.googlesource.com/id/Ib3e70c36c1d230dd0a118dc22649b33e768b9f88 > Signed-off-by: Peter Collingbourne <pcc@xxxxxxxxxx> > Acked-by: Vlastimil Babka <vbabka@xxxxxxx> > Reviewed-by: Alexander Potapenko <glider@xxxxxxxxxx> > Acked-by: Marco Elver <elver@xxxxxxxxxx> > Acked-by: Oscar Salvador <osalvador@xxxxxxx> > Cc: Andrey Konovalov <andreyknvl@xxxxxxxxx> > Cc: Michal Hocko <mhocko@xxxxxxxx> > Cc: Omar Sandoval <osandov@xxxxxx> > Signed-off-by: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx> > Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx> > --- > include/linux/stackdepot.h | 7 +++---- > lib/stackdepot.c | 4 ++-- > 2 files changed, 5 insertions(+), 6 deletions(-) > > diff --git a/include/linux/stackdepot.h b/include/linux/stackdepot.h > index c4b5ad57c0660..bf0136891a0f2 100644 > --- a/include/linux/stackdepot.h > +++ b/include/linux/stackdepot.h > @@ -44,10 +44,9 @@ typedef u32 depot_stack_handle_t; > union handle_parts { > depot_stack_handle_t handle; > struct { > - /* pool_index is offset by 1 */ > - u32 pool_index : DEPOT_POOL_INDEX_BITS; > - u32 offset : DEPOT_OFFSET_BITS; > - u32 extra : STACK_DEPOT_EXTRA_BITS; > + u32 pool_index_plus_1 : DEPOT_POOL_INDEX_BITS; > + u32 offset : DEPOT_OFFSET_BITS; > + u32 extra : STACK_DEPOT_EXTRA_BITS; > }; > }; > > diff --git a/lib/stackdepot.c b/lib/stackdepot.c > index ee4bbe6513aa4..ee830f14afb78 100644 > --- a/lib/stackdepot.c > +++ b/lib/stackdepot.c > @@ -330,7 +330,7 @@ static struct stack_record *depot_pop_free_pool(void **prealloc, size_t size) > stack = current_pool + pool_offset; > > /* Pre-initialize handle once. */ > - stack->handle.pool_index = pool_index + 1; > + stack->handle.pool_index_plus_1 = pool_index + 1; > stack->handle.offset = pool_offset >> DEPOT_STACK_ALIGN; > stack->handle.extra = 0; > INIT_LIST_HEAD(&stack->hash_list); > @@ -441,7 +441,7 @@ static struct stack_record *depot_fetch_stack(depot_stack_handle_t handle) > const int pools_num_cached = READ_ONCE(pools_num); > union handle_parts parts = { .handle = handle }; > void *pool; > - u32 pool_index = parts.pool_index - 1; > + u32 pool_index = parts.pool_index_plus_1 - 1; > size_t offset = parts.offset << DEPOT_STACK_ALIGN; > struct stack_record *stack; >