29 Aug, 2013

1 commit


15 Aug, 2013

1 commit


08 Aug, 2013

3 commits

  • They are called policy, cur_policy, new_policy, data, etc. Just call
    them policy wherever possible.

    Signed-off-by: Viresh Kumar
    Signed-off-by: Rafael J. Wysocki

    Viresh Kumar
     
  • This patch addresses the following issues in the header files in the
    cpufreq core:
    - Include headers in ascending order, so that we don't add same
    many times by mistake.
    - must be included after , so that they override
    whatever they need to.
    - Remove unnecessary includes.
    - Don't include files already included by cpufreq.h or
    cpufreq_governor.h.

    [rjw: Changelog]
    Signed-off-by: Viresh Kumar
    Signed-off-by: Rafael J. Wysocki

    Viresh Kumar
     
  • This sysfs file was called ignore_nice_load earlier and commit
    4d5dcc4 (cpufreq: governor: Implement per policy instances of
    governors) changed its name to ignore_nice by mistake.

    Lets get it renamed back to its original name.

    Reported-by: Martin von Gagern
    Signed-off-by: Viresh Kumar
    Cc: 3.10+ # 3.10+
    Signed-off-by: Rafael J. Wysocki

    Viresh Kumar
     

26 Jul, 2013

1 commit

  • The ondemand governor calculates load in terms of frequency and
    increases it only if load_freq is greater than up_threshold
    multiplied by the current or average frequency. This appears to
    produce oscillations of frequency between min and max because,
    for example, a relatively small load can easily saturate minimum
    frequency and lead the CPU to the max. Then, it will decrease
    back to the min due to small load_freq.

    Change the calculation method of load and target frequency on the
    basis of the following two observations:

    - Load computation should not depend on the current or average
    measured frequency. For example, absolute load of 80% at 100MHz
    is not necessarily equivalent to 8% at 1000MHz in the next
    sampling interval.

    - It should be possible to increase the target frequency to any
    value present in the frequency table proportional to the absolute
    load, rather than to the max only, so that:

    Target frequency = C * load

    where we take C = policy->cpuinfo.max_freq / 100.

    Tested on Intel i7-3770 CPU @ 3.40GHz and on Quad core 1500MHz Krait.
    Phoronix benchmark of Linux Kernel Compilation 3.1 test shows an
    increase ~1.5% in performance. cpufreq_stats (time_in_state) shows
    that middle frequencies are used more, with this patch. Highest
    and lowest frequencies were used less by ~9%.

    [rjw: We have run multiple other tests on kernels with this
    change applied and in the vast majority of cases it turns out
    that the resulting performance improvement also leads to reduced
    consumption of energy. The change is additionally justified by
    the overall simplification of the code in question.]

    Signed-off-by: Stratos Karafotis
    Acked-by: Viresh Kumar
    Signed-off-by: Rafael J. Wysocki

    Stratos Karafotis
     

21 Jun, 2013

1 commit

  • There were a few noticeable formatting issues in core cpufreq code.
    This cleans them up to make code look better. The changes include:
    - Whitespace cleanup.
    - Rearrangements of code.
    - Multiline comments fixes.
    - Formatting changes to fit 80 columns.

    Copyright information in cpufreq.c is also updated to include my name
    for 2013.

    [rjw: Changelog]
    Signed-off-by: Viresh Kumar
    Signed-off-by: Rafael J. Wysocki

    Viresh Kumar
     

27 May, 2013

1 commit


12 May, 2013

1 commit

  • There are two types of INIT/EXIT activities that we need to do for
    governors:
    - Done only once per governor (doesn't depend how many instances of
    the governor there are). eg: cpufreq_register_notifier() for
    conservative governor.
    - Done per governor instance, eg: sysfs_{create|remove}_group().

    There were some corner cases where current code isn't able to handle
    them separately and so failing for some test cases.

    We use two separate variables now for keeping track of above two
    requirements.
    - governor->initialized for first one
    - dbs_data->usage_count for per governor instance

    Signed-off-by: Viresh Kumar
    Signed-off-by: Rafael J. Wysocki

    Viresh Kumar
     

28 Apr, 2013

1 commit

  • * pm-cpufreq: (57 commits)
    cpufreq: MAINTAINERS: Add co-maintainer
    cpufreq: pxa2xx: initialize variables
    ARM: S5pv210: compiling issue, ARM_S5PV210_CPUFREQ needs CONFIG_CPU_FREQ_TABLE=y
    cpufreq: cpu0: Put cpu parent node after using it
    cpufreq: ARM big LITTLE: Adapt to latest cpufreq updates
    cpufreq: ARM big LITTLE: put DT nodes after using them
    cpufreq: Don't call __cpufreq_governor() for drivers without target()
    cpufreq: exynos5440: Protect OPP search calls with RCU lock
    cpufreq: dbx500: Round to closest available freq
    cpufreq: Call __cpufreq_governor() with correct policy->cpus mask
    cpufreq / intel_pstate: Optimize intel_pstate_set_policy
    cpufreq: OMAP: instantiate omap-cpufreq as a platform_driver
    arm: exynos: Enable OPP library support for exynos5440
    cpufreq: exynos: Remove error return even if no soc is found
    cpufreq: exynos: Add cpufreq driver for exynos5440
    cpufreq: AMD "frequency sensitivity feedback" powersave bias for ondemand governor
    cpufreq: ondemand: allow custom powersave_bias_target handler to be registered
    cpufreq: convert cpufreq_driver to using RCU
    cpufreq: powerpc/platforms/cell: move cpufreq driver to drivers/cpufreq
    cpufreq: sparc: move cpufreq driver to drivers/cpufreq
    ...

    Conflicts:
    MAINTAINERS (with commit a8e39c3 from pm-cpuidle)
    drivers/cpufreq/cpufreq_governor.h (with commit beb0ff3)

    Rafael J. Wysocki
     

10 Apr, 2013

1 commit

  • This allows for another [arch specific] driver to hook into existing
    powersave bias function of the ondemand governor. i.e. This allows AMD
    specific powersave bias function (in a separate AMD specific driver)
    to aid ondemand governor's frequency transition decisions.

    Signed-off-by: Jacob Shin
    Acked-by: Thomas Renninger
    Acked-by: Borislav Petkov
    Acked-by: Viresh Kumar
    Signed-off-by: Rafael J. Wysocki

    Jacob Shin
     

02 Apr, 2013

1 commit


01 Apr, 2013

4 commits

  • Currently we always calculate the CPU iowait time and add it to idle time.
    If we are in ondemand and we use io_is_busy, we re-calculate iowait time
    and we subtract it from idle time.

    With this patch iowait time is calculated only when necessary avoiding
    the double call to get_cpu_iowait_time_us. We use a parameter in
    function get_cpu_idle_time to distinguish when the iowait time will be
    added to idle time or not, without the need of keeping the prev_io_wait.

    Signed-off-by: Stratos Karafotis
    Acked-by: Viresh Kumar
    Signed-off-by: Rafael J. Wysocki

    Stratos Karafotis
     
  • Following patch has introduced per cpu timers or works for ondemand and
    conservative governors.

    commit 2abfa876f1117b0ab45f191fb1f82c41b1cbc8fe
    Author: Rickard Andersson
    Date: Thu Dec 27 14:55:38 2012 +0000

    cpufreq: handle SW coordinated CPUs

    This causes additional unnecessary interrupts on all cpus when the load is
    recently evaluated by any other cpu. i.e. When load is recently evaluated by cpu
    x, we don't really need any other cpu to evaluate this load again for the next
    sampling_rate time.

    Some sort of code is present to avoid that but we are still getting timer
    interrupts for all cpus. A good way of avoiding this would be to modify delays
    for all cpus (policy->cpus) whenever any cpu has evaluated load.

    This patch does this change and some related code cleanup.

    Signed-off-by: Viresh Kumar
    Signed-off-by: Rafael J. Wysocki

    Viresh Kumar
     
  • Currently MIN_LATENCY_MULTIPLIER is set defined as 100 and so on a system with
    transition latency of 1 ms, the minimum sampling time comes to be around 100 ms.
    That is quite big if you want to get better performance for your system.

    Redefine MIN_LATENCY_MULTIPLIER to 20 so that we can support 20ms sampling rate
    for such platforms.

    Signed-off-by: Viresh Kumar
    Signed-off-by: Rafael J. Wysocki

    Viresh Kumar
     
  • Currently, there can't be multiple instances of single governor_type.
    If we have a multi-package system, where we have multiple instances
    of struct policy (per package), we can't have multiple instances of
    same governor. i.e. We can't have multiple instances of ondemand
    governor for multiple packages.

    Governors directory in sysfs is created at /sys/devices/system/cpu/cpufreq/
    governor-name/. Which again reflects that there can be only one
    instance of a governor_type in the system.

    This is a bottleneck for multicluster system, where we want different
    packages to use same governor type, but with different tunables.

    This patch uses the infrastructure provided by earlier patch and
    implements init/exit routines for ondemand and conservative
    governors.

    Signed-off-by: Viresh Kumar
    Signed-off-by: Rafael J. Wysocki

    Viresh Kumar
     

04 Mar, 2013

1 commit


09 Feb, 2013

1 commit

  • In order to avoid the calculation of up_threshold - down_differential
    every time that the frequency must be decreased, we replace the
    down_differential tuner with the adj_up_threshold which keeps the
    difference across multiple checks.

    Update the adj_up_threshold only when the up_theshold is also updated.

    Signed-off-by: Stratos Karafotis
    Acked-by: Viresh Kumar
    Signed-off-by: Rafael J. Wysocki

    Stratos Karafotis
     

02 Feb, 2013

5 commits

  • With the inclusion of following patches:

    9f4eb10 cpufreq: conservative: call dbs_check_cpu only when necessary
    772b4b1 cpufreq: ondemand: call dbs_check_cpu only when necessary

    code redundancy between the conservative and ondemand governors is
    introduced again, so get rid of it.

    [rjw: Changelog]
    Signed-off-by: Viresh Kumar
    Tested-by: Fabio Baltieri
    Signed-off-by: Rafael J. Wysocki

    Viresh Kumar
     
  • CPUFREQ_GOV_START/STOP are called only once for all policy->cpus and hence we
    don't need to adapt cpufreq_governor_dbs() routine for multiple calls.

    So, this patch removes dbs_data->enable field entirely. And rearrange code a
    bit.

    Signed-off-by: Viresh Kumar
    Tested-by: Fabio Baltieri
    Signed-off-by: Rafael J. Wysocki

    Viresh Kumar
     
  • Implement a generic helper function policy_is_shared() to replace the
    current dbs_sw_coordinated_cpus() at cpufreq level, so that it can be
    used by code other than cpufreq governors.

    Suggested-by: Viresh Kumar
    Signed-off-by: Fabio Baltieri
    Acked-by: Viresh Kumar
    Signed-off-by: Rafael J. Wysocki

    Fabio Baltieri
     
  • Modify ondemand timer to not resample CPU utilization if recently
    sampled from another SW coordinated core.

    Signed-off-by: Fabio Baltieri
    Signed-off-by: Rafael J. Wysocki

    Fabio Baltieri
     
  • This patch fixes a bug that occurred when we had load on a secondary CPU
    and the primary CPU was sleeping. Only one sampling timer was spawned
    and it was spawned as a deferred timer on the primary CPU, so when a
    secondary CPU had a change in load this was not detected by the cpufreq
    governor (both ondemand and conservative).

    This patch make sure that deferred timers are run on all CPUs in the
    case of software controlled CPUs that run on the same frequency.

    Signed-off-by: Rickard Andersson
    Signed-off-by: Fabio Baltieri
    Signed-off-by: Rafael J. Wysocki

    Rickard Andersson
     

15 Nov, 2012

2 commits

  • There were few sparse warnings due to mismatch of type on function arguments.
    Two types were used u64 and cputime64_t. Both are actually u64, so use u64 only.

    Reported-by: Fengguang Wu
    Signed-off-by: Viresh Kumar
    Signed-off-by: Rafael J. Wysocki

    Viresh Kumar
     
  • Initially ondemand governor was written and then using its code conservative
    governor is written. It used a lot of code from ondemand governor, but copy of
    code was created instead of using the same routines from both governors. Which
    increased code redundancy, which is difficult to manage.

    This patch is an attempt to move common part of both the governors to
    cpufreq_governor.c file to come over above mentioned issues.

    This shouldn't change anything from functionality point of view.

    Signed-off-by: Viresh Kumar
    Signed-off-by: Rafael J. Wysocki

    Viresh Kumar