On Wed, Mar 16, 2016 at 03:59:18PM +0100, Rafael J. Wysocki wrote:
> +static void sugov_update_commit(struct sugov_policy *sg_policy, u64 time,
> +                             unsigned int next_freq)
> +{
> +     struct cpufreq_policy *policy = sg_policy->policy;
> +
> +     if (next_freq > policy->max)
> +             next_freq = policy->max;
> +     else if (next_freq < policy->min)
> +             next_freq = policy->min;
> +
> +     sg_policy->last_freq_update_time = time;
> +     if (sg_policy->next_freq == next_freq) {
> +             if (policy->fast_switch_enabled)
> +                     trace_cpu_frequency(policy->cur, smp_processor_id());
> +
> +             return;
> +     }
> +
> +     sg_policy->next_freq = next_freq;
> +     if (policy->fast_switch_enabled) {
> +             unsigned int freq;
> +
> +             freq = cpufreq_driver_fast_switch(policy, next_freq);

So you're assuming a RELATION_L for ->fast_switch() ?

> +             if (freq == CPUFREQ_ENTRY_INVALID)
> +                     return;
> +
> +             policy->cur = freq;
> +             trace_cpu_frequency(freq, smp_processor_id());
> +     } else {
> +             sg_policy->work_in_progress = true;
> +             irq_work_queue(&sg_policy->irq_work);
> +     }
> +}


> +static void sugov_work(struct work_struct *work)
> +{
> +     struct sugov_policy *sg_policy = container_of(work, struct 
> sugov_policy, work);
> +
> +     mutex_lock(&sg_policy->work_lock);
> +     __cpufreq_driver_target(sg_policy->policy, sg_policy->next_freq,
> +                             CPUFREQ_RELATION_L);

As per here, which I assume matches semantics on that point.

> +     mutex_unlock(&sg_policy->work_lock);
> +
> +     sg_policy->work_in_progress = false;
> +}

Reply via email to