From: Stephen Boyd <sboyd@codeaurora.org>
To: Viresh Kumar <viresh.kumar@linaro.org>
Cc: Rafael Wysocki <rjw@rjwysocki.net>,
Viresh Kumar <vireshk@kernel.org>, Nishanth Menon <nm@ti.com>,
linaro-kernel@lists.linaro.org, linux-pm@vger.kernel.org,
Vincent Guittot <vincent.guittot@linaro.org>
Subject: Re: [PATCH 01/10] PM / OPP: Fix memory leak while adding duplicate OPPs
Date: Tue, 6 Dec 2016 17:09:24 -0800 [thread overview]
Message-ID: <20161207010924.GF4388@codeaurora.org> (raw)
In-Reply-To: <d4addab7750d63731d8e8562e2600fa8c987f53a.1481015522.git.viresh.kumar@linaro.org>
On 12/06, Viresh Kumar wrote:
> There are two types of duplicate OPPs that get different behavior from
> the core:
> A). An earlier OPP is marked 'available' and has same freq/voltages as
> the new one.
> B). An earlier OPP with same frequency, but is marked 'unavailable' OR
> doesn't have same voltages as the new one.
>
> The OPP core returns 0 for the first one, but -EEXIST for the second.
>
> While the OPP core returns 0 for the first case, its callers don't free
> the newly allocated OPP structure which isn't used anymore. Fix that by
> returning -EBUSY instead of 0, but make the callers return 0 eventually.
>
> As this isn't a critical fix, its not getting marked for stable kernel.
>
> Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Makes sense.
> ---
> drivers/base/power/opp/core.c | 14 ++++++++++++--
> drivers/base/power/opp/of.c | 6 +++++-
> 2 files changed, 17 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/base/power/opp/core.c b/drivers/base/power/opp/core.c
> index a0e6294baf1d..cc69f903fd34 100644
> --- a/drivers/base/power/opp/core.c
> +++ b/drivers/base/power/opp/core.c
> @@ -1080,6 +1080,12 @@ static bool _opp_supported_by_regulators(struct dev_pm_opp *opp,
> return true;
> }
>
> +/*
> + * Returns:
> + * 0: On success. And appropriate error message for Duplicate OPPs.
lowercase duplicate please
> + * -EBUSY: For OPP with same freq/volt and is available.
> + * -EEXIST: For OPP with same freq but different volt or is unavailable.
> + */
> int _opp_add(struct device *dev, struct dev_pm_opp *new_opp,
> struct opp_table *opp_table)
> {
> @@ -1112,7 +1118,7 @@ int _opp_add(struct device *dev, struct dev_pm_opp *new_opp,
>
> /* Should we compare voltages for all regulators here ? */
> return opp->available &&
> - new_opp->supplies[0].u_volt == opp->supplies[0].u_volt ? 0 : -EEXIST;
> + new_opp->supplies[0].u_volt == opp->supplies[0].u_volt ? -EBUSY : -EEXIST;
> }
>
> new_opp->opp_table = opp_table;
> @@ -1186,8 +1192,12 @@ int _opp_add_v1(struct device *dev, unsigned long freq, long u_volt,
> new_opp->dynamic = dynamic;
>
> ret = _opp_add(dev, new_opp, opp_table);
> - if (ret)
> + if (ret) {
> + /* Don't return error for duplicate OPPs */
Yes, but why?
> + if (ret == -EBUSY)
> + ret = 0;
> goto free_opp;
> + }
>
> mutex_unlock(&opp_table_lock);
>
--
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum,
a Linux Foundation Collaborative Project
next prev parent reply other threads:[~2016-12-07 1:18 UTC|newest]
Thread overview: 37+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-12-06 9:15 [PATCH 00/10] PM / OPP: Fixes and cleanups Viresh Kumar
2016-12-06 9:15 ` [PATCH 01/10] PM / OPP: Fix memory leak while adding duplicate OPPs Viresh Kumar
2016-12-07 1:09 ` Stephen Boyd [this message]
2016-12-07 3:23 ` Viresh Kumar
2016-12-06 9:15 ` [PATCH 02/10] PM / OPP: Remove useless TODO Viresh Kumar
2016-12-07 1:10 ` Stephen Boyd
2016-12-07 3:24 ` Viresh Kumar
2016-12-06 9:15 ` [PATCH 03/10] PM / OPP: Rename _allocate_opp() to _opp_allocate() Viresh Kumar
2016-12-07 1:10 ` Stephen Boyd
2016-12-06 9:15 ` [PATCH 04/10] PM / OPP: Error out on failing to add static OPPs for v1 bindings Viresh Kumar
2016-12-07 1:17 ` Stephen Boyd
2016-12-07 3:25 ` Viresh Kumar
2016-12-07 21:13 ` Stephen Boyd
2016-12-08 3:30 ` Viresh Kumar
2016-12-08 6:39 ` Shawn Guo
2016-12-08 6:45 ` Viresh Kumar
2016-12-08 14:27 ` Shawn Guo
2016-12-08 14:47 ` Viresh Kumar
2016-12-06 9:15 ` [PATCH 05/10] PM / OPP: Add light weight _opp_free() routine Viresh Kumar
2016-12-07 1:12 ` Stephen Boyd
2016-12-06 9:15 ` [PATCH 06/10] PM / OPP: Rename and split _dev_pm_opp_remove_table() Viresh Kumar
2016-12-07 1:19 ` Stephen Boyd
2016-12-06 9:15 ` [PATCH 07/10] PM / OPP: Don't allocate OPP table from _opp_allocate() Viresh Kumar
2016-12-07 1:02 ` Stephen Boyd
2016-12-07 4:17 ` Viresh Kumar
2016-12-07 22:05 ` Stephen Boyd
2016-12-08 3:45 ` Viresh Kumar
2016-12-22 0:43 ` Stephen Boyd
2016-12-06 9:16 ` [PATCH 08/10] PM / OPP: Rename dev_pm_opp_get_suspend_opp() and return OPP rate Viresh Kumar
2016-12-07 1:21 ` Stephen Boyd
2016-12-07 4:20 ` Viresh Kumar
2016-12-06 9:16 ` [PATCH 09/10] PM / OPP: Don't expose srcu_head to register notifiers Viresh Kumar
2016-12-07 1:22 ` Stephen Boyd
2016-12-06 9:16 ` [PATCH 10/10] PM / OPP: Split out part of _add_opp_table() and _remove_opp_table() Viresh Kumar
2016-12-07 1:24 ` Stephen Boyd
2016-12-07 4:25 ` Viresh Kumar
[not found] ` <CGME20161206091647epcas4p1823f471816de0ef953123a8fbdac4b1f@epcas4p1.samsung.com>
2016-12-07 0:29 ` [PATCH 09/10] PM / OPP: Don't expose srcu_head to register notifiers MyungJoo Ham
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=20161207010924.GF4388@codeaurora.org \
--to=sboyd@codeaurora.org \
--cc=linaro-kernel@lists.linaro.org \
--cc=linux-pm@vger.kernel.org \
--cc=nm@ti.com \
--cc=rjw@rjwysocki.net \
--cc=vincent.guittot@linaro.org \
--cc=viresh.kumar@linaro.org \
--cc=vireshk@kernel.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: link
Be 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.