Re: [PATCH 6.8 193/273] stackdepot: rename pool_index to pool_index_plus_1

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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;
>  





[Index of Archives]     [Linux Kernel]     [Kernel Development Newbies]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite Hiking]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux