Re: kernel/trace/ring_buffer.c:412:29-47: WARNING: casting value returned by memory allocation function to (struct buffer_page *) is useless.

Steven Rostedt <[email protected]> Fri, 31 Jul 2026 20:28:04 -0400
Newsgroups dev.linux.lists.oe-kbuild-all,org.kernel.vger.linux-kernel
Message-ID <20260731202804.06a4056f@robin>
On Sat, 01 Aug 2026 08:10:14 +0800
kernel test robot <[email protected]> wrote:

> tree:   https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
> head:   8ba098e6b6ff0db8edf28528d1552be261af30d4
> commit: b1e7a590a0133606d3efd41aee38cdeac630b52f ring-buffer: Add helper functions for allocations
> date:   8 months ago
> config: openrisc-randconfig-r062-20260801 (https://download.01.org/0day-ci/archive/20260801/[email protected]/config)
> compiler: or1k-linux-gcc (GCC) 9.5.0
> 
> If you fix the issue in a separate patch/commit (i.e. not just a new version of
> the same patch/commit), kindly add following tags
> | Fixes: b1e7a590a013 ("ring-buffer: Add helper functions for allocations")
> | Reported-by: kernel test robot <[email protected]>
> | Closes: https://lore.kernel.org/oe-kbuild-all/[email protected]/
> 
> cocci warnings: (new ones prefixed by >>)
> >> kernel/trace/ring_buffer.c:412:29-47: WARNING: casting value returned by memory allocation function to (struct buffer_page *) is useless.
> >> kernel/trace/ring_buffer.c:408:31-57: WARNING: casting value returned by memory allocation function to (struct ring_buffer_per_cpu *) is useless.  

No, whatever Coccinelle script that reported this is broken.

The typecast is in a macro. The macro is adding the typecast to make
sure that what it is being assigned to is of the proper type.

Hence, it is very *useful*!

-- Steve


> 
> vim +412 kernel/trace/ring_buffer.c
> 
>    403	
>    404	/*
>    405	 * For best performance, allocate cpu buffer data cache line sized
>    406	 * and per CPU.
>    407	 */
>  > 408	#define alloc_cpu_buffer(cpu) (struct ring_buffer_per_cpu *)		\  
>    409		kzalloc_node(ALIGN(sizeof(struct ring_buffer_per_cpu),		\
>    410				   cache_line_size()), GFP_KERNEL, cpu_to_node(cpu));
>    411	
>  > 412	#define alloc_cpu_page(cpu) (struct buffer_page *)			\  
>    413		kzalloc_node(ALIGN(sizeof(struct buffer_page),			\
>    414				   cache_line_size()), GFP_KERNEL, cpu_to_node(cpu));
>    415	
> 
> --
> 0-DAY CI Kernel Test Service
> https://github.com/intel/lkp-tests/wiki