Received: by 2002:a05:6a10:17d3:0:0:0:0 with SMTP id hz19csp2125963pxb; Mon, 12 Apr 2021 15:19:33 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzyOAm/ZayfEgVxDeV/vviiswRnR47kkWLdezShHM88OcBBsyObzu/voPuRUnwSHHYMdBQY X-Received: by 2002:a17:907:1b20:: with SMTP id mp32mr29258734ejc.495.1618265972922; Mon, 12 Apr 2021 15:19:32 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1618265972; cv=none; d=google.com; s=arc-20160816; b=zYd4u6eEvcjyV+5DtpiMdNKB0y2YtAnrKT+D35AsKZjX/AIt55/3jyYpPS0bYowAG2 OE3RR0vMVfGrMHuXTviahCaiMMsyuinJGtq69CruIa2An7vxLVH14rHw7mUBtDhKIy5N 0ssbSxJ07SAkBxD4etrXE/5Xj/EPPVA88bZv+/a6scDz9DbHva1ih5gPhduaiAwKk+GW pa+0AxXd0PUI+kNRKjNHtDEqBkXeB30VhAK5tU83CGZXVSe34GvV0fJ5UaF3QpMgeKgJ /5V9H+68kEShI9eysMcyccJAq2ruErtjniblx9JKajhGCKQagRMvCkRb5yWKTH8MfgwU Ykuw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:subject:message-id:date:from:in-reply-to :references:mime-version; bh=w0nzjzfCk4z/DdLip364m435OvUY4gxFoWEexjtunJU=; b=LVU2m7tcJtWYw66oNcL/zQAEYr5nNwt3G7D74FXwNa4qrGrSRyBFXtbA0x/p/oqvHc pIYO901WN7gdmyFRW1wln8px0udEMSQyCt3qflrv3g41rvGZPc+juvBGtRDQaFOggfoQ Z4PwSMJW8934CD89BsI3gNlKdlQIMY2VHARim2OX8pKuSe30pdLB0NmqoZlVNiRxUG7K ctV024za03pzyt+pr81HXD70UHhDQsLcWV4pnqf+f9EDVtcc6sMa0X2fo/7j0iPDUBS2 QepD2ILOKSQ3U83htLn6TnqQbrAE61cYr9ORfaasYOrYpCVPb5vAtwRCP5iHaTRQTljq lkQw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id e18si8999902edj.485.2021.04.12.15.19.08; Mon, 12 Apr 2021 15:19:32 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S242046AbhDLJ1O (ORCPT + 99 others); Mon, 12 Apr 2021 05:27:14 -0400 Received: from mail-vs1-f43.google.com ([209.85.217.43]:37589 "EHLO mail-vs1-f43.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S239393AbhDLJCr (ORCPT ); Mon, 12 Apr 2021 05:02:47 -0400 Received: by mail-vs1-f43.google.com with SMTP id 2so6264518vsh.4; Mon, 12 Apr 2021 02:02:29 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=w0nzjzfCk4z/DdLip364m435OvUY4gxFoWEexjtunJU=; b=sJb4HvFHls/K0miarzNokuya7Jg6kF3OhflM9ibdCnsPNh2q4zCp8UeKXIX/vDdceA Drw7Oa0ynTF85R2nfk+lMS+zb8GlvazZs/NQg9g4pUbPVNsAH4wk2Qc7ArpooiE+stxR pjUgyJxphJkyzCtCVNnb2TphFh4sZgcVEreWXqbvHEJw7Ay4y3XcRcMyN9JW80ScwnAo hQiU566czmZjPoGoZpyViKV1bS94YZ6GfPN2AHcILFbGPLSmQAtX+zsWvh/xmhl81blc ybWPpwY/2eilfIQcWJysdFKnmI6h1iQ3kI5AnbqoD/mRdqz0sVHNjALK/Nueq+hF0qyq +aSw== X-Gm-Message-State: AOAM530LleXCVfjV4YldwMWpJC9WmCMXTiEijUki1g4T3hj7qHl6QbVH 7T5LNbkVQGYr1vNMJl6BVM+dKuUPXKp6UfgdRRw= X-Received: by 2002:a67:f5ca:: with SMTP id t10mr18301625vso.40.1618218149193; Mon, 12 Apr 2021 02:02:29 -0700 (PDT) MIME-Version: 1.0 References: <20210412075053.28727-1-dinghao.liu@zju.edu.cn> In-Reply-To: <20210412075053.28727-1-dinghao.liu@zju.edu.cn> From: Geert Uytterhoeven Date: Mon, 12 Apr 2021 11:02:17 +0200 Message-ID: Subject: Re: [PATCH] clk: renesas: rcar-usb2-clock-sel: Fix error handling in rcar_usb2_clock_sel_probe To: Dinghao Liu Cc: Kangjie Lu , Michael Turquette , Stephen Boyd , Linux-Renesas , linux-clk , Linux Kernel Mailing List Content-Type: text/plain; charset="UTF-8" Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi Dinghao, On Mon, Apr 12, 2021 at 9:51 AM Dinghao Liu wrote: > When clk_get_rate() fails, a pairing PM usage counter decrement > and disable is required to prevent refcount leak. It's the same > for the subsequent error paths. When of_clk_add_hw_provider() > fails, we need to unregister clk_hw. > > Signed-off-by: Dinghao Liu Thanks for your patch, which looks correct to me. > --- a/drivers/clk/renesas/rcar-usb2-clock-sel.c > +++ b/drivers/clk/renesas/rcar-usb2-clock-sel.c > @@ -180,7 +180,8 @@ static int rcar_usb2_clock_sel_probe(struct platform_device *pdev) > > if (!priv->extal && !priv->xtal) { > dev_err(dev, "This driver needs usb_extal or usb_xtal\n"); > - return -ENOENT; > + ret = -ENOENT; > + goto pm_put; > } As the code above doesn't rely on the device being powered yet, you could move the pm_runtime_{enable,get_sync}() calls below the clock checks instead. > > platform_set_drvdata(pdev, priv); > @@ -194,10 +195,23 @@ static int rcar_usb2_clock_sel_probe(struct platform_device *pdev) > priv->hw.init = &init; > > clk = clk_register(NULL, &priv->hw); > - if (IS_ERR(clk)) > - return PTR_ERR(clk); > + if (IS_ERR(clk)) { > + ret = PTR_ERR(clk); > + goto pm_put; > + } > + > + ret = of_clk_add_hw_provider(np, of_clk_hw_simple_get, &priv->hw); > + if (ret) > + goto clk_unregister; > + > + return 0; > > - return of_clk_add_hw_provider(np, of_clk_hw_simple_get, &priv->hw); > +clk_unregister: > + clk_hw_unregister(&priv->hw); The error path can be simplified by replacing the call to clk_register() by a call to devm_clk_register(), to match the style of the other initialization steps. > +pm_put: > + pm_runtime_put(dev); > + pm_runtime_disable(dev); > + return ret; This part has to stay, of course. > } Gr{oetje,eeting}s, Geert -- Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org In personal conversations with technical people, I call myself a hacker. But when I'm talking to journalists I just say "programmer" or something like that. -- Linus Torvalds