On Wed, Jul 26, 2017 at 02:52:32PM +0530, Viresh Kumar wrote:
> diff --git a/kernel/sched/cpufreq_schedutil.c 
> b/kernel/sched/cpufreq_schedutil.c
> index 45fcf21ad685..bb834747e49b 100644
> --- a/kernel/sched/cpufreq_schedutil.c
> +++ b/kernel/sched/cpufreq_schedutil.c
> @@ -72,10 +72,15 @@ static DEFINE_PER_CPU(struct sugov_cpu, sugov_cpu);
>  
>  /************************ Governor internals ***********************/
>  
> -static bool sugov_should_update_freq(struct sugov_policy *sg_policy, u64 
> time)
> +static bool sugov_should_update_freq(struct sugov_policy *sg_policy, u64 
> time,
> +                                  int target_cpu)
>  {
>       s64 delta_ns;
>  
> +     /* Don't allow remote callbacks */

So I think you can reduce confusion in general if we extend this comment
somewhat.

        /*
         * Since cpufreq_update_util() is called with rq->lock held for
         * the @target_cpu, our per-cpu data is fully serialized.
         *
         * However, drivers cannot in general deal with cross-cpu
         * requests, so while get_next_freq() will work, our
         * sugov_update_commit() -> cpufreq_driver_fast_switch()
         * call will not.
         *
         * Hence stop here for remote requests, as calculating the
         * frequency is pointless if we cannot in fact act on it.
         */

> +     if (smp_processor_id() != target_cpu)
> +             return false;
> +
>       if (sg_policy->work_in_progress)
>               return false;
>  

Reply via email to