1. 28 4月, 2016 1 次提交
  2. 25 4月, 2016 2 次提交
    • R
      cpufreq: governor: Fix prev_load initialization in cpufreq_governor_start() · ba1ca654
      Rafael J. Wysocki 提交于
      The way cpufreq_governor_start() initializes j_cdbs->prev_load is
      questionable.
      
      First off, j_cdbs->prev_cpu_wall used as a denominator in the
      computation may be zero.  The case this happens is when
      get_cpu_idle_time_us() returns -1 and get_cpu_idle_time_jiffy()
      used to return that number is called exactly at the jiffies_64
      wrap time.  It is rather hard to trigger that error, but it is not
      impossible and it will just crash the kernel then.
      
      Second, j_cdbs->prev_load is computed as the average load during
      the entire time since the system started and it may not reflect the
      load in the previous sampling period (as it is expected to).
      That doesn't play well with the way dbs_update() uses that value.
      Namely, if the update time delta (wall_time) happens do be greater
      than twice the sampling rate on the first invocation of it, the
      initial value of j_cdbs->prev_load (which may be completely off) will
      be returned to the caller as the current load (unless it is equal to
      zero and unless another CPU sharing the same policy object has a
      greater load value).
      
      For this reason, notice that the prev_load field of struct cpu_dbs_info
      is only used by dbs_update() and only in that one place, so if
      cpufreq_governor_start() is modified to always initialize it to 0,
      it will make dbs_update() always compute the actual load first time
      it checks the update time delta against the doubled sampling rate
      (after initialization) and there won't be any side effects of it.
      
      Consequently, modify cpufreq_governor_start() as described.
      
      Fixes: 18b46abd (cpufreq: governor: Be friendly towards latency-sensitive bursty workloads)
      Signed-off-by: NRafael J. Wysocki <rafael.j.wysocki@intel.com>
      Acked-by: NViresh Kumar <viresh.kumar@linaro.org>
      ba1ca654
    • R
      Revert "cpufreq: governor: Fix negative idle_time when configured with CONFIG_HZ_PERIODIC" · 94862a62
      Rafael J. Wysocki 提交于
      Revert commit 0df35026 (cpufreq: governor: Fix negative idle_time
      when configured with CONFIG_HZ_PERIODIC) that introduced a regression
      by causing the ondemand cpufreq governor to misbehave for
      CONFIG_TICK_CPU_ACCOUNTING unset (the frequency goes up to the max at
      one point and stays there indefinitely).
      
      The revert takes subsequent modifications of the code in question into
      account.
      
      Fixes: 0df35026 (cpufreq: governor: Fix negative idle_time when configured with CONFIG_HZ_PERIODIC)
      Link: https://bugzilla.kernel.org/show_bug.cgi?id=115261Reported-and-tested-by: NTimo Valtoaho <timo.valtoaho@gmail.com>
      Cc: 4.5+ <stable@vger.kernel.org> # 4.5+
      Signed-off-by: NRafael J. Wysocki <rafael.j.wysocki@intel.com>
      Acked-by: NViresh Kumar <viresh.kumar@linaro.org>
      94862a62
  3. 02 4月, 2016 3 次提交
  4. 23 3月, 2016 1 次提交
  5. 11 3月, 2016 1 次提交
  6. 09 3月, 2016 32 次提交