From: Viresh Kumar <viresh.kumar@linaro.org>
To: Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com>
Cc: Thomas Abraham <thomas.ab@samsung.com>,
Kukjin Kim <kgene.kim@samsung.com>, Kukjin Kim <kgene@kernel.org>,
Krzysztof Kozlowski <k.kozlowski@samsung.com>,
Marek Szyprowski <m.szyprowski@samsung.com>,
"Rafael J. Wysocki" <rjw@rjwysocki.net>,
Sylwester Nawrocki <s.nawrocki@samsung.com>,
Michael Turquette <mturquette@baylibre.com>,
Tomasz Figa <tomasz.figa@gmail.com>,
Lukasz Majewski <l.majewski@samsung.com>,
Heiko Stuebner <heiko@sntech.de>,
Chanwoo Choi <cw00.choi@samsung.com>,
Kevin Hilman <khilman@linaro.org>,
Javier Martinez Canillas <javier@osg.samsung.com>,
Tobias Jakobi <tjakobi@math.uni-bielefeld.de>,
Anand Moon <linux.amoon@gmail.com>,
linux-samsung-soc@vger.kernel.org, linux-clk@vger.kernel.org,
linux-pm@vger.kernel.org, linux-arm-kernel@lists.infradead.org,
linux-kernel@vger.kernel.org
Subject: Re: [PATCH v3 1/3] PM / OPP: add dev_pm_opp_get_suspend_opp() helper
Date: Mon, 7 Sep 2015 11:26:11 +0530 [thread overview]
Message-ID: <20150907055611.GB26760@linux> (raw)
In-Reply-To: <1441303892-32004-2-git-send-email-b.zolnierkie@samsung.com>
On 03-09-15, 20:11, Bartlomiej Zolnierkiewicz wrote:
> Add dev_pm_opp_get_suspend_opp() helper to obtain suspend opp.
>
> Cc: Viresh Kumar <viresh.kumar@linaro.org>
> Cc: Thomas Abraham <thomas.ab@samsung.com>
> Cc: Javier Martinez Canillas <javier@osg.samsung.com>
> Cc: Krzysztof Kozlowski <k.kozlowski@samsung.com>
> Cc: Marek Szyprowski <m.szyprowski@samsung.com>
> Cc: Tobias Jakobi <tjakobi@math.uni-bielefeld.de>
> Signed-off-by: Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com>
> ---
> drivers/base/power/opp.c | 28 ++++++++++++++++++++++++++++
> include/linux/pm_opp.h | 6 ++++++
> 2 files changed, 34 insertions(+)
>
> diff --git a/drivers/base/power/opp.c b/drivers/base/power/opp.c
> index eb25449..eaafca7 100644
> --- a/drivers/base/power/opp.c
> +++ b/drivers/base/power/opp.c
> @@ -341,6 +341,34 @@ unsigned long dev_pm_opp_get_max_clock_latency(struct device *dev)
> EXPORT_SYMBOL_GPL(dev_pm_opp_get_max_clock_latency);
>
> /**
> + * dev_pm_opp_get_suspend_opp() - Get suspend opp
> + * @dev: device for which we do this operation
> + *
> + * Return: This function returns pointer to the suspend opp if it is
> + * defined, otherwise it returns NULL.
> + *
> + * Locking: This function takes rcu_read_lock().
> + */
> +struct dev_pm_opp *dev_pm_opp_get_suspend_opp(struct device *dev)
> +{
> + struct device_opp *dev_opp;
> + struct dev_pm_opp *suspend_opp;
> +
> + rcu_read_lock();
This is wrong. Please have a look at other exported APIs that return
an OPP. RCU protected structures must be accessed from within RCU
locks _ONLY_. But your function returns the pointer after dropping
the locks. Which essentially means that the OPP can be freed by core,
by the time you start using it. :)
So, in such cases, its upto the caller to ensure that locks are taken
properly.
You can look at dev_pm_opp_find_freq_exact() as an example.
--
viresh
WARNING: multiple messages have this Message-ID (diff)
From: viresh.kumar@linaro.org (Viresh Kumar)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH v3 1/3] PM / OPP: add dev_pm_opp_get_suspend_opp() helper
Date: Mon, 7 Sep 2015 11:26:11 +0530 [thread overview]
Message-ID: <20150907055611.GB26760@linux> (raw)
In-Reply-To: <1441303892-32004-2-git-send-email-b.zolnierkie@samsung.com>
On 03-09-15, 20:11, Bartlomiej Zolnierkiewicz wrote:
> Add dev_pm_opp_get_suspend_opp() helper to obtain suspend opp.
>
> Cc: Viresh Kumar <viresh.kumar@linaro.org>
> Cc: Thomas Abraham <thomas.ab@samsung.com>
> Cc: Javier Martinez Canillas <javier@osg.samsung.com>
> Cc: Krzysztof Kozlowski <k.kozlowski@samsung.com>
> Cc: Marek Szyprowski <m.szyprowski@samsung.com>
> Cc: Tobias Jakobi <tjakobi@math.uni-bielefeld.de>
> Signed-off-by: Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com>
> ---
> drivers/base/power/opp.c | 28 ++++++++++++++++++++++++++++
> include/linux/pm_opp.h | 6 ++++++
> 2 files changed, 34 insertions(+)
>
> diff --git a/drivers/base/power/opp.c b/drivers/base/power/opp.c
> index eb25449..eaafca7 100644
> --- a/drivers/base/power/opp.c
> +++ b/drivers/base/power/opp.c
> @@ -341,6 +341,34 @@ unsigned long dev_pm_opp_get_max_clock_latency(struct device *dev)
> EXPORT_SYMBOL_GPL(dev_pm_opp_get_max_clock_latency);
>
> /**
> + * dev_pm_opp_get_suspend_opp() - Get suspend opp
> + * @dev: device for which we do this operation
> + *
> + * Return: This function returns pointer to the suspend opp if it is
> + * defined, otherwise it returns NULL.
> + *
> + * Locking: This function takes rcu_read_lock().
> + */
> +struct dev_pm_opp *dev_pm_opp_get_suspend_opp(struct device *dev)
> +{
> + struct device_opp *dev_opp;
> + struct dev_pm_opp *suspend_opp;
> +
> + rcu_read_lock();
This is wrong. Please have a look at other exported APIs that return
an OPP. RCU protected structures must be accessed from within RCU
locks _ONLY_. But your function returns the pointer after dropping
the locks. Which essentially means that the OPP can be freed by core,
by the time you start using it. :)
So, in such cases, its upto the caller to ensure that locks are taken
properly.
You can look at dev_pm_opp_find_freq_exact() as an example.
--
viresh
next prev parent reply other threads:[~2015-09-07 5:56 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-09-03 18:11 [PATCH v3 0/3] cpufreq-dt: add suspend frequency support Bartlomiej Zolnierkiewicz
2015-09-03 18:11 ` Bartlomiej Zolnierkiewicz
2015-09-03 18:11 ` [PATCH v3 1/3] PM / OPP: add dev_pm_opp_get_suspend_opp() helper Bartlomiej Zolnierkiewicz
2015-09-03 18:11 ` Bartlomiej Zolnierkiewicz
2015-09-07 5:56 ` Viresh Kumar [this message]
2015-09-07 5:56 ` Viresh Kumar
2015-09-03 18:11 ` [PATCH v3 2/3] cpufreq-dt: add suspend frequency support Bartlomiej Zolnierkiewicz
2015-09-03 18:11 ` Bartlomiej Zolnierkiewicz
2015-09-07 5:58 ` Viresh Kumar
2015-09-07 5:58 ` Viresh Kumar
2015-09-03 18:11 ` [PATCH v3 3/3] ARM: dts: add suspend opp to exynos4412 Bartlomiej Zolnierkiewicz
2015-09-03 18:11 ` Bartlomiej Zolnierkiewicz
2015-09-07 5:59 ` Viresh Kumar
2015-09-07 5:59 ` 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=20150907055611.GB26760@linux \
--to=viresh.kumar@linaro.org \
--cc=b.zolnierkie@samsung.com \
--cc=cw00.choi@samsung.com \
--cc=heiko@sntech.de \
--cc=javier@osg.samsung.com \
--cc=k.kozlowski@samsung.com \
--cc=kgene.kim@samsung.com \
--cc=kgene@kernel.org \
--cc=khilman@linaro.org \
--cc=l.majewski@samsung.com \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-clk@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pm@vger.kernel.org \
--cc=linux-samsung-soc@vger.kernel.org \
--cc=linux.amoon@gmail.com \
--cc=m.szyprowski@samsung.com \
--cc=mturquette@baylibre.com \
--cc=rjw@rjwysocki.net \
--cc=s.nawrocki@samsung.com \
--cc=thomas.ab@samsung.com \
--cc=tjakobi@math.uni-bielefeld.de \
--cc=tomasz.figa@gmail.com \
/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.