From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752370AbcFVB3c (ORCPT ); Tue, 21 Jun 2016 21:29:32 -0400 Received: from mailout2.samsung.com ([203.254.224.25]:48220 "EHLO mailout2.samsung.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751088AbcFVB2B (ORCPT ); Tue, 21 Jun 2016 21:28:01 -0400 X-AuditID: cbfee68e-f79266d000001428-10-5769e971dfcf Message-id: <5769E971.3040501@samsung.com> Date: Wed, 22 Jun 2016 10:27:13 +0900 From: Jaehoon Chung User-Agent: Mozilla/5.0 (X11; Linux i686; rv:31.0) Gecko/20100101 Thunderbird/31.6.0 MIME-version: 1.0 To: Seung-Woo Kim , ulf.hansson@linaro.org, linux-mmc@vger.kernel.org, linux-kernel@vger.kernel.org Subject: Re: [PATCH v3] mmc: dw_mmc: remove UBSAN warning in dw_mci_setup_bus() References: <1466140609-5773-1-git-send-email-sw0312.kim@samsung.com> <1466395785-3715-1-git-send-email-sw0312.kim@samsung.com> In-reply-to: <1466395785-3715-1-git-send-email-sw0312.kim@samsung.com> Content-type: text/plain; charset=windows-1252 Content-transfer-encoding: 7bit X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFvrLLMWRmVeSWpSXmKPExsWyRsSkULfwZWa4weKt4haXd81hszjyv5/R Ysbkl2wWx9eGO7B43Lm2h82jb8sqRo/Pm+QCmKO4bFJSczLLUov07RK4MubsP8RW8Fe24suy b4wNjD0SXYycHBICJhKr+1azQdhiEhfurQeyuTiEBFYwSpyZcpsJpujwudXMEImljBJ7l95k gXAeMEr8uv0CrIpXQEvixl6IUSwCqhL7D05hBrHZBHQktn87DlYjKhAm8WDdXlaIekGJH5Pv sYDYIgK1Em9OLAWLCwv4S/w8MwNq21VGiYXLusESnAJuEt8OfgUaxMHBLKAncf+iFkiYWUBe YvOat2D1EgKL2CXWHzvDDHGEgMS3yYdYQOolBGQlNh1ghvhGUuLgihssExhFZyE5YxbC1FlI pi5gZF7FKJpakFxQnJReZKRXnJhbXJqXrpecn7uJERgrp/8969vBePOA9SFGAQ5GJR5ejbWZ 4UKsiWXFlbmHGE2BjpjILCWanA+MyLySeENjMyMLUxNTYyNzSzMlcd4EqZ/BQgLpiSWp2amp BalF8UWlOanFhxiZODilGhhXdbuauKQ+rWC1cqn5MqW98XDluWlSEpeYXF8bP7ow/9Z76/8+ wu1W078WnlRXWcilKfR2vagm60w5s98N17+99Sq3feDkcnPj7XkrDsyY+F0wR19QMTJv4rt7 aTMfPjomXHDA7bPomoo1br5WPxjtDthOfPck9L7HiSezTHOcGO6EBlz8qXBCiaU4I9FQi7mo OBEAd1rxLJACAAA= X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFjrFIsWRmVeSWpSXmKPExsVy+t9jAd3Cl5nhBo9nCllc3jWHzeLI/35G ixmTX7JZHF8b7sDicefaHjaPvi2rGD0+b5ILYI5qYLTJSE1MSS1SSM1Lzk/JzEu3VfIOjneO NzUzMNQ1tLQwV1LIS8xNtVVy8QnQdcvMAdqmpFCWmFMKFApILC5W0rfDNCE0xE3XAqYxQtc3 JAiux8gADSSsYcyYs/8QW8Ff2Yovy74xNjD2SHQxcnJICJhIHD63mhnCFpO4cG89WxcjF4eQ wFJGib1Lb7JAOA8YJX7dfsEEUsUroCVxY+9qNhCbRUBVYv/BKWDdbAI6Etu/HQerERUIk3iw bi8rRL2gxI/J91hAbBGBWok3J5aCxYUF/CV+npnBDLHgKqPEwmXdYAlOATeJbwe/Ag3i4GAW 0JO4f1ELJMwsIC+xec1b5gmM/LOQjJ2FUDULSdUCRuZVjBKpBckFxUnpuYZ5qeV6xYm5xaV5 6XrJ+bmbGMHx+ExqB+PBXe6HGAU4GJV4eCN6MsOFWBPLiitzDzFKcDArifB2PgEK8aYkVlal FuXHF5XmpBYfYjQF+nsis5Rocj4wVeSVxBsam5gZWRqZG1oYGZsrifM+/r8uTEggPbEkNTs1 tSC1CKaPiYNTqoGxbUdccrK25bYE3W0SU61XJkwM/rLq0cyjU+rfzH5ZP/3O83lNPLL7tgU/ 4GeVu1SSubjG87RIsoxDi4ISk2C9R+L6TeFrptxt03S7pX+reJbCjshTh5j0H+afdCp8tzvY bdKFSOaYV3H6++X2+iaFTlf2N/vnxrdqzZ1TBn9OOuyvWpZ6rMBNiaU4I9FQi7moOBEArjAK id0CAAA= DLP-Filter: Pass X-MTR: 20000000000000000@CPGS X-CFilter-Loop: Reflected Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi Seung-Woo, On 06/20/2016 01:09 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: > [] dump_backtrace+0x0/0x380 > [] show_stack+0x14/0x20 > [] dump_stack+0xe0/0x120 > [] ubsan_epilogue+0x18/0x68 > [] __ubsan_handle_shift_out_of_bounds+0x18c/0x1bc > [] 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: > [] dump_backtrace+0x0/0x380 > [] show_stack+0x14/0x20 > [] dump_stack+0xe0/0x120 > [] ubsan_epilogue+0x18/0x68 > [] __ubsan_handle_shift_out_of_bounds+0x18c/0x1bc > [] dw_mci_setup_bus+0x384/0x438 > [...] > > The warnings are caused because of bit shift which is used to > filter spamming message for CONFIG_MMC_CLKGATE, but the config is > already removed. So this patch just removes the shift. > > Signed-off-by: Seung-Woo Kim Applied this patch on my repository. Thanks! Best Regards, Jaehoon Chung > --- > drivers/mmc/host/dw_mmc.c | 14 +++++--------- > drivers/mmc/host/dw_mmc.h | 4 ---- > 2 files changed, 5 insertions(+), 13 deletions(-) > > diff --git a/drivers/mmc/host/dw_mmc.c b/drivers/mmc/host/dw_mmc.c > index 2cc6123..bada11e 100644 > --- a/drivers/mmc/host/dw_mmc.c > +++ b/drivers/mmc/host/dw_mmc.c > @@ -1099,12 +1099,11 @@ 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) > - 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, > - div ? ((host->bus_hz / div) >> 1) : > - host->bus_hz, div); > + 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, > + div ? ((host->bus_hz / div) >> 1) : > + host->bus_hz, div); > > /* disable clock */ > mci_writel(host, CLKENA, 0); > @@ -1127,9 +1126,6 @@ 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; > } > > host->current_speed = clock; > diff --git a/drivers/mmc/host/dw_mmc.h b/drivers/mmc/host/dw_mmc.h > index 1e8d838..5961037 100644 > --- a/drivers/mmc/host/dw_mmc.h > +++ b/drivers/mmc/host/dw_mmc.h > @@ -245,9 +245,6 @@ 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. > * @flags: Random state bits associated with the slot. > * @id: Number of this slot. > * @sdio_id: Number of this slot in the SDIO interrupt registers. > @@ -262,7 +259,6 @@ struct dw_mci_slot { > struct list_head queue_node; > > unsigned int clock; > - unsigned int __clk_old; > > unsigned long flags; > #define DW_MMC_CARD_PRESENT 0 >