All of lore.kernel.org
 help / color / mirror / Atom feed
From: Seung-Woo Kim <sw0312.kim@samsung.com>
To: 'Jaehoon Chung' <jh80.chung@samsung.com>,
	ulf.hansson@linaro.org, linux-mmc@vger.kernel.org,
	linux-kernel@vger.kernel.org
Cc: sw0312.kim@samsung.com
Subject: RE: [PATCH v2] mmc: dw_mmc: remove UBSAN warning in dw_mci_setup_bus()
Date: Mon, 20 Jun 2016 12:30:26 +0900	[thread overview]
Message-ID: <000401d1caa4$16809d70$4381d850$@samsung.com> (raw)
In-Reply-To: <57675635.20808@samsung.com>

Hello Jaehoon,

> -----Original Message-----
> From: Jaehoon Chung [mailto:jh80.chung@samsung.com]
> Sent: Monday, June 20, 2016 11:34 AM
> To: Seung-Woo Kim; ulf.hansson@linaro.org; linux-mmc@vger.kernel.org; linux-kernel@vger.kernel.org
> Subject: Re: [PATCH v2] mmc: dw_mmc: remove UBSAN warning in dw_mci_setup_bus()
> 
> Hi SeungWoo,
> 
> On 06/17/2016 02:16 PM, Seung-Woo Kim wrote:
> > This patch removes following UBSAN warnings in dw_mci_setup_bus().
> >
> >   UBSAN: Undefined behaviour in drivers/mmc/host/dw_mmc.c:1102:14
> >   shift exponent 250 is too large for 32-bit type 'unsigned int'
> >   Call trace:
> >   [<ffffff90080908a8>] dump_backtrace+0x0/0x380
> >   [<ffffff9008090c3c>] show_stack+0x14/0x20
> >   [<ffffff90087457b8>] dump_stack+0xe0/0x120
> >   [<ffffff90087b1360>] ubsan_epilogue+0x18/0x68
> >   [<ffffff90087b1a94>] __ubsan_handle_shift_out_of_bounds+0x18c/0x1bc
> >   [<ffffff9008d89cb8>] dw_mci_setup_bus+0x3a0/0x438
> >   [...]
> >
> >   UBSAN: Undefined behaviour in drivers/mmc/host/dw_mmc.c:1132:27
> >   shift exponent 250 is too large for 32-bit type 'unsigned int'
> >   Call trace:
> >   [<ffffff90080908a8>] dump_backtrace+0x0/0x380
> >   [<ffffff9008090c3c>] show_stack+0x14/0x20
> >   [<ffffff90087457b8>] dump_stack+0xe0/0x120
> >   [<ffffff90087b1360>] ubsan_epilogue+0x18/0x68
> >   [<ffffff90087b1a94>] __ubsan_handle_shift_out_of_bounds+0x18c/0x1bc
> >   [<ffffff9008d89c9c>] dw_mci_setup_bus+0x384/0x438
> >   [...]
> >
> > The warnings are caused because of shift with more than 31 on 32
> > bit variable, so this patch fixes to keep both clock and divider
> > instead of shift.
> >
> > Signed-off-by: Seung-Woo Kim <sw0312.kim@samsung.com>
> > ---
> >  drivers/mmc/host/dw_mmc.c |    8 +++++---
> >  drivers/mmc/host/dw_mmc.h |    8 +++++---
> >  2 files changed, 10 insertions(+), 6 deletions(-)
> >
> > diff --git a/drivers/mmc/host/dw_mmc.c b/drivers/mmc/host/dw_mmc.c
> > index 2cc6123..d05c8cc 100644
> > --- a/drivers/mmc/host/dw_mmc.c
> > +++ b/drivers/mmc/host/dw_mmc.c
> > @@ -1099,7 +1099,8 @@ static void dw_mci_setup_bus(struct dw_mci_slot *slot, bool force_clkinit)
> >
> >  		div = (host->bus_hz != clock) ? DIV_ROUND_UP(div, 2) : 0;
> >
> > -		if ((clock << div) != slot->__clk_old || force_clkinit)
> > +		if (clock != slot->__clk_old || div != slot->__div_old ||
> > +		    force_clkinit)
> 
> I have realized why we put this condition..after checking your below codes.
> This was patch to avoid the spamming for CONFIG_MMC_CLKGATE..
> but CONFIG_MMC_CLKAGET didn't use anymore.. I think we can remove this condition.
> 
> How about?

There is no CONFIG_MMC_CLKAGET, but message is still printed. So without
the condition check, there will be too much log. If you will just remove
below print, then I agree about removing the condition and __clk_old, instead
of my patch.

Thanks,
- Seung-Woo Kim

> 
> Best Regards,
> Jaehoon Chung
> 
> >  			dev_info(&slot->mmc->class_dev,
> >  				 "Bus speed (slot %d) = %dHz (slot req %dHz, actual %dHZ div = %d)\n",
> >  				 slot->id, host->bus_hz, clock,
> > @@ -1128,8 +1129,9 @@ static void dw_mci_setup_bus(struct dw_mci_slot *slot, bool force_clkinit)
> >  		/* inform CIU */
> >  		mci_send_cmd(slot, sdmmc_cmd_bits, 0);
> >
> > -		/* keep the clock with reflecting clock dividor */
> > -		slot->__clk_old = clock << div;
> > +		/* keep the clock and clock divider */
> > +		slot->__clk_old = clock;
> > +		slot->__div_old = div;
> >  	}
> >
> >  	host->current_speed = clock;
> > diff --git a/drivers/mmc/host/dw_mmc.h b/drivers/mmc/host/dw_mmc.h
> > index 1e8d838..fdfc3f5 100644
> > --- a/drivers/mmc/host/dw_mmc.h
> > +++ b/drivers/mmc/host/dw_mmc.h
> > @@ -245,9 +245,10 @@ extern int dw_mci_resume(struct dw_mci *host);
> >   * @queue_node: List node for placing this node in the @queue list of
> >   *	&struct dw_mci.
> >   * @clock: Clock rate configured by set_ios(). Protected by host->lock.
> > - * @__clk_old: The last updated clock with reflecting clock divider.
> > - *	Keeping track of this helps us to avoid spamming the console
> > - *	with CONFIG_MMC_CLKGATE.
> > + * @__clk_old: The last updated clock.
> > + * @__div_old: The last updated clock divider.
> > + *	Keeping track of clock and clock divider helps us to avoid spamming
> > + *	the console with CONFIG_MMC_CLKGATE.
> >   * @flags: Random state bits associated with the slot.
> >   * @id: Number of this slot.
> >   * @sdio_id: Number of this slot in the SDIO interrupt registers.
> > @@ -263,6 +264,7 @@ struct dw_mci_slot {
> >
> >  	unsigned int		clock;
> >  	unsigned int		__clk_old;
> > +	unsigned int		__div_old;
> >
> >  	unsigned long		flags;
> >  #define DW_MMC_CARD_PRESENT	0
> >



  reply	other threads:[~2016-06-20  3:30 UTC|newest]

Thread overview: 13+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <CGME20160608040654epcas1p2be228e3e02e35a640cb1e65228df79ad@epcas1p2.samsung.com>
2016-06-08  4:07 ` [PATCH] mmc: dw_mmc: remove UBSAN warning in dw_mci_setup_bus() Seung-Woo Kim
2016-06-09 12:38   ` Jaehoon Chung
2016-06-10  1:29     ` Seung-Woo Kim
2016-06-10  1:29       ` Seung-Woo Kim
2016-06-17  1:30       ` Jaehoon Chung
2016-06-17  4:07         ` Seung-Woo Kim
2016-06-17  4:07           ` Seung-Woo Kim
2016-06-17  5:16   ` [PATCH v2] " Seung-Woo Kim
2016-06-20  2:34     ` Jaehoon Chung
2016-06-20  3:30       ` Seung-Woo Kim [this message]
2016-06-20  3:45         ` Seung-Woo Kim
2016-06-20  4:09     ` [PATCH v3] " Seung-Woo Kim
2016-06-22  1:27       ` Jaehoon Chung

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='000401d1caa4$16809d70$4381d850$@samsung.com' \
    --to=sw0312.kim@samsung.com \
    --cc=jh80.chung@samsung.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mmc@vger.kernel.org \
    --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.