All of lore.kernel.org
 help / color / mirror / Atom feed
From: Nathan Chancellor <nathan@kernel.org>
To: Dan Carpenter <dan.carpenter@linaro.org>
Cc: "Benoît Monin" <benoit.monin@bootlin.com>,
	"Adrian Hunter" <adrian.hunter@intel.com>,
	"Ulf Hansson" <ulf.hansson@linaro.org>,
	linux-mmc@vger.kernel.org, llvm@lists.linux.dev,
	patches@lists.linux.dev
Subject: Re: [PATCH] mmc: sdhci-cadence: Fix -Wuninitialized in sdhci_cdns_tune_blkgap()
Date: Wed, 20 Aug 2025 09:20:48 -0700	[thread overview]
Message-ID: <20250820162048.GC3805667@ax162> (raw)
In-Reply-To: <aKWmvWTtQ_QZYgEm@stanley.mountain>

On Wed, Aug 20, 2025 at 01:43:09PM +0300, Dan Carpenter wrote:
> On Wed, Aug 20, 2025 at 10:07:35AM +0200, Benoît Monin wrote:
> > > --- a/drivers/mmc/host/sdhci-cadence.c
> > > +++ b/drivers/mmc/host/sdhci-cadence.c
> > > @@ -288,13 +288,12 @@ static int sdhci_cdns_tune_blkgap(struct mmc_host *mmc)
> > >  	void __iomem *hrs38_reg = priv->hrs_addr + SDHCI_CDNS_HRS38;
> > >  	int ret;
> > >  	u32 gap;
> > > -	u32 hrs37_mode;
> > >  
> > >  	/* Currently only needed in HS200 mode */
> > >  	if (host->timing != MMC_TIMING_MMC_HS200)
> > >  		return 0;
> > >  
> > > -	writel(hrs37_mode, hrs37_reg);
> > > +	writel(SDHCI_CDNS_HRS37_MODE_MMC_HS200, hrs37_reg);
> > >  
> > >  	for (gap = 0; gap <= SDHCI_CDNS_HRS38_BLKGAP_MAX; gap++) {
> > >  		writel(gap, hrs38_reg);
> > > 
> > Thanks for the catch!
> > 
> > I don't get how gcc does not raise a warning here, only clang does. I
> > did build with gcc-11 and gcc-15 and they don't complain about this
> > uninitialized variable.
> > 
> 
> We disabled uninitialized variable checking on GCC.  It was too crazy
> and especially if we want to use -Werror.
> 
> Smatch also detects this bug.

Technically, -Wuninitialized is on for GCC as well but as soon as there
is control flow between the declaration of the variable and its usage,
it gets changed into -Wmaybe-uninitialized :/

In file included from arch/arm64/include/asm/io.h:288,
                 from include/linux/io.h:12,
                 from include/linux/iopoll.h:14,
                 from drivers/mmc/host/sdhci-cadence.c:9:
In function 'writel',
    inlined from 'sdhci_cdns_tune_blkgap' at drivers/mmc/host/sdhci-cadence.c:297:2,
    inlined from 'sdhci_cdns_execute_tuning' at drivers/mmc/host/sdhci-cadence.c:352:9:
include/asm-generic/io.h:276:9: error: 'hrs37_mode' may be used uninitialized [-Werror=maybe-uninitialized]
  276 |         log_write_mmio(value, 32, addr, _THIS_IP_, _RET_IP_);
      |         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
drivers/mmc/host/sdhci-cadence.c: In function 'sdhci_cdns_execute_tuning':
drivers/mmc/host/sdhci-cadence.c:291:13: note: 'hrs37_mode' was declared here
  291 |         u32 hrs37_mode;
      |             ^~~~~~~~~~

vs

diff --git a/drivers/mmc/host/sdhci-cadence.c b/drivers/mmc/host/sdhci-cadence.c
index a2a4a5b0ab96..b968c0fb925d 100644
--- a/drivers/mmc/host/sdhci-cadence.c
+++ b/drivers/mmc/host/sdhci-cadence.c
@@ -290,12 +290,12 @@ static int sdhci_cdns_tune_blkgap(struct mmc_host *mmc)
        u32 gap;
        u32 hrs37_mode;

+       writel(hrs37_mode, hrs37_reg);
+
        /* Currently only needed in HS200 mode */
        if (host->timing != MMC_TIMING_MMC_HS200)
                return 0;

-       writel(hrs37_mode, hrs37_reg);
-
        for (gap = 0; gap <= SDHCI_CDNS_HRS38_BLKGAP_MAX; gap++) {
                writel(gap, hrs38_reg);
                ret = mmc_read_tuning(mmc, 512, 32);

In file included from arch/arm64/include/asm/io.h:288,
                 from include/linux/io.h:12,
                 from include/linux/iopoll.h:14,
                 from drivers/mmc/host/sdhci-cadence.c:9:
drivers/mmc/host/sdhci-cadence.c: In function 'sdhci_cdns_tune_blkgap':
include/asm-generic/io.h:273:16: error: 'hrs37_mode' is used uninitialized [-Werror=uninitialized]
  273 | #define writel writel
drivers/mmc/host/sdhci-cadence.c:293:9: note: in expansion of macro 'writel'
  293 |         writel(hrs37_mode, hrs37_reg);
      |         ^~~~~~
drivers/mmc/host/sdhci-cadence.c:291:13: note: 'hrs37_mode' was declared here
  291 |         u32 hrs37_mode;
      |             ^~~~~~~~~~

It would be nice if GCC could adopt clang's semantics of "uninitialized
when used _here_" for -Wuninitalized versus the current scheme of
converting it to a "may be used uninitialized" warning.

Cheers,
Nathan

  reply	other threads:[~2025-08-20 16:20 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-08-19 17:28 [PATCH] mmc: sdhci-cadence: Fix -Wuninitialized in sdhci_cdns_tune_blkgap() Nathan Chancellor
2025-08-20  8:07 ` Benoît Monin
2025-08-20 10:43   ` Dan Carpenter
2025-08-20 16:20     ` Nathan Chancellor [this message]
2025-08-20 16:43 ` Ulf Hansson

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=20250820162048.GC3805667@ax162 \
    --to=nathan@kernel.org \
    --cc=adrian.hunter@intel.com \
    --cc=benoit.monin@bootlin.com \
    --cc=dan.carpenter@linaro.org \
    --cc=linux-mmc@vger.kernel.org \
    --cc=llvm@lists.linux.dev \
    --cc=patches@lists.linux.dev \
    --cc=ulf.hansson@linaro.org \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.