From: Viresh Kumar <viresh.kumar@linaro.org>
To: Dan Carpenter <dan.carpenter@oracle.com>
Cc: Rafael Wysocki <rjw@rjwysocki.net>,
nm@ti.com, sboyd@codeaurora.org, linaro-kernel@lists.linaro.org,
linux-pm@vger.kernel.org, khilman@linaro.org,
Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
Len Brown <len.brown@intel.com>,
open list <linux-kernel@vger.kernel.org>,
Pavel Machek <pavel@ucw.cz>
Subject: Re: [PATCH V2 1/6] PM / OPP: Free resources and properly return error on failure
Date: Wed, 12 Aug 2015 15:40:10 +0530 [thread overview]
Message-ID: <20150812101010.GA32432@linux> (raw)
In-Reply-To: <20150812090351.GE32040@mwanda>
On 12-08-15, 12:03, Dan Carpenter wrote:
> It's a lot better but it would be better yet with a return 0;. There is
> an earlier goto put_opp_np on the success path, but that's fine. It's
> not the normal success path so it's necessarily complicated.
I see where you are coming from and it makes lot of sense. Thanks for
the teaching part :)
> Anyway, here is what I would suggest:
>
> diff --git a/drivers/base/power/opp.c b/drivers/base/power/opp.c
> index 51b220e..243317c 100644
> --- a/drivers/base/power/opp.c
> +++ b/drivers/base/power/opp.c
> @@ -1317,19 +1317,23 @@ static int _of_init_opp_table_v2(struct device *dev,
>
> /* We have opp-list node now, iterate over it and add OPPs */
> for_each_available_child_of_node(opp_np, np) {
> - count++;
> -
> ret = _opp_add_static_v2(dev, np);
> if (ret) {
> dev_err(dev, "%s: Failed to add OPP, %d\n", __func__,
> ret);
> break;
> }
> + count++;
> }
>
> /* There should be one of more OPP defined */
> - if (WARN_ON(!count))
> + if (WARN_ON(!count)) {
This is wrong. _opp_add_static_v2() failed and so count was 0. And we
aren't supposed to WARN() in this case. We only WARN if the user
hasn't added any available nodes in the opp table.
> + ret = -ENOENT;
> goto put_opp_np;
> + }
> + if (ret)
> + goto free_table;
Also the 'put_opp_np' thing is getting removed, check 2/6 patch of
this series.
What about this:
Message-Id: <e2412c33aa6923767b394adffee9d3f7be1ee27f.1439373912.git.viresh.kumar@linaro.org>
From: Viresh Kumar <viresh.kumar@linaro.org>
Date: Tue, 11 Aug 2015 14:23:34 +0530
Subject: [PATCH] PM / OPP: Free resources and properly return error on failure
_of_init_opp_table_v2() isn't freeing up resources on some errors and
the error values returned are also not correct always.
This fixes following problems:
- Return -ENOENT, if no entries are found in the table.
- Use IS_ERR() to properly check return value of _find_device_opp().
- Return error value with PTR_ERR() in above case.
- Free table if _find_device_opp() fails.
Reported-by: Dan Carpenter <dan.carpenter@oracle.com>
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
---
drivers/base/power/opp.c | 30 ++++++++++++++++--------------
1 file changed, 16 insertions(+), 14 deletions(-)
diff --git a/drivers/base/power/opp.c b/drivers/base/power/opp.c
index 204c6c945168..4d6c4576f7ae 100644
--- a/drivers/base/power/opp.c
+++ b/drivers/base/power/opp.c
@@ -1323,28 +1323,30 @@ static int _of_init_opp_table_v2(struct device *dev,
if (ret) {
dev_err(dev, "%s: Failed to add OPP, %d\n", __func__,
ret);
- break;
+ goto free_table;
}
}
/* There should be one of more OPP defined */
- if (WARN_ON(!count))
+ if (WARN_ON(!count)) {
+ ret = -ENOENT;
goto put_opp_np;
+ }
- if (!ret) {
- if (!dev_opp) {
- dev_opp = _find_device_opp(dev);
- if (WARN_ON(!dev_opp))
- goto put_opp_np;
- }
-
- dev_opp->np = opp_np;
- dev_opp->shared_opp = of_property_read_bool(opp_np,
- "opp-shared");
- } else {
- of_free_opp_table(dev);
+ dev_opp = _find_device_opp(dev);
+ if (WARN_ON(IS_ERR(dev_opp))) {
+ ret = PTR_ERR(dev_opp);
+ goto free_table;
}
+ dev_opp->np = opp_np;
+ dev_opp->shared_opp = of_property_read_bool(opp_np, "opp-shared");
+
+ of_node_put(opp_np);
+ return 0;
+
+free_table:
+ of_free_opp_table(dev);
put_opp_np:
of_node_put(opp_np);
next prev parent reply other threads:[~2015-08-12 10:10 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-08-11 10:34 [PATCH V2 0/6] PM / OPP: Add debugfs support Viresh Kumar
2015-08-11 10:34 ` [PATCH V2 1/6] PM / OPP: Free resources and properly return error on failure Viresh Kumar
2015-08-11 10:34 ` Viresh Kumar
2015-08-11 14:43 ` Dan Carpenter
2015-08-11 14:59 ` Viresh Kumar
2015-08-11 17:11 ` Dan Carpenter
2015-08-12 6:43 ` Viresh Kumar
2015-08-12 8:11 ` Dan Carpenter
2015-08-12 8:23 ` Viresh Kumar
2015-08-12 9:03 ` Dan Carpenter
2015-08-12 10:10 ` Viresh Kumar [this message]
2015-08-12 10:52 ` Dan Carpenter
2015-08-11 10:34 ` [PATCH V2 2/6] PM / OPP: reuse of_parse_phandle() Viresh Kumar
2015-08-11 10:34 ` Viresh Kumar
2015-08-11 10:34 ` [PATCH V2 3/6] PM / OPP: Prefix exported opp routines with dev_pm_opp_ Viresh Kumar
2015-08-11 10:34 ` Viresh Kumar
2015-08-11 10:34 ` [PATCH V2 4/6] PM / OPP: Move opp core to its own directory Viresh Kumar
2015-08-11 10:34 ` Viresh Kumar
2015-08-11 10:34 ` [PATCH V2 5/6] PM / OPP: Move cpu specific code to opp/cpu.c Viresh Kumar
2015-08-11 10:34 ` Viresh Kumar
2015-08-11 10:34 ` [PATCH V2 6/6] PM / OPP: Add debugfs support Viresh Kumar
2015-08-11 10:34 ` Viresh Kumar
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=20150812101010.GA32432@linux \
--to=viresh.kumar@linaro.org \
--cc=dan.carpenter@oracle.com \
--cc=gregkh@linuxfoundation.org \
--cc=khilman@linaro.org \
--cc=len.brown@intel.com \
--cc=linaro-kernel@lists.linaro.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pm@vger.kernel.org \
--cc=nm@ti.com \
--cc=pavel@ucw.cz \
--cc=rjw@rjwysocki.net \
--cc=sboyd@codeaurora.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.