From: Rajendra Nayak <rnayak@codeaurora.org> To: Viresh Kumar <viresh.kumar@linaro.org>, Rob Clark <robdclark@gmail.com>, Sean Paul <sean@poorly.run> Cc: linux-pm@vger.kernel.org, Vincent Guittot <vincent.guittot@linaro.org>, Rafael Wysocki <rjw@rjwysocki.net>, Stephen Boyd <sboyd@kernel.org>, Nishanth Menon <nm@ti.com>, Douglas Anderson <dianders@chromium.org>, Naresh Kamboju <naresh.kamboju@linaro.org>, linux-arm-msm@vger.kernel.org, dri-devel@lists.freedesktop.org, freedreno@lists.freedesktop.org, linux-kernel@vger.kernel.org Subject: Re: [PATCH V2 3/8] drm/msm: Unconditionally call dev_pm_opp_of_remove_table() Date: Tue, 1 Sep 2020 13:01:47 +0530 [thread overview] Message-ID: <bc64e031-c42f-9ed2-c597-18a790a4d3bb@codeaurora.org> (raw) In-Reply-To: <6e4110032f8711e8bb0acbeccfe66dec3b09d5c1.1598594714.git.viresh.kumar@linaro.org> On 8/28/2020 11:37 AM, Viresh Kumar wrote: > dev_pm_opp_of_remove_table() doesn't report any errors when it fails to > find the OPP table with error -ENODEV (i.e. OPP table not present for > the device). And we can call dev_pm_opp_of_remove_table() > unconditionally here. Its a little tricky to call things unconditionally for this driver, more below. > > While at it, also create a label to put clkname. > > Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org> > > --- > V2: > - Compare with -ENODEV only for failures. > - Create new label to put clkname. > --- > drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c | 14 +++++--------- > drivers/gpu/drm/msm/disp/dpu1/dpu_kms.h | 1 - > drivers/gpu/drm/msm/dsi/dsi_host.c | 8 ++------ > 3 files changed, 7 insertions(+), 16 deletions(-) > > diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c > index c0a4d4e16d82..c8287191951f 100644 > --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c > +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c > @@ -1010,12 +1010,9 @@ static int dpu_bind(struct device *dev, struct device *master, void *data) > return PTR_ERR(dpu_kms->opp_table); > /* OPP table is optional */ > ret = dev_pm_opp_of_add_table(dev); > - if (!ret) { > - dpu_kms->has_opp_table = true; > - } else if (ret != -ENODEV) { > + if (ret && ret != -ENODEV) { > dev_err(dev, "invalid OPP table in device tree\n"); > - dev_pm_opp_put_clkname(dpu_kms->opp_table); > - return ret; > + goto put_clkname; So FWIU, dpu_unbind() gets called even when dpu_bind() fails for some reason. I tried to address that earlier [1] which I realized did not land. But with these changes it will be even more broken unless we identify if we failed dpu_bind() before adding the OPP table, while adding it, or all went well with opps and handle things accordingly in dpu_unbind. [1] https://lore.kernel.org/patchwork/patch/1275632/ > } > > mp = &dpu_kms->mp; > @@ -1037,8 +1034,8 @@ static int dpu_bind(struct device *dev, struct device *master, void *data) > priv->kms = &dpu_kms->base; > return ret; > err: > - if (dpu_kms->has_opp_table) > - dev_pm_opp_of_remove_table(dev); > + dev_pm_opp_of_remove_table(dev); > +put_clkname: > dev_pm_opp_put_clkname(dpu_kms->opp_table); > return ret; > } > @@ -1056,8 +1053,7 @@ static void dpu_unbind(struct device *dev, struct device *master, void *data) > if (dpu_kms->rpm_enabled) > pm_runtime_disable(&pdev->dev); > > - if (dpu_kms->has_opp_table) > - dev_pm_opp_of_remove_table(dev); > + dev_pm_opp_of_remove_table(dev); > dev_pm_opp_put_clkname(dpu_kms->opp_table); > } > > diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.h b/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.h > index e140cd633071..8295979a7165 100644 > --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.h > +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.h > @@ -129,7 +129,6 @@ struct dpu_kms { > bool rpm_enabled; > > struct opp_table *opp_table; > - bool has_opp_table; > > struct dss_module_power mp; > > diff --git a/drivers/gpu/drm/msm/dsi/dsi_host.c b/drivers/gpu/drm/msm/dsi/dsi_host.c > index b17ac6c27554..4335fe33250c 100644 > --- a/drivers/gpu/drm/msm/dsi/dsi_host.c > +++ b/drivers/gpu/drm/msm/dsi/dsi_host.c > @@ -113,7 +113,6 @@ struct msm_dsi_host { > struct clk *byte_intf_clk; > > struct opp_table *opp_table; > - bool has_opp_table; > > u32 byte_clk_rate; > u32 pixel_clk_rate; > @@ -1891,9 +1890,7 @@ int msm_dsi_host_init(struct msm_dsi *msm_dsi) > return PTR_ERR(msm_host->opp_table); > /* OPP table is optional */ > ret = dev_pm_opp_of_add_table(&pdev->dev); > - if (!ret) { > - msm_host->has_opp_table = true; > - } else if (ret != -ENODEV) { > + if (ret && ret != -ENODEV) { > dev_err(&pdev->dev, "invalid OPP table in device tree\n"); > dev_pm_opp_put_clkname(msm_host->opp_table); > return ret; > @@ -1934,8 +1931,7 @@ void msm_dsi_host_destroy(struct mipi_dsi_host *host) > mutex_destroy(&msm_host->cmd_mutex); > mutex_destroy(&msm_host->dev_mutex); > > - if (msm_host->has_opp_table) > - dev_pm_opp_of_remove_table(&msm_host->pdev->dev); > + dev_pm_opp_of_remove_table(&msm_host->pdev->dev); > dev_pm_opp_put_clkname(msm_host->opp_table); > pm_runtime_disable(&msm_host->pdev->dev); > } > -- QUALCOMM INDIA, on behalf of Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, hosted by The Linux Foundation
WARNING: multiple messages have this Message-ID (diff)
From: Rajendra Nayak <rnayak@codeaurora.org> To: Viresh Kumar <viresh.kumar@linaro.org>, Rob Clark <robdclark@gmail.com>, Sean Paul <sean@poorly.run> Cc: Nishanth Menon <nm@ti.com>, Vincent Guittot <vincent.guittot@linaro.org>, linux-pm@vger.kernel.org, Stephen Boyd <sboyd@kernel.org>, linux-arm-msm@vger.kernel.org, Naresh Kamboju <naresh.kamboju@linaro.org>, Rafael Wysocki <rjw@rjwysocki.net>, Douglas Anderson <dianders@chromium.org>, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, freedreno@lists.freedesktop.org Subject: Re: [PATCH V2 3/8] drm/msm: Unconditionally call dev_pm_opp_of_remove_table() Date: Tue, 1 Sep 2020 13:01:47 +0530 [thread overview] Message-ID: <bc64e031-c42f-9ed2-c597-18a790a4d3bb@codeaurora.org> (raw) In-Reply-To: <6e4110032f8711e8bb0acbeccfe66dec3b09d5c1.1598594714.git.viresh.kumar@linaro.org> On 8/28/2020 11:37 AM, Viresh Kumar wrote: > dev_pm_opp_of_remove_table() doesn't report any errors when it fails to > find the OPP table with error -ENODEV (i.e. OPP table not present for > the device). And we can call dev_pm_opp_of_remove_table() > unconditionally here. Its a little tricky to call things unconditionally for this driver, more below. > > While at it, also create a label to put clkname. > > Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org> > > --- > V2: > - Compare with -ENODEV only for failures. > - Create new label to put clkname. > --- > drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c | 14 +++++--------- > drivers/gpu/drm/msm/disp/dpu1/dpu_kms.h | 1 - > drivers/gpu/drm/msm/dsi/dsi_host.c | 8 ++------ > 3 files changed, 7 insertions(+), 16 deletions(-) > > diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c > index c0a4d4e16d82..c8287191951f 100644 > --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c > +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c > @@ -1010,12 +1010,9 @@ static int dpu_bind(struct device *dev, struct device *master, void *data) > return PTR_ERR(dpu_kms->opp_table); > /* OPP table is optional */ > ret = dev_pm_opp_of_add_table(dev); > - if (!ret) { > - dpu_kms->has_opp_table = true; > - } else if (ret != -ENODEV) { > + if (ret && ret != -ENODEV) { > dev_err(dev, "invalid OPP table in device tree\n"); > - dev_pm_opp_put_clkname(dpu_kms->opp_table); > - return ret; > + goto put_clkname; So FWIU, dpu_unbind() gets called even when dpu_bind() fails for some reason. I tried to address that earlier [1] which I realized did not land. But with these changes it will be even more broken unless we identify if we failed dpu_bind() before adding the OPP table, while adding it, or all went well with opps and handle things accordingly in dpu_unbind. [1] https://lore.kernel.org/patchwork/patch/1275632/ > } > > mp = &dpu_kms->mp; > @@ -1037,8 +1034,8 @@ static int dpu_bind(struct device *dev, struct device *master, void *data) > priv->kms = &dpu_kms->base; > return ret; > err: > - if (dpu_kms->has_opp_table) > - dev_pm_opp_of_remove_table(dev); > + dev_pm_opp_of_remove_table(dev); > +put_clkname: > dev_pm_opp_put_clkname(dpu_kms->opp_table); > return ret; > } > @@ -1056,8 +1053,7 @@ static void dpu_unbind(struct device *dev, struct device *master, void *data) > if (dpu_kms->rpm_enabled) > pm_runtime_disable(&pdev->dev); > > - if (dpu_kms->has_opp_table) > - dev_pm_opp_of_remove_table(dev); > + dev_pm_opp_of_remove_table(dev); > dev_pm_opp_put_clkname(dpu_kms->opp_table); > } > > diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.h b/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.h > index e140cd633071..8295979a7165 100644 > --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.h > +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.h > @@ -129,7 +129,6 @@ struct dpu_kms { > bool rpm_enabled; > > struct opp_table *opp_table; > - bool has_opp_table; > > struct dss_module_power mp; > > diff --git a/drivers/gpu/drm/msm/dsi/dsi_host.c b/drivers/gpu/drm/msm/dsi/dsi_host.c > index b17ac6c27554..4335fe33250c 100644 > --- a/drivers/gpu/drm/msm/dsi/dsi_host.c > +++ b/drivers/gpu/drm/msm/dsi/dsi_host.c > @@ -113,7 +113,6 @@ struct msm_dsi_host { > struct clk *byte_intf_clk; > > struct opp_table *opp_table; > - bool has_opp_table; > > u32 byte_clk_rate; > u32 pixel_clk_rate; > @@ -1891,9 +1890,7 @@ int msm_dsi_host_init(struct msm_dsi *msm_dsi) > return PTR_ERR(msm_host->opp_table); > /* OPP table is optional */ > ret = dev_pm_opp_of_add_table(&pdev->dev); > - if (!ret) { > - msm_host->has_opp_table = true; > - } else if (ret != -ENODEV) { > + if (ret && ret != -ENODEV) { > dev_err(&pdev->dev, "invalid OPP table in device tree\n"); > dev_pm_opp_put_clkname(msm_host->opp_table); > return ret; > @@ -1934,8 +1931,7 @@ void msm_dsi_host_destroy(struct mipi_dsi_host *host) > mutex_destroy(&msm_host->cmd_mutex); > mutex_destroy(&msm_host->dev_mutex); > > - if (msm_host->has_opp_table) > - dev_pm_opp_of_remove_table(&msm_host->pdev->dev); > + dev_pm_opp_of_remove_table(&msm_host->pdev->dev); > dev_pm_opp_put_clkname(msm_host->opp_table); > pm_runtime_disable(&msm_host->pdev->dev); > } > -- QUALCOMM INDIA, on behalf of Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, hosted by The Linux Foundation _______________________________________________ dri-devel mailing list dri-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/dri-devel
next prev parent reply other threads:[~2020-09-01 7:32 UTC|newest] Thread overview: 50+ messages / expand[flat|nested] mbox.gz Atom feed top 2020-08-28 6:07 [PATCH V2 0/8] opp: Unconditionally call dev_pm_opp_of_remove_table() Viresh Kumar 2020-08-28 6:07 ` Viresh Kumar 2020-08-28 6:07 ` Viresh Kumar 2020-08-28 6:07 ` [PATCH V2 1/8] cpufreq: imx6q: " Viresh Kumar 2020-08-28 6:07 ` Viresh Kumar 2020-08-28 6:07 ` [PATCH V2 2/8] drm/lima: " Viresh Kumar 2020-08-28 6:07 ` Viresh Kumar 2020-10-22 5:14 ` Viresh Kumar 2020-10-22 5:14 ` Viresh Kumar 2020-08-28 6:07 ` [PATCH V2 3/8] drm/msm: " Viresh Kumar 2020-08-28 6:07 ` Viresh Kumar 2020-09-01 7:31 ` Rajendra Nayak [this message] 2020-09-01 7:31 ` Rajendra Nayak 2020-09-01 8:38 ` Viresh Kumar 2020-09-01 8:38 ` Viresh Kumar 2020-09-01 9:45 ` Rajendra Nayak 2020-09-01 9:45 ` Rajendra Nayak 2020-09-01 9:50 ` Viresh Kumar 2020-09-01 9:50 ` Viresh Kumar 2020-10-05 6:26 ` Viresh Kumar 2020-10-05 6:26 ` Viresh Kumar 2020-10-21 7:24 ` Viresh Kumar 2020-10-21 7:24 ` Viresh Kumar 2020-10-21 16:58 ` Rob Clark 2020-10-21 16:58 ` Rob Clark 2020-10-22 5:12 ` Viresh Kumar 2020-10-22 5:12 ` Viresh Kumar 2020-08-28 6:07 ` [PATCH V2 4/8] mmc: sdhci-msm: " Viresh Kumar 2020-08-28 8:43 ` Ulf Hansson 2020-08-28 15:06 ` Doug Anderson 2020-08-31 6:23 ` Viresh Kumar 2020-08-31 10:44 ` Viresh Kumar 2020-08-31 10:57 ` Ulf Hansson 2020-09-09 11:07 ` Viresh Kumar 2020-09-09 12:48 ` Ulf Hansson 2020-08-28 6:07 ` [PATCH V2 5/8] spi: spi-geni-qcom: " Viresh Kumar 2020-08-28 6:07 ` [PATCH V2 6/8] spi: spi-qcom-qspi: " Viresh Kumar 2020-08-28 6:07 ` [PATCH V2 7/8] tty: serial: qcom_geni_serial: " Viresh Kumar 2020-08-28 6:07 ` [PATCH V2 8/8] qcom-geni-se: remove has_opp_table Viresh Kumar 2020-10-21 7:34 ` Viresh Kumar 2020-10-21 15:31 ` Doug Anderson 2020-08-31 11:09 ` [PATCH V2 0/8] opp: Unconditionally call dev_pm_opp_of_remove_table() Viresh Kumar 2020-08-31 11:09 ` Viresh Kumar 2020-08-31 11:09 ` Viresh Kumar 2020-09-09 11:08 ` Viresh Kumar 2020-09-09 11:08 ` Viresh Kumar 2020-09-09 11:08 ` Viresh Kumar 2020-09-09 15:28 ` Mark Brown 2020-09-09 15:28 ` Mark Brown 2020-09-09 15:28 ` Mark Brown
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=bc64e031-c42f-9ed2-c597-18a790a4d3bb@codeaurora.org \ --to=rnayak@codeaurora.org \ --cc=dianders@chromium.org \ --cc=dri-devel@lists.freedesktop.org \ --cc=freedreno@lists.freedesktop.org \ --cc=linux-arm-msm@vger.kernel.org \ --cc=linux-kernel@vger.kernel.org \ --cc=linux-pm@vger.kernel.org \ --cc=naresh.kamboju@linaro.org \ --cc=nm@ti.com \ --cc=rjw@rjwysocki.net \ --cc=robdclark@gmail.com \ --cc=sboyd@kernel.org \ --cc=sean@poorly.run \ --cc=vincent.guittot@linaro.org \ --cc=viresh.kumar@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: linkBe 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.