lkml.org 
[lkml]   [2016]   [Jan]   [12]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
Date
From
SubjectRe: [RFC PATCH 05/19] cpufreq: assert locking when accessing cpufreq_policy_list
On 11-01-16, 17:35, Juri Lelli wrote:
> cpufreq_policy_list is guarded by cpufreq_driver_lock. Add appropriate
> locking assertions to check that we always access the list while holding
> the associated lock.
>
> Cc: "Rafael J. Wysocki" <rjw@rjwysocki.net>
> Cc: Viresh Kumar <viresh.kumar@linaro.org>
> Signed-off-by: Juri Lelli <juri.lelli@arm.com>
> ---
> drivers/cpufreq/cpufreq.c | 3 +++
> 1 file changed, 3 insertions(+)
>
> diff --git a/drivers/cpufreq/cpufreq.c b/drivers/cpufreq/cpufreq.c
> index 00a00cd..63d6efb 100644
> --- a/drivers/cpufreq/cpufreq.c
> +++ b/drivers/cpufreq/cpufreq.c
> @@ -65,6 +65,7 @@ static bool suitable_policy(struct cpufreq_policy *policy, bool active)
> static struct cpufreq_policy *next_policy(struct cpufreq_policy *policy,
> bool active)
> {
> + lockdep_assert_held(&cpufreq_driver_lock);
> do {
> policy = list_next_entry(policy, policy_list);
>
> @@ -80,6 +81,7 @@ static struct cpufreq_policy *first_policy(bool active)
> {
> struct cpufreq_policy *policy;
>
> + lockdep_assert_held(&cpufreq_driver_lock);

Because both first_policy() and next_policy() are parts of
for_each_suitable_policy() macro, checking this in first_policy() is
sufficient. next_policy() isn't designed to be used by any other code.

> /* No policies in the list */
> if (list_empty(&cpufreq_policy_list))
> return NULL;
> @@ -2430,6 +2432,7 @@ int cpufreq_register_driver(struct cpufreq_driver *driver_data)
> if (ret)
> goto err_boost_unreg;
>
> + lockdep_assert_held(&cpufreq_driver_lock);

Why do you need a cpufreq_driver_lock here? And the above change
should generate a lockdep here as the lock isn't taken right now.

> if (!(cpufreq_driver->flags & CPUFREQ_STICKY) &&
> list_empty(&cpufreq_policy_list)) {
> /* if all ->init() calls failed, unregister */
> --
> 2.2.2

--
viresh

\
 
 \ /
  Last update: 2016-01-12 11:21    [W:0.327 / U:0.136 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site