lkml.org 
[lkml]   [2016]   [Feb]   [11]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH V5 3/6] cpufreq: Remove cpufreq_governor_lock
    Date
    We used to drop policy->rwsem just before calling __cpufreq_governor()
    in some cases earlier and so it was possible that __cpufreq_governor()
    runs concurrently via separate threads.

    In order to guarantee valid state transitions for governors,
    'governor_enabled' was required to be protected using some locking and
    we created cpufreq_governor_lock for that.

    But now, __cpufreq_governor() is always called from within policy->rwsem
    held and so 'governor_enabled' is protected against races even without
    cpufreq_governor_lock.

    Get rid of the extra lock now.

    Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
    Tested-by: Juri Lelli <juri.lelli@arm.com>
    Tested-by: Shilpasri G Bhat <shilpa.bhat@linux.vnet.ibm.com>
    ---
    drivers/cpufreq/cpufreq.c | 8 --------
    drivers/cpufreq/cpufreq_governor.h | 1 -
    2 files changed, 9 deletions(-)

    diff --git a/drivers/cpufreq/cpufreq.c b/drivers/cpufreq/cpufreq.c
    index 51fb47cd38a0..745da90d7b38 100644
    --- a/drivers/cpufreq/cpufreq.c
    +++ b/drivers/cpufreq/cpufreq.c
    @@ -146,8 +146,6 @@ void cpufreq_update_util(u64 time, unsigned long util, unsigned long max)
    rcu_read_unlock();
    }

    -DEFINE_MUTEX(cpufreq_governor_lock);
    -
    /* Flag to suspend/resume CPUFreq governors */
    static bool cpufreq_suspended;

    @@ -2014,11 +2012,9 @@ static int __cpufreq_governor(struct cpufreq_policy *policy,

    pr_debug("%s: for CPU %u, event %u\n", __func__, policy->cpu, event);

    - mutex_lock(&cpufreq_governor_lock);
    if ((policy->governor_enabled && event == CPUFREQ_GOV_START)
    || (!policy->governor_enabled
    && (event == CPUFREQ_GOV_LIMITS || event == CPUFREQ_GOV_STOP))) {
    - mutex_unlock(&cpufreq_governor_lock);
    return -EBUSY;
    }

    @@ -2027,8 +2023,6 @@ static int __cpufreq_governor(struct cpufreq_policy *policy,
    else if (event == CPUFREQ_GOV_START)
    policy->governor_enabled = true;

    - mutex_unlock(&cpufreq_governor_lock);
    -
    ret = policy->governor->governor(policy, event);

    if (!ret) {
    @@ -2038,12 +2032,10 @@ static int __cpufreq_governor(struct cpufreq_policy *policy,
    policy->governor->initialized--;
    } else {
    /* Restore original values */
    - mutex_lock(&cpufreq_governor_lock);
    if (event == CPUFREQ_GOV_STOP)
    policy->governor_enabled = true;
    else if (event == CPUFREQ_GOV_START)
    policy->governor_enabled = false;
    - mutex_unlock(&cpufreq_governor_lock);
    }

    if (((event == CPUFREQ_GOV_POLICY_INIT) && ret) ||
    diff --git a/drivers/cpufreq/cpufreq_governor.h b/drivers/cpufreq/cpufreq_governor.h
    index 4e77efb7db67..02885e353dfc 100644
    --- a/drivers/cpufreq/cpufreq_governor.h
    +++ b/drivers/cpufreq/cpufreq_governor.h
    @@ -232,7 +232,6 @@ static inline int delay_for_sampling_rate(unsigned int sampling_rate)
    }

    extern struct mutex dbs_data_mutex;
    -extern struct mutex cpufreq_governor_lock;
    void dbs_check_cpu(struct cpufreq_policy *policy);
    int cpufreq_governor_dbs(struct cpufreq_policy *policy, unsigned int event);
    void od_register_powersave_bias_handler(unsigned int (*f)
    --
    2.7.1.370.gb2aa7f8
    \
     
     \ /
      Last update: 2016-02-11 13:21    [W:5.717 / U:0.016 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site