From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755457AbcHCB6e (ORCPT ); Tue, 2 Aug 2016 21:58:34 -0400 Received: from mailout3.samsung.com ([203.254.224.33]:41432 "EHLO mailout3.samsung.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750954AbcHCB6Y (ORCPT ); Tue, 2 Aug 2016 21:58:24 -0400 X-AuditID: cbfee68e-f79cb6d000006cfe-6a-57a14fbe21d9 Message-id: <57A14FD0.9030905@samsung.com> Date: Wed, 03 Aug 2016 10:58:40 +0900 From: Joonyoung Shim 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 , linux-samsung-soc@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, k.kozlowski@samsung.com, thierry.reding@gmail.com, linux-pwm@vger.kernel.org, Joonyoung Shim Subject: Re: [PATCH] pwm: samsung: fix to use lowest div for large enough modulation bits References: <1470133006-4272-1-git-send-email-sw0312.kim@samsung.com> In-reply-to: <1470133006-4272-1-git-send-email-sw0312.kim@samsung.com> Content-type: text/plain; charset=windows-1252 Content-transfer-encoding: 7bit X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFprEIsWRmVeSWpSXmKPExsWyRsSkQHef/8Jwgzt9YhYv7l1ksXj9wtBi 0+NrrBaXd81hs7h7dxWjxYzz+5gsZkx+yWbxc9c8FgcOj52z7rJ7bF5S79G3ZRWjx+dNcgEs UVw2Kak5mWWpRfp2CVwZzWtuMRW0C1YcvOrcwPiDt4uRk0NCwESib34fC4QtJnHh3nq2LkYu DiGBFYwSq09eZoYpOvd0NRNEYhajxNNJe5lAEkIC9xklrswq6WLk4OAV0JK4NN8VJMwioCqx YucDsKFsAnoSd7YdBysXFQiTeLBuLyuIzSsgKPFj8j2wGhGBfiaJpxsKQWxhgWiJK7/mQx0x m1Hief8EsCM4BdwkHq34zwqyixlo6P2LWiBhZgF5ic1r3jKD1EsIHGOXuLFxJTvEEQIS3yYf YgGplxCQldh0AOoXSYmDK26wTGAUnYXkjFkIU2chmbqAkXkVo2hqQXJBcVJ6kZFecWJucWle ul5yfu4mRmBUnf73rG8H480D1ocYBTgYlXh4Lc4vCBdiTSwrrsw9xGgKdMREZinR5Hxg7OaV xBsamxlZmJqYGhuZW5opifMmSP0MFhJITyxJzU5NLUgtii8qzUktPsTIxMEp1cDosnqniKbV vhc1qz5zlS7+MU9HIvGE26zsln0n32uxBE3+LauybM+hPZ3asl5vlK4134/3KFBaoPO5Iuvz T7XKTxFpjiv8teY18qV8fXNBy6RoX35k0KPglNrStmXz2V+eTEzR+fXNXF/zTvLNB0x7Hdbx hssmNB08xOqUL7Ot/Nr/C407N2xUYinOSDTUYi4qTgQA5Bk5WaUCAAA= X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFrrPIsWRmVeSWpSXmKPExsVy+t9jQd19/gvDDf7181u8uHeRxeL1C0OL TY+vsVpc3jWHzeLu3VWMFjPO72OymDH5JZvFz13zWBw4PHbOusvusXlJvUffllWMHp83yQWw RDUw2mSkJqakFimk5iXnp2TmpdsqeQfHO8ebmhkY6hpaWpgrKeQl5qbaKrn4BOi6ZeYAXaGk UJaYUwoUCkgsLlbSt8M0ITTETdcCpjFC1zckCK7HyAANJKxhzGhec4upoF2w4uBV5wbGH7xd jJwcEgImEueermaCsMUkLtxbz9bFyMUhJDCLUeLppL1gCSGB+4wSV2aVdDFycPAKaElcmu8K EmYRUJVYsfMBC4jNJqAncWfbcbByUYEwiQfr9rKC2LwCghI/Jt8DqxER6GeSeLqhEMQWFoiW uPJrPtSu2YwSz/snMIMkOAXcJB6t+M8KsosZaOj9i1ogYWYBeYnNa94yT2Dkn4Vk7CyEqllI qhYwMq9ilEgtSC4oTkrPNcpLLdcrTswtLs1L10vOz93ECI7cZ9I7GA/vcj/EKMDBqMTDW+C9 MFyINbGsuDL3EKMEB7OSCK+LH1CINyWxsiq1KD++qDQntfgQoynQ3xOZpUST84FJJa8k3tDY xMzI0sjc0MLI2FxJnPfx/3VhQgLpiSWp2ampBalFMH1MHJxSDYw7z78W8KheJaJYntd1jPmF e6iFVfCTa0f1UoU92D9mvGML3qKtcr3Vl+vg8QXlf28zPpV1WVV8vG7y5N8JzLbdet1ffDd3 2U76NG9D/5ZmqxnZrAFRz5jnV1qfqF6Xs7H+8IVw/hmVO3RW8qnwGt4+037oaUzxE1XrBZMn 7X40b8aOf1JF4o+VWIozEg21mIuKEwFcL9qC8gIAAA== 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, On 08/02/2016 07:16 PM, Seung-Woo Kim wrote: >>>From pwm_samsung_calc_tin(), there is routine to find the lowest > divider possible to generate lower frequency than requested one. > But it is always possible to generate requested frequency with > large enough modulation bits, so this patch fixes to use lowest > div for the case. This patch removes following UBSAN warning: > > UBSAN: Undefined behaviour in drivers/pwm/pwm-samsung.c:197:13 > shift exponent 32 is too large for 32-bit type 'long unsigned int' > [...] > [] (ubsan_epilogue) from [] (__ubsan_handle_shift_out_of_bounds+0xd8/0x120) > [] (__ubsan_handle_shift_out_of_bounds) from [] (pwm_samsung_config+0x508/0x6a4) > [] (pwm_samsung_config) from [] (pwm_apply_state+0x174/0x40c) > [] (pwm_apply_state) from [] (pwm_fan_probe+0xc8/0x488) > [] (pwm_fan_probe) from [] (platform_drv_probe+0x70/0x150) > [...] > > Signed-off-by: Seung-Woo Kim > --- > The UBSAN warning from ARM is reported with the patch in following link: > https://patchwork.kernel.org/patch/9189575/ > --- > drivers/pwm/pwm-samsung.c | 10 +++++++--- > 1 file changed, 7 insertions(+), 3 deletions(-) > > diff --git a/drivers/pwm/pwm-samsung.c b/drivers/pwm/pwm-samsung.c > index ada2d32..ff0def6 100644 > --- a/drivers/pwm/pwm-samsung.c > +++ b/drivers/pwm/pwm-samsung.c > @@ -193,9 +193,13 @@ static unsigned long pwm_samsung_calc_tin(struct samsung_pwm_chip *chip, > * divider settings and choose the lowest divisor that can generate > * frequencies lower than requested. > */ > - for (div = variant->div_base; div < 4; ++div) > - if ((rate >> (variant->bits + div)) < freq) > - break; > + if (fls(rate) <= variant->bits) { > + div = variant->div_base; It's reasonable to me not to check to decide div at above case. > + } else { > + for (div = variant->div_base; div < 4; ++div) > + if ((rate >> (variant->bits + div)) < freq) > + break; > + } > Reviewed-by: Joonyoung Shim Thanks.