* [PATCH 1/2] PM / OPP: Assert RCU lock in exported functions
@ 2015-01-09 8:27 Krzysztof Kozlowski
2015-01-09 8:27 ` [PATCH 2/2] PM / QoS: Use lockdep asserts to find missing hold of power.lock Krzysztof Kozlowski
2015-01-30 0:16 ` [PATCH 1/2] PM / OPP: Assert RCU lock in exported functions Rafael J. Wysocki
0 siblings, 2 replies; 4+ messages in thread
From: Krzysztof Kozlowski @ 2015-01-09 8:27 UTC (permalink / raw)
To: Rafael J. Wysocki, Len Brown, Pavel Machek, Greg Kroah-Hartman,
linux-pm, linux-kernel
Cc: Krzysztof Kozlowski
Add lockdep asserts for holding the RCU lock when calling
dev_pm_opp_get_freq() and dev_pm_opp_get_voltage() to aid in detecting
RCU misuses.
These are called often after dev_pm_opp_find_freq_ceil/exact() which
already asserts for RCU lock. However one could make an error by
releasing lock too early - just after dev_pm_opp_find_freq_ceil().
Signed-off-by: Krzysztof Kozlowski <k.kozlowski@samsung.com>
---
drivers/base/power/opp.c | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/drivers/base/power/opp.c b/drivers/base/power/opp.c
index 106c69359306..842d31e24eee 100644
--- a/drivers/base/power/opp.c
+++ b/drivers/base/power/opp.c
@@ -169,6 +169,8 @@ unsigned long dev_pm_opp_get_voltage(struct dev_pm_opp *opp)
struct dev_pm_opp *tmp_opp;
unsigned long v = 0;
+ opp_rcu_lockdep_assert();
+
tmp_opp = rcu_dereference(opp);
if (unlikely(IS_ERR_OR_NULL(tmp_opp)) || !tmp_opp->available)
pr_err("%s: Invalid parameters\n", __func__);
@@ -199,6 +201,8 @@ unsigned long dev_pm_opp_get_freq(struct dev_pm_opp *opp)
struct dev_pm_opp *tmp_opp;
unsigned long f = 0;
+ opp_rcu_lockdep_assert();
+
tmp_opp = rcu_dereference(opp);
if (unlikely(IS_ERR_OR_NULL(tmp_opp)) || !tmp_opp->available)
pr_err("%s: Invalid parameters\n", __func__);
--
1.9.1
^ permalink raw reply related [flat|nested] 4+ messages in thread
* [PATCH 2/2] PM / QoS: Use lockdep asserts to find missing hold of power.lock
2015-01-09 8:27 [PATCH 1/2] PM / OPP: Assert RCU lock in exported functions Krzysztof Kozlowski
@ 2015-01-09 8:27 ` Krzysztof Kozlowski
2015-01-30 0:18 ` Rafael J. Wysocki
2015-01-30 0:16 ` [PATCH 1/2] PM / OPP: Assert RCU lock in exported functions Rafael J. Wysocki
1 sibling, 1 reply; 4+ messages in thread
From: Krzysztof Kozlowski @ 2015-01-09 8:27 UTC (permalink / raw)
To: Rafael J. Wysocki, Len Brown, Pavel Machek, Greg Kroah-Hartman,
linux-pm, linux-kernel
Cc: Krzysztof Kozlowski
Add lockdep asserts for holding the dev->power.lock to non-static
functions which require this. They could be used outside of the file so
asserts may help in detecting locking misuse.
Signed-off-by: Krzysztof Kozlowski <k.kozlowski@samsung.com>
---
drivers/base/power/qos.c | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/drivers/base/power/qos.c b/drivers/base/power/qos.c
index a8fe4c1a8d07..e56d538d039e 100644
--- a/drivers/base/power/qos.c
+++ b/drivers/base/power/qos.c
@@ -64,6 +64,8 @@ enum pm_qos_flags_status __dev_pm_qos_flags(struct device *dev, s32 mask)
struct pm_qos_flags *pqf;
s32 val;
+ lockdep_assert_held(&dev->power.lock);
+
if (IS_ERR_OR_NULL(qos))
return PM_QOS_FLAGS_UNDEFINED;
@@ -104,6 +106,8 @@ EXPORT_SYMBOL_GPL(dev_pm_qos_flags);
*/
s32 __dev_pm_qos_read_value(struct device *dev)
{
+ lockdep_assert_held(&dev->power.lock);
+
return IS_ERR_OR_NULL(dev->power.qos) ?
0 : pm_qos_read_value(&dev->power.qos->resume_latency);
}
--
1.9.1
^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [PATCH 1/2] PM / OPP: Assert RCU lock in exported functions
2015-01-09 8:27 [PATCH 1/2] PM / OPP: Assert RCU lock in exported functions Krzysztof Kozlowski
2015-01-09 8:27 ` [PATCH 2/2] PM / QoS: Use lockdep asserts to find missing hold of power.lock Krzysztof Kozlowski
@ 2015-01-30 0:16 ` Rafael J. Wysocki
1 sibling, 0 replies; 4+ messages in thread
From: Rafael J. Wysocki @ 2015-01-30 0:16 UTC (permalink / raw)
To: Krzysztof Kozlowski
Cc: Len Brown, Pavel Machek, Greg Kroah-Hartman, linux-pm, linux-kernel
On Friday, January 09, 2015 09:27:57 AM Krzysztof Kozlowski wrote:
> Add lockdep asserts for holding the RCU lock when calling
> dev_pm_opp_get_freq() and dev_pm_opp_get_voltage() to aid in detecting
> RCU misuses.
>
> These are called often after dev_pm_opp_find_freq_ceil/exact() which
> already asserts for RCU lock. However one could make an error by
> releasing lock too early - just after dev_pm_opp_find_freq_ceil().
>
> Signed-off-by: Krzysztof Kozlowski <k.kozlowski@samsung.com>
Queued up for 3.20, thanks!
> ---
> drivers/base/power/opp.c | 4 ++++
> 1 file changed, 4 insertions(+)
>
> diff --git a/drivers/base/power/opp.c b/drivers/base/power/opp.c
> index 106c69359306..842d31e24eee 100644
> --- a/drivers/base/power/opp.c
> +++ b/drivers/base/power/opp.c
> @@ -169,6 +169,8 @@ unsigned long dev_pm_opp_get_voltage(struct dev_pm_opp *opp)
> struct dev_pm_opp *tmp_opp;
> unsigned long v = 0;
>
> + opp_rcu_lockdep_assert();
> +
> tmp_opp = rcu_dereference(opp);
> if (unlikely(IS_ERR_OR_NULL(tmp_opp)) || !tmp_opp->available)
> pr_err("%s: Invalid parameters\n", __func__);
> @@ -199,6 +201,8 @@ unsigned long dev_pm_opp_get_freq(struct dev_pm_opp *opp)
> struct dev_pm_opp *tmp_opp;
> unsigned long f = 0;
>
> + opp_rcu_lockdep_assert();
> +
> tmp_opp = rcu_dereference(opp);
> if (unlikely(IS_ERR_OR_NULL(tmp_opp)) || !tmp_opp->available)
> pr_err("%s: Invalid parameters\n", __func__);
>
--
I speak only for myself.
Rafael J. Wysocki, Intel Open Source Technology Center.
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH 2/2] PM / QoS: Use lockdep asserts to find missing hold of power.lock
2015-01-09 8:27 ` [PATCH 2/2] PM / QoS: Use lockdep asserts to find missing hold of power.lock Krzysztof Kozlowski
@ 2015-01-30 0:18 ` Rafael J. Wysocki
0 siblings, 0 replies; 4+ messages in thread
From: Rafael J. Wysocki @ 2015-01-30 0:18 UTC (permalink / raw)
To: Krzysztof Kozlowski
Cc: Len Brown, Pavel Machek, Greg Kroah-Hartman, linux-pm, linux-kernel
On Friday, January 09, 2015 09:27:58 AM Krzysztof Kozlowski wrote:
> Add lockdep asserts for holding the dev->power.lock to non-static
> functions which require this. They could be used outside of the file so
> asserts may help in detecting locking misuse.
>
> Signed-off-by: Krzysztof Kozlowski <k.kozlowski@samsung.com>
Queued up for 3.20, thanks!
> ---
> drivers/base/power/qos.c | 4 ++++
> 1 file changed, 4 insertions(+)
>
> diff --git a/drivers/base/power/qos.c b/drivers/base/power/qos.c
> index a8fe4c1a8d07..e56d538d039e 100644
> --- a/drivers/base/power/qos.c
> +++ b/drivers/base/power/qos.c
> @@ -64,6 +64,8 @@ enum pm_qos_flags_status __dev_pm_qos_flags(struct device *dev, s32 mask)
> struct pm_qos_flags *pqf;
> s32 val;
>
> + lockdep_assert_held(&dev->power.lock);
> +
> if (IS_ERR_OR_NULL(qos))
> return PM_QOS_FLAGS_UNDEFINED;
>
> @@ -104,6 +106,8 @@ EXPORT_SYMBOL_GPL(dev_pm_qos_flags);
> */
> s32 __dev_pm_qos_read_value(struct device *dev)
> {
> + lockdep_assert_held(&dev->power.lock);
> +
> return IS_ERR_OR_NULL(dev->power.qos) ?
> 0 : pm_qos_read_value(&dev->power.qos->resume_latency);
> }
>
--
I speak only for myself.
Rafael J. Wysocki, Intel Open Source Technology Center.
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2015-01-29 23:55 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-01-09 8:27 [PATCH 1/2] PM / OPP: Assert RCU lock in exported functions Krzysztof Kozlowski
2015-01-09 8:27 ` [PATCH 2/2] PM / QoS: Use lockdep asserts to find missing hold of power.lock Krzysztof Kozlowski
2015-01-30 0:18 ` Rafael J. Wysocki
2015-01-30 0:16 ` [PATCH 1/2] PM / OPP: Assert RCU lock in exported functions Rafael J. Wysocki
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).