Received: by 2002:ac0:a5b6:0:0:0:0:0 with SMTP id m51-v6csp913548imm; Thu, 31 May 2018 11:37:34 -0700 (PDT) X-Google-Smtp-Source: ADUXVKJrdFHWPd+9M5U838k2od8Q2Criey2KwigFUnR9o7TgEhx0A2R9DcrIjL4WeQ49D2YN2Y9g X-Received: by 2002:a17:902:1aa:: with SMTP id b39-v6mr8057578plb.120.1527791854296; Thu, 31 May 2018 11:37:34 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1527791854; cv=none; d=google.com; s=arc-20160816; b=win2LP6CR+A0fSgIv94NacadCTODPENuyPIpjlSiDMhf0oA7RgX518C+QSpJ70s1r0 oVNuP4AW66sIYtI2ZVtsJRI9loc9OrCz3YE88Jb1urKzoWRBaBJs3+fghYnRoutj1XRT 85AEL9PjCDapxp8rs34rOgvTOG8PhxzA3yUzFN6FnwIZqU6m+cGvp3+ZFERAneLJTts0 ZQsHuo4iFC4FsjtU/wspb+PizBsWryKV3fYZfhq2Xz7d1a+BbDWMSUd7PB/MwLPWRZmd YWczXavYsbG4d7arlaORFtITjwj+8LVR4hZPBG1e5T+/YJurVfeYtneMaUx4tWNOmxon PXKQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding :content-language:in-reply-to:mime-version:user-agent:date :message-id:from:references:cc:to:subject:dkim-signature :arc-authentication-results; bh=PlICEzBfX/0BdA+zxgRgxb/NM1P/SfC1XlkUpSCraYY=; b=Mlm0bpEDJdhl5vfrsm0A1DGz71gdW9b6vjPylvq/bcAbHZ2zTKmzVRfN/it8iYWGqi C9iwUXgshNsnEgz9xqxwxA6KlyyVTUIumZ2Ma7cIHK9IJLXU+mnxjSexSOAz9aKhfprw 0w7z1Irs3JmWPLSHRXtPq8SYtyi/9e4PD6SYpsXUtcSO2VOhH4YFAoob0rELTHR8VK2L Yn2LCXUf7apZRQXosLkg+CHgTS0U4opbyEHj/v1pRwTQ0zxrsQPP5MJ16WG1MpS6Xdhf VLBsrwMXLMDOrzWrasom4avpV/UXIngPDczabXNmKHlHULG7I+hNn+FCGf38PsG3ANji BSsA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=UGf55d1M; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id n22-v6si38104485pfb.126.2018.05.31.11.37.19; Thu, 31 May 2018 11:37:34 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=UGf55d1M; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755985AbeEaSfN (ORCPT + 99 others); Thu, 31 May 2018 14:35:13 -0400 Received: from mail-wr0-f194.google.com ([209.85.128.194]:44497 "EHLO mail-wr0-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755877AbeEaSfL (ORCPT ); Thu, 31 May 2018 14:35:11 -0400 Received: by mail-wr0-f194.google.com with SMTP id y15-v6so33932675wrg.11; Thu, 31 May 2018 11:35:10 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=subject:to:cc:references:from:message-id:date:user-agent :mime-version:in-reply-to:content-language:content-transfer-encoding; bh=PlICEzBfX/0BdA+zxgRgxb/NM1P/SfC1XlkUpSCraYY=; b=UGf55d1MHAn3RswzpCFzbrIACHDg82ymOa26zbgVferTnetPTh6cZvV9viDB92HH57 IJS25G0s+SXZk+4kZ0EgEC1B+nUwpZcJLspUm08fcmwl5ahpSiw9otkV/RitrEhLzO8+ BctwHskgsrYG4nD95z7tA0xDVFUzsoDrRNXnHyvCgeDeybdCVBQ2bhHkFJ+Ux293mM4E R6jBQQChhBcD0kf2RZ7DiHsf7LvD8Kk183gqHLX2Qywy4mx1SPK5LG25hzlV1Imypiup 6Ob32CXkX+wnh6rizsxlAkzCIaUYcGXeETurhKizB5eZQgliTDKiOvfOlLkm+nGCTPOh A9pA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:to:cc:references:from:message-id:date :user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=PlICEzBfX/0BdA+zxgRgxb/NM1P/SfC1XlkUpSCraYY=; b=Hvy4XJtr+u1Zs16cPjAg0HG4zPLViZ/x7bCrTow7+zzeo5gHzz3M+LRcr4kQ0XCA0O nh0gd4w+fRLTNedMsQVk3PA/aGFxcTwYhDxHYl9zwd9RFhCjQG2avQOmk8gu8RoOGinY BdsGMYeFnLuJzOZPkEMQhN4Pnj/LCqRScf+Nb7CPDxAcnIhXxmXe8wkUeblHynLI7NNe LX3QLmsDLsqqZGSZdN+hwrHQ7p5UitHIE1qfJB4E1pD0XLWjBHj7f+kPvcewtimuOwDu hKk28PfR6IQm/UeV9R34BNntNZ9cjPXob+JJT5p4cl9VUr3t6fj33ZJsonOIDYexw+Gm TARw== X-Gm-Message-State: ALKqPwfBWg+nj7/EQxCHITrh/o4n0aR8WgkLnTumXEdqTwDrsypHuugN lM6EcYudSz9eligBuCNpNFA= X-Received: by 2002:adf:8756:: with SMTP id 22-v6mr5811794wrz.117.1527791709632; Thu, 31 May 2018 11:35:09 -0700 (PDT) Received: from [192.168.1.4] (ip-86-49-107-50.net.upcbroadband.cz. [86.49.107.50]) by smtp.gmail.com with ESMTPSA id u108-v6sm35171217wrc.40.2018.05.31.11.35.08 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 31 May 2018 11:35:08 -0700 (PDT) Subject: Re: [PATCH] clk: vc5: Fix div-by-0 when rounding a rate of zero To: Steve Longerbeam , Michael Turquette , Stephen Boyd Cc: linux-clk@vger.kernel.org, linux-kernel@vger.kernel.org, Steve Longerbeam , Laurent Pinchart , Kieran Bingham References: <1527791036-11251-1-git-send-email-steve_longerbeam@mentor.com> <1084deae-ca55-aba1-ec08-7e1d976de7b7@gmail.com> From: Marek Vasut Message-ID: Date: Thu, 31 May 2018 20:35:07 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.8.0 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 05/31/2018 08:32 PM, Steve Longerbeam wrote: > Hi Marek, > > > On 05/31/2018 11:25 AM, Marek Vasut wrote: >> On 05/31/2018 08:23 PM, Steve Longerbeam wrote: >>> Just return zero for a rounded rate if requested rate is zero. >>> >>> This was caught by CONFIG_UBSAN: >>> >>> [  192.266748] UBSAN: Undefined behaviour in >>> drivers/clk/clk-versaclock5.c:513:17 >>> [  192.274050] division by zero >>> [  192.276976] CPU: 0 PID: 2579 Comm: vsp-unit-test-0 Tainted: G    >>> B   WC      4.14.17-02752-g13fb96f #1 >>> [  192.286378] Hardware name: Renesas Salvator-X board based on >>> r8a7795 ES2.0+ (DT) >>> [  192.293852] Call trace: >>> [  192.296343] [] dump_backtrace+0x0/0x390 >>> [  192.301807] [] show_stack+0x14/0x1c >>> [  192.306920] [] dump_stack+0x134/0x1a8 >>> [  192.312213] [] ubsan_epilogue+0x14/0x60 >>> [  192.317677] [] >>> __ubsan_handle_divrem_overflow+0x11c/0x170 >>> [  192.324720] [] vc5_fod_round_rate+0x68/0x148 >>> [  192.330620] [] clk_calc_new_rates+0x238/0x3fc >>> [  192.336607] [] clk_calc_new_rates+0x29c/0x3fc >>> [  192.342595] [] clk_core_set_rate_nolock+0x48/0x11c >>> [  192.349019] [] clk_set_rate+0x34/0x4c >>> [  192.354307] [] rcar_du_pm_suspend+0x274/0x2f4 >>> [  192.360297] [] platform_pm_suspend+0x78/0xb8 >>> [  192.366198] [] dpm_run_callback+0x584/0xa18 >>> [  192.372010] [] __device_suspend+0x1a8/0x534 >>> [  192.377822] [] dpm_suspend+0x130/0xea0 >>> [  192.383197] [] dpm_suspend_start+0x130/0x138 >>> [  192.389099] [] >>> suspend_devices_and_enter+0xf0/0x1778 >>> [  192.395700] [] pm_suspend+0x2408/0x245c >>> [  192.401162] [] state_store+0xf0/0x130 >>> [  192.406451] [] kobj_attr_store+0x5c/0x6c >>> [  192.412002] [] sysfs_kf_write+0xe8/0xfc >>> [  192.417466] [] kernfs_fop_write+0x22c/0x2e4 >>> [  192.423281] [] __vfs_write+0x104/0x34c >>> [  192.428656] [] vfs_write+0x134/0x2d8 >>> [  192.433857] [] SyS_write+0xbc/0x12c >>> [  192.438967] Exception stack(0xffff8006cd1cfec0 to 0xffff8006cd1d0000) >>> [  192.445480] fec0: 0000000000000001 000000001e303f00 >>> 0000000000000004 0000ffff959a5000 >>> [  192.453397] fee0: 0000000000000000 0000000155510004 >>> 0000000000000003 000000000000006d >>> [  192.461314] ff00: 0000000000000040 0000000000000000 >>> 0000ffffcc304800 0000000000000020 >>> [  192.469230] ff20: 0000000000000000 0000000000000000 >>> 0000000000000001 0000000000000008 >>> [  192.477148] ff40: 00000000004eb3b8 0000ffff958bb840 >>> 000000000000003d 0000000000000001 >>> [  192.485065] ff60: 000000001e303f00 0000ffff959a1508 >>> 0000000000000004 000000001e303f00 >>> [  192.492982] ff80: 0000000000000004 00000000004d4c68 >>> 0000000000000001 0000000000000000 >>> [  192.500899] ffa0: 000000001e30d5c0 0000ffffcc304820 >>> 0000ffff958bec64 0000ffffcc304820 >>> [  192.508816] ffc0: 0000ffff95912898 0000000020000000 >>> 0000000000000001 0000000000000040 >>> [  192.516733] ffe0: 0000000000000000 0000000000000000 >>> 0000000000000000 0000000000000000 >>> [  192.524650] [] el0_svc_naked+0x24/0x28 >>> >>> Signed-off-by: Steve Longerbeam >>> --- >>>   drivers/clk/clk-versaclock5.c | 4 ++++ >>>   1 file changed, 4 insertions(+) >>> >>> diff --git a/drivers/clk/clk-versaclock5.c >>> b/drivers/clk/clk-versaclock5.c >>> index decffb3..113523d 100644 >>> --- a/drivers/clk/clk-versaclock5.c >>> +++ b/drivers/clk/clk-versaclock5.c >>> @@ -509,6 +509,10 @@ static long vc5_fod_round_rate(struct clk_hw >>> *hw, unsigned long rate, >>>       u32 div_int; >>>       u64 div_frc; >>>   +    /* prevent div-by-0 */ >>> +    if (rate == 0) >>> +        return 0; >>> + >>>       /* Determine integer part, which is 12 bit wide */ >>>       div_int = f_in / rate; >>>       /* >>> >> Can this actually happen ? > > We caught this using the Renesas 3.6.0 BSP release, when performing > a suspend of rcar-du driver. The rcar_du_pm_suspend() in 3.6.0 BSP is > modified > from mainline version, including calling clk_set_rate() on the crtc > clocks with a > rate of zero. So this is not actually reproducible (yet) in mainline. So it sets clock to 0 ? Anyway, this looks sane, although maybe the whole driver could use a once-over to see if there could be more of this. Or should the clock framework even let us set clock to 0 Hz ? -- Best regards, Marek Vasut