public inbox for llvm@lists.linux.dev
 help / color / mirror / Atom feed
From: Nathan Chancellor <nathan@kernel.org>
To: Seven Lee <wtli@nuvoton.com>, Jaroslav Kysela <perex@perex.cz>,
	Mark Brown <broonie@kernel.org>
Cc: llvm@lists.linux.dev, oe-kbuild-all@lists.linux.dev,
	kernel test robot <lkp@intel.com>
Subject: Re: [linux-next:master 11929/12398] sound/soc/codecs/nau8325.c:430:13: warning: variable 'n2_max' is uninitialized when used here
Date: Mon, 1 Dec 2025 12:10:52 -0700	[thread overview]
Message-ID: <20251201191052.GA2727778@ax162> (raw)
In-Reply-To: <202511271353.g6GYVUt6-lkp@intel.com>

On Thu, Nov 27, 2025 at 01:50:44PM +0800, kernel test robot wrote:
> Hi Jaroslav,
> 
> First bad commit (maybe != root cause):

Indeed, this appears to be a problem from commit c0a3873b9938 ("ASoC:
nau8325: new driver"), it was simply not visible before the driver was
actually hooked into the build system.

> tree:   https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git master
> head:   ef68bf704646690aba5e81c2f7be8d6ef13d7ad8
> commit: cd41d3420ef658b2ca902d7677536ec8e25b610a [11929/12398] ASoC: nau8325: add missing build config
> config: loongarch-allmodconfig (https://download.01.org/0day-ci/archive/20251127/202511271353.g6GYVUt6-lkp@intel.com/config)
> compiler: clang version 19.1.7 (https://github.com/llvm/llvm-project cd708029e0b2869e80abe31ddb175f7c35361f90)
> reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20251127/202511271353.g6GYVUt6-lkp@intel.com/reproduce)
> 
> 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
> | Reported-by: kernel test robot <lkp@intel.com>
> | Closes: https://lore.kernel.org/oe-kbuild-all/202511271353.g6GYVUt6-lkp@intel.com/
> 
> All warnings (new ones prefixed by >>):
> 
> >> sound/soc/codecs/nau8325.c:430:13: warning: variable 'n2_max' is uninitialized when used here [-Wuninitialized]
>      430 |                 *n2_sel = n2_max;
>          |                           ^~~~~~
>    sound/soc/codecs/nau8325.c:389:52: note: initialize the variable 'n2_max' to silence this warning
>      389 |         int i, j, mclk, mclk_max, ratio, ratio_sel, n2_max;
>          |                                                           ^
>          |                                                            = 0
> >> sound/soc/codecs/nau8325.c:431:11: warning: variable 'ratio_sel' is uninitialized when used here [-Wuninitialized]
>      431 |                 ratio = ratio_sel;
>          |                         ^~~~~~~~~
>    sound/soc/codecs/nau8325.c:389:44: note: initialize the variable 'ratio_sel' to silence this warning
>      389 |         int i, j, mclk, mclk_max, ratio, ratio_sel, n2_max;
>          |                                                   ^
>          |                                                    = 0
>    2 warnings generated.

This warning seems legitimate even though it seems like there is no harm
at runtime?

> vim +/n2_max +430 sound/soc/codecs/nau8325.c
> 
> c0a3873b9938bf Seven Lee 2024-03-27  384  
> c0a3873b9938bf Seven Lee 2024-03-27  385  static int nau8325_clksrc_choose(struct nau8325 *nau8325,
> c0a3873b9938bf Seven Lee 2024-03-27  386  				 const struct nau8325_srate_attr **srate_table,
> c0a3873b9938bf Seven Lee 2024-03-27  387  				 int *n1_sel, int *mult_sel, int *n2_sel)
> c0a3873b9938bf Seven Lee 2024-03-27  388  {
> c0a3873b9938bf Seven Lee 2024-03-27  389  	int i, j, mclk, mclk_max, ratio, ratio_sel, n2_max;
> c0a3873b9938bf Seven Lee 2024-03-27  390  
> c0a3873b9938bf Seven Lee 2024-03-27  391  	if (!nau8325->mclk || !nau8325->fs)
> c0a3873b9938bf Seven Lee 2024-03-27  392  		goto proc_err;
> c0a3873b9938bf Seven Lee 2024-03-27  393  
> c0a3873b9938bf Seven Lee 2024-03-27  394  	/* select sampling rate and MCLK_SRC */
> c0a3873b9938bf Seven Lee 2024-03-27  395  	*srate_table = target_srate_attribute(nau8325->fs);
> c0a3873b9938bf Seven Lee 2024-03-27  396  	if (!*srate_table)
> c0a3873b9938bf Seven Lee 2024-03-27  397  		goto proc_err;
> c0a3873b9938bf Seven Lee 2024-03-27  398  
> c0a3873b9938bf Seven Lee 2024-03-27  399  	/* First check clock from MCLK directly, decide N2 for MCLK_SRC.
> c0a3873b9938bf Seven Lee 2024-03-27  400  	 * If not good, consider 1/N1 and Multiplier.
> c0a3873b9938bf Seven Lee 2024-03-27  401  	 */
> c0a3873b9938bf Seven Lee 2024-03-27  402  	ratio = nau8325_clksrc_n2(nau8325, *srate_table, nau8325->mclk, n2_sel);
> c0a3873b9938bf Seven Lee 2024-03-27  403  	if (ratio != NAU8325_MCLK_FS_RATIO_NUM) {
> c0a3873b9938bf Seven Lee 2024-03-27  404  		*n1_sel = 0;
> c0a3873b9938bf Seven Lee 2024-03-27  405  		*mult_sel = CLK_PROC_BYPASS;
> c0a3873b9938bf Seven Lee 2024-03-27  406  		*n2_sel = MCLK_SRC;
> c0a3873b9938bf Seven Lee 2024-03-27  407  		goto proc_done;
> c0a3873b9938bf Seven Lee 2024-03-27  408  	}
> c0a3873b9938bf Seven Lee 2024-03-27  409  
> c0a3873b9938bf Seven Lee 2024-03-27  410  	/* Get MCLK_SRC through 1/N, Multiplier, and then 1/N2. */
> c0a3873b9938bf Seven Lee 2024-03-27  411  	mclk_max = 0;
> c0a3873b9938bf Seven Lee 2024-03-27  412  	for (i = 0; i < ARRAY_SIZE(mclk_n1_div); i++) {
> c0a3873b9938bf Seven Lee 2024-03-27  413  		for (j = 0; j < ARRAY_SIZE(mclk_n3_mult); j++) {
> c0a3873b9938bf Seven Lee 2024-03-27  414  			mclk = nau8325->mclk << mclk_n3_mult[j].param;
> c0a3873b9938bf Seven Lee 2024-03-27  415  			mclk = mclk / mclk_n1_div[i].param;
> c0a3873b9938bf Seven Lee 2024-03-27  416  			ratio = nau8325_clksrc_n2(nau8325,
> c0a3873b9938bf Seven Lee 2024-03-27  417  						  *srate_table, mclk, n2_sel);
> c0a3873b9938bf Seven Lee 2024-03-27  418  			if (ratio != NAU8325_MCLK_FS_RATIO_NUM &&
> c0a3873b9938bf Seven Lee 2024-03-27  419  			    (mclk_max < mclk || i > *n1_sel)) {
> c0a3873b9938bf Seven Lee 2024-03-27  420  				mclk_max = mclk;
> c0a3873b9938bf Seven Lee 2024-03-27  421  				n2_max = *n2_sel;
> c0a3873b9938bf Seven Lee 2024-03-27  422  				*n1_sel = i;
> c0a3873b9938bf Seven Lee 2024-03-27  423  				*mult_sel = j;
> c0a3873b9938bf Seven Lee 2024-03-27  424  				ratio_sel = ratio;
> c0a3873b9938bf Seven Lee 2024-03-27  425  					goto proc_done;

n2_max and ratio_sel are only assigned in this if block, which ends in
an unconditional jump to proc_done...

> c0a3873b9938bf Seven Lee 2024-03-27  426  			}
> c0a3873b9938bf Seven Lee 2024-03-27  427  		}
> c0a3873b9938bf Seven Lee 2024-03-27  428  	}
> c0a3873b9938bf Seven Lee 2024-03-27  429  	if (mclk_max) {
> c0a3873b9938bf Seven Lee 2024-03-27 @430  		*n2_sel = n2_max;
> c0a3873b9938bf Seven Lee 2024-03-27 @431  		ratio = ratio_sel;
> c0a3873b9938bf Seven Lee 2024-03-27  432  		goto proc_done;
> c0a3873b9938bf Seven Lee 2024-03-27  433  	}

which will always skip this if block, so if this if statement is taken,
these values are genuinely uninitialized.

However, as far as I can tell, if the first if statement is not taken,
mclk_max will be 0, so it seems like this if statement is never taken
and is dead code? At the same time, won't 'mclk_max < mclk' always be
true unless mclk itself is 0, so what purpose does mclk_max serve
otherwise? Was it intentional that the first if statement ends in a jump
to proc_done? It looks like the value of n2_max is never actually used
outside of this dead if statement.

> c0a3873b9938bf Seven Lee 2024-03-27  435  proc_err:
> c0a3873b9938bf Seven Lee 2024-03-27  436  	dev_dbg(nau8325->dev, "The MCLK %d is invalid. It can't get MCLK_SRC of 256/400/500 FS (%d)",
> c0a3873b9938bf Seven Lee 2024-03-27  437  		nau8325->mclk, nau8325->fs);
> c0a3873b9938bf Seven Lee 2024-03-27  438  	return -EINVAL;
> c0a3873b9938bf Seven Lee 2024-03-27  439  proc_done:
> c0a3873b9938bf Seven Lee 2024-03-27  440  	dev_dbg(nau8325->dev, "nau8325->fs=%d,range=0x%x, %s, (n1,mu,n2,dmu):(%d,%d,%d), MCLK_SRC=%uHz (%d)",
> c0a3873b9938bf Seven Lee 2024-03-27  441  		nau8325->fs, (*srate_table)->range,
> c0a3873b9938bf Seven Lee 2024-03-27  442  		(*srate_table)->max ? "MAX" : "MIN",
> c0a3873b9938bf Seven Lee 2024-03-27  443  		*n1_sel == CLK_PROC_BYPASS ?
> c0a3873b9938bf Seven Lee 2024-03-27  444  		CLK_PROC_BYPASS : mclk_n1_div[*n1_sel].param,
> c0a3873b9938bf Seven Lee 2024-03-27  445  		*mult_sel == CLK_PROC_BYPASS ?
> c0a3873b9938bf Seven Lee 2024-03-27  446  		CLK_PROC_BYPASS : 1 << mclk_n3_mult[*mult_sel].param,
> c0a3873b9938bf Seven Lee 2024-03-27  447  		1 << mclk_n2_div[*n2_sel].param,
> c0a3873b9938bf Seven Lee 2024-03-27  448  		(*srate_table)->mclk_src[ratio],
> c0a3873b9938bf Seven Lee 2024-03-27  449  		(*srate_table)->mclk_src[ratio] / nau8325->fs);
> c0a3873b9938bf Seven Lee 2024-03-27  450  
> c0a3873b9938bf Seven Lee 2024-03-27  451  	return 0;
> c0a3873b9938bf Seven Lee 2024-03-27  452  }
> c0a3873b9938bf Seven Lee 2024-03-27  453  

Cheers,
Nathan

      reply	other threads:[~2025-12-01 19:10 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-11-27  5:50 [linux-next:master 11929/12398] sound/soc/codecs/nau8325.c:430:13: warning: variable 'n2_max' is uninitialized when used here kernel test robot
2025-12-01 19:10 ` Nathan Chancellor [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20251201191052.GA2727778@ax162 \
    --to=nathan@kernel.org \
    --cc=broonie@kernel.org \
    --cc=lkp@intel.com \
    --cc=llvm@lists.linux.dev \
    --cc=oe-kbuild-all@lists.linux.dev \
    --cc=perex@perex.cz \
    --cc=wtli@nuvoton.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox