Juri Lelli
e7fd5b1876
UPSTREAM: cpufreq: schedutil: use now as reference when aggregating shared policy requests
...
Currently, sugov_next_freq_shared() uses last_freq_update_time as a
reference to decide when to start considering CPU contributions as
stale.
However, since last_freq_update_time is set by the last CPU that issued
a frequency transition, this might cause problems in certain cases. In
practice, the detection of stale utilization values fails whenever the
CPU with such values was the last to update the policy. For example (and
please note again that the SCHED_CPUFREQ_RT flag is not the problem
here, but only the detection of after how much time that flag has to be
considered stale), suppose a policy with 2 CPUs:
CPU0 | CPU1
|
| RT task scheduled
| SCHED_CPUFREQ_RT is set
| CPU1->last_update = now
| freq transition to max
| last_freq_update_time = now
|
more than TICK_NSEC nsecs
|
a small CFS wakes up |
CPU0->last_update = now1 |
delta_ns(CPU0) < TICK_NSEC* |
CPU0's util is considered |
delta_ns(CPU1) = |
last_freq_update_time - |
CPU1->last_update = 0 |
< TICK_NSEC |
CPU1 is still considered |
CPU1->SCHED_CPUFREQ_RT is set |
we stay at max (until CPU1 |
exits from idle) |
* delta_ns is actually negative as now1 > last_freq_update_time
While last_freq_update_time is a sensible reference for rate limiting,
it doesn't seem to be useful for working around stale CPU states.
Fix the problem by always considering now (time) as the reference for
deciding when CPUs have stale contributions.
Bug: 109836581
Signed-off-by: Juri Lelli <juri.lelli@arm.com>
Acked-by: Vincent Guittot <vincent.guittot@linaro.org>
Acked-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
(cherry picked from commit d86ab9cff8b936aadde444d0e263a8db5ff0349b)
2018-06-22 15:45:45 +00:00
..
bpf
This is the 4.9.99 stable release
2018-05-09 12:28:25 +02:00
configs
ANDROID: add script to fetch android kernel config fragments
2017-10-03 17:19:26 +00:00
debug
This is the 4.9.104 stable release
2018-05-30 13:19:56 +02:00
events
This is the 4.9.104 stable release
2018-05-30 13:19:56 +02:00
gcov
gcov: support GCC 7.1
2017-09-02 07:07:53 +02:00
irq
genirq: Use cpumask_available() for check of cpumask variable
2018-04-08 12:12:44 +02:00
livepatch
livepatch/module: make TAINT_LIVEPATCH module-specific
2016-08-26 14:42:08 +02:00
locking
locking/qspinlock: Ensure node->count is updated before initialising node
2018-05-30 07:50:26 +02:00
power
This is the 4.9.104 stable release
2018-05-30 13:19:56 +02:00
printk
This is the 4.9.89 stable release
2018-03-22 09:54:47 +01:00
rcu
rcu: Call touch_nmi_watchdog() while printing stall warnings
2018-05-30 07:50:50 +02:00
sched
UPSTREAM: cpufreq: schedutil: use now as reference when aggregating shared policy requests
2018-06-22 15:45:45 +00:00
time
This is the 4.9.102 stable release
2018-05-22 20:05:34 +02:00
trace
This is the 4.9.107 stable release
2018-06-06 18:34:12 +02:00
.gitignore
acct.c
kernel/acct.c: fix the acct->needcheck check in check_free_space()
2018-01-10 09:29:51 +01:00
async.c
kernel/async.c: revert "async: simplify lowest_in_progress()"
2018-02-17 13:21:18 +01:00
audit.c
audit: return on memory error to avoid null pointer dereference
2018-05-30 07:50:49 +02:00
audit.h
Merge branch 'stable-4.8' of git://git.infradead.org/users/pcmoore/audit
2016-07-29 17:54:17 -07:00
audit_fsnotify.c
audit_tree.c
audit_watch.c
audit: Fix use after free in audit_remove_watch_rule()
2017-08-24 17:12:18 -07:00
auditfilter.c
audit: add fields to exclude filter by reusing user filter
2016-06-27 11:01:00 -04:00
auditsc.c
Merge branch 'stable-4.9' of git://git.infradead.org/users/pcmoore/audit
2016-10-04 14:21:41 -07:00
backtracetest.c
bounds.c
capability.c
ptrace: Capture the ptracer's creds not PT_PTRACE_CAP
2017-01-06 10:40:13 +01:00
cfi.c
cfi: print target address on failure
2018-05-01 16:49:34 +00:00
cgroup.c
This is the 4.9.42 stable release
2017-08-11 13:55:02 -07:00
cgroup_freezer.c
cgroup_pids.c
cgroup/pids: remove spurious suspicious RCU usage warning
2017-03-26 13:05:58 +02:00
compat.c
configs.c
context_tracking.c
cpu.c
This is the 4.9.94 stable release
2018-04-14 15:40:56 +02:00
cpu_pm.c
cpuset.c
This is the 4.9.55 stable release
2017-10-12 22:31:24 +02:00
crash_dump.c
cred.c
cred: Reject inodes with invalid ids in set_create_file_as()
2016-06-30 18:05:09 -05:00
delayacct.c
dma.c
elfcore.c
exec_domain.c
exit.c
This is the 4.9.101 stable release
2018-05-19 14:06:17 +02:00
extable.c
kernel/extable.c: mark core_kernel_text notrace
2017-07-21 07:42:21 +02:00
fork.c
kaiser: stack map PAGE_SIZE at THREAD_SIZE-PAGE_SIZE
2018-01-05 15:46:32 +01:00
freezer.c
freezer, oom: check TIF_MEMDIE on the correct task
2016-07-28 16:07:41 -07:00
futex.c
futex: futex_wake_op, fix sign_extend32 sign bits
2018-05-19 10:27:00 +02:00
futex_compat.c
groups.c
kernel: make groups_sort calling a responsibility group_info allocators
2018-01-10 09:29:52 +01:00
hung_task.c
hung_task: allow hung_task_panic when hung_task_warnings is 0
2016-10-11 15:06:33 -07:00
irq_work.c
jump_label.c
jump_label: Invoke jump_label_test() via early_initcall()
2017-12-14 09:28:24 +01:00
kallsyms.c
kallsyms: strip the .cfi postfix from symbols with CONFIG_CFI_CLANG
2018-02-28 15:09:58 -08:00
kcmp.c
Kconfig.freezer
Kconfig.hz
Kconfig.locks
Kconfig.preempt
kcov.c
This is the 4.9.84 stable release
2018-02-26 09:18:03 +01:00
kexec.c
kexec: allow architectures to override boot mapping
2016-08-02 19:35:27 -04:00
kexec_core.c
objtool, x86: Add several functions and files to the objtool whitelist
2018-06-05 10:28:57 +02:00
kexec_file.c
kexec: fix double-free when failing to relocate the purgatory
2016-09-01 17:52:01 -07:00
kexec_internal.h
kmod.c
kprobes.c
kprobes/x86: Fix to set RWX bits correctly before releasing trampoline
2018-04-08 12:12:43 +02:00
ksysfs.c
kexec: add a kexec_crash_loaded() function
2016-08-02 19:35:30 -04:00
kthread.c
cgroup, kthread: close race window where new kthreads can be migrated to non-root cgroups
2017-04-21 09:31:18 +02:00
latencytop.c
Makefile
add support for clang Control Flow Integrity (CFI)
2018-02-28 15:09:58 -08:00
membarrier.c
Fix: Disable sys_membarrier when nohz_full is enabled
2017-03-12 06:41:45 +01:00
memremap.c
mm: Fix devm_memremap_pages() collision handling
2018-02-28 10:18:34 +01:00
module-internal.h
module.c
This is the 4.9.93 stable release
2018-04-09 11:39:17 -07:00
module_signing.c
notifier.c
nsproxy.c
padata.c
padata: free correct variable
2017-05-20 14:28:40 +02:00
panic.c
kernel/panic.c: add missing \n
2017-07-05 14:40:24 +02:00
params.c
pid.c
pidns: disable pid allocation if pid_ns_prepare_proc() is failed in alloc_pid()
2018-04-13 19:47:53 +02:00
pid_namespace.c
pid_ns: Sleep in TASK_INTERRUPTIBLE in zap_pid_ns_processes
2017-05-25 15:44:38 +02:00
profile.c
profile: Convert to hotplug state machine
2016-07-15 10:41:42 +02:00
ptrace.c
ptrace: Properly initialize ptracer_cred on fork
2017-06-14 15:05:54 +02:00
range.c
reboot.c
relay.c
kernel/relay.c: limit kmalloc size to KMALLOC_MAX_SIZE
2018-05-30 07:50:29 +02:00
resource.c
resource: fix integer overflow at reallocation
2018-04-24 09:34:09 +02:00
seccomp.c
seccomp: Move speculation migitation control to arch code
2018-05-22 16:58:02 +02:00
signal.c
kernel/signal.c: avoid undefined behaviour in kill_something_info
2018-05-30 07:50:18 +02:00
smp.c
smp: Allocate smp_call_on_cpu() workqueue on stack too
2016-09-22 14:49:10 +02:00
smpboot.c
kthread/smpboot: do not park in kthread_create_on_cpu()
2016-10-11 15:06:33 -07:00
smpboot.h
softirq.c
softirq: Display IRQ_POLL for irq-poll statistics
2016-10-21 15:45:47 -06:00
stacktrace.c
stacktrace, lockdep: Fix address, newline ugliness
2017-02-14 15:25:42 -08:00
stop_machine.c
Merge branch 'sched-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
2016-10-03 13:39:00 -07:00
sys.c
This is the 4.9.104 stable release
2018-05-30 13:19:56 +02:00
sys_ni.c
x86/pkeys: Fix pkeys build breakage for some non-x86 arches
2016-09-13 14:41:36 +02:00
sysctl.c
ANDROID: add extra free kbytes tunable
2018-06-04 15:47:24 +00:00
sysctl_binary.c
task_work.c
task_work: use READ_ONCE/lockless_dereference, avoid pi_lock if !task_works
2016-08-02 19:35:02 -04:00
taskstats.c
taskstats: fix the length of cgroupstats_cmd_get_policy
2016-11-03 16:55:58 -04:00
test_kprobes.c
torture.c
torture: Convert torture_shutdown() to hrtimer
2016-08-22 10:01:49 -07:00
tracepoint.c
tracepoint: Do not warn on ENOMEM
2018-05-09 09:50:20 +02:00
tsacct.c
ucount.c
kernel/ucount.c: mark user_header with kmemleak_ignore()
2017-06-17 06:41:51 +02:00
uid16.c
kernel: make groups_sort calling a responsibility group_info allocators
2018-01-10 09:29:52 +01:00
up.c
smp: Add function to execute a function synchronously on a CPU
2016-09-05 13:52:39 +02:00
user-return-notifier.c
user.c
ANDROID: proc: Add /proc/uid directory
2018-04-03 11:15:30 -07:00
user_namespace.c
Merge branch 'nsfs-ioctls' into HEAD
2016-09-22 20:00:36 -05:00
utsname.c
Merge branch 'nsfs-ioctls' into HEAD
2016-09-22 20:00:36 -05:00
utsname_sysctl.c
watchdog.c
Revert "ANDROID: hardlockup: detect hard lockups without NMIs using secondary cpus"
2017-06-27 10:31:16 +02:00
watchdog_hld.c
kernel/watchdog: prevent false hardlockup on overloaded system
2017-06-17 06:41:57 +02:00
workqueue.c
workqueue: use put_device() instead of kfree()
2018-05-30 07:50:36 +02:00
workqueue_internal.h
workqueue: Fix NULL pointer dereference
2017-11-15 15:53:17 +01:00