Daniel Bristot de Oliveira
840d719604
sched/deadline: Update rq_clock of later_rq when pushing a task
Daniel Casini got this warn while running a DL task here at RetisLab:
[ 461.137582] ------------[ cut here ]------------
[ 461.137583] rq->clock_update_flags < RQCF_ACT_SKIP
[ 461.137599] WARNING: CPU: 4 PID: 2354 at kernel/sched/sched.h:967 assert_clock_updated.isra.32.part.33+0x17/0x20
[a ton of modules]
[ 461.137646] CPU: 4 PID: 2354 Comm: label_image Not tainted 4.18.0-rc4+ #3
[ 461.137647] Hardware name: ASUS All Series/Z87-K, BIOS 0801 09/02/2013
[ 461.137649] RIP: 0010:assert_clock_updated.isra.32.part.33+0x17/0x20
[ 461.137649] Code: ff 48 89 83 08 09 00 00 eb c6 66 0f 1f 84 00 00 00 00 00 55 48 c7 c7 98 7a 6c a5 c6 05 bc 0d 54 01 01 48 89 e5 e8 a9 84 fb ff <0f> 0b 5d c3 0f 1f 44 00 00 0f 1f 44 00 00 83 7e 60 01 74 0a 48 3b
[ 461.137673] RSP: 0018:ffffa77e08cafc68 EFLAGS: 00010082
[ 461.137674] RAX: 0000000000000000 RBX: ffff8b3fc1702d80 RCX: 0000000000000006
[ 461.137674] RDX: 0000000000000007 RSI: 0000000000000096 RDI: ffff8b3fded164b0
[ 461.137675] RBP: ffffa77e08cafc68 R08: 0000000000000026 R09: 0000000000000339
[ 461.137676] R10: ffff8b3fd060d410 R11: 0000000000000026 R12: ffffffffa4e14e20
[ 461.137677] R13: ffff8b3fdec22940 R14: ffff8b3fc1702da0 R15: ffff8b3fdec22940
[ 461.137678] FS: 00007efe43ee5700(0000) GS:ffff8b3fded00000(0000) knlGS:0000000000000000
[ 461.137679] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
[ 461.137680] CR2: 00007efe30000010 CR3: 0000000301744003 CR4: 00000000001606e0
[ 461.137680] Call Trace:
[ 461.137684] push_dl_task.part.46+0x3bc/0x460
[ 461.137686] task_woken_dl+0x60/0x80
[ 461.137689] ttwu_do_wakeup+0x4f/0x150
[ 461.137690] ttwu_do_activate+0x77/0x80
[ 461.137692] try_to_wake_up+0x1d6/0x4c0
[ 461.137693] wake_up_q+0x32/0x70
[ 461.137696] do_futex+0x7e7/0xb50
[ 461.137698] __x64_sys_futex+0x8b/0x180
[ 461.137701] do_syscall_64+0x5a/0x110
[ 461.137703] entry_SYSCALL_64_after_hwframe+0x44/0xa9
[ 461.137705] RIP: 0033:0x7efe4918ca26
[ 461.137705] Code: 00 00 00 74 17 49 8b 48 20 44 8b 59 10 41 83 e3 30 41 83 fb 20 74 1e be 85 00 00 00 41 ba 01 00 00 00 41 b9 01 00 00 04 0f 05 <48> 3d 01 f0 ff ff 73 1f 31 c0 c3 be 8c 00 00 00 49 89 c8 4d 31 d2
[ 461.137738] RSP: 002b:00007efe43ee4928 EFLAGS: 00000283 ORIG_RAX: 00000000000000ca
[ 461.137739] RAX: ffffffffffffffda RBX: 0000000005094df0 RCX: 00007efe4918ca26
[ 461.137740] RDX: 0000000000000001 RSI: 0000000000000085 RDI: 0000000005094e24
[ 461.137741] RBP: 00007efe43ee49c0 R08: 0000000005094e20 R09: 0000000004000001
[ 461.137741] R10: 0000000000000001 R11: 0000000000000283 R12: 0000000000000000
[ 461.137742] R13: 0000000005094df8 R14: 0000000000000001 R15: 0000000000448a10
[ 461.137743] ---[ end trace 187df4cad2bf7649 ]---
This warning happened in the push_dl_task(), because
__add_running_bw()->cpufreq_update_util() is getting the rq_clock of
the later_rq before its update, which takes place at activate_task().
The fix then is to update the rq_clock before calling add_running_bw().
To avoid double rq_clock_update() call, we set ENQUEUE_NOCLOCK flag to
activate_task().
Reported-by: Daniel Casini <daniel.casini@santannapisa.it>
Signed-off-by: Daniel Bristot de Oliveira <bristot@redhat.com>
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Acked-by: Juri Lelli <juri.lelli@redhat.com>
Cc: Clark Williams <williams@redhat.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Luca Abeni <luca.abeni@santannapisa.it>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Steven Rostedt <rostedt@goodmis.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Tommaso Cucinotta <tommaso.cucinotta@santannapisa.it>
Fixes: e0367b1267 sched/deadline: Move CPU frequency selection triggering points
Link: http://lkml.kernel.org/r/ca31d073a4788acf0684a8b255f14fea775ccf20.1532077269.git.bristot@redhat.com
Signed-off-by: Ingo Molnar <mingo@kernel.org>
|
2018-07-25 11:29:08 +02:00 |
| .. |
|
bpf
|
bpf: don't leave partial mangled prog in jit_subprogs error path
|
2018-07-12 14:00:54 -07:00 |
|
cgroup
|
docs: Fix some broken references
|
2018-06-15 18:10:01 -03:00 |
|
configs
|
kconfig: tinyconfig: remove stale stack protector fixups
|
2018-06-15 07:15:28 +09:00 |
|
debug
|
treewide: kzalloc() -> kcalloc()
|
2018-06-12 16:19:22 -07:00 |
|
dma
|
swiotlb: export swiotlb_dma_ops
|
2018-06-28 14:00:40 +02:00 |
|
events
|
perf/core: Move inline keyword at the beginning of declaration
|
2018-06-27 09:55:58 +02:00 |
|
gcov
|
gcov: remove CONFIG_GCOV_FORMAT_AUTODETECT
|
2018-06-08 18:56:02 +09:00 |
|
irq
|
genirq/debugfs: Add missing IRQCHIP_SUPPORTS_LEVEL_MSI debug
|
2018-06-22 14:22:00 +02:00 |
|
livepatch
|
livepatch: Allow to call a custom callback when freeing shadow variables
|
2018-04-17 13:42:48 +02:00 |
|
locking
|
Merge branch 'locking-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
|
2018-06-24 19:36:16 +08:00 |
|
power
|
fix a series of Documentation/ broken file name references
|
2018-06-15 18:10:01 -03:00 |
|
printk
|
Printk changes for 4.18
|
2018-06-06 16:04:55 -07:00 |
|
rcu
|
treewide: Use array_size() in vmalloc()
|
2018-06-12 16:19:22 -07:00 |
|
sched
|
sched/deadline: Update rq_clock of later_rq when pushing a task
|
2018-07-25 11:29:08 +02:00 |
|
time
|
Revert "tick: Prefer a lower rating device only if it's CPU local device"
|
2018-07-10 22:12:47 +02:00 |
|
trace
|
tracing: Reorder display of TGID to be after PID
|
2018-07-12 19:56:25 -04:00 |
|
.gitignore
|
|
|
|
acct.c
|
|
|
|
async.c
|
kernel/async.c: revert "async: simplify lowest_in_progress()"
|
2018-02-06 18:32:44 -08:00 |
|
audit.c
|
audit: use inline function to get audit context
|
2018-05-14 17:24:18 -04:00 |
|
audit.h
|
audit: track the owner of the command mutex ourselves
|
2018-02-23 11:22:22 -05:00 |
|
audit_fsnotify.c
|
fsnotify: add fsnotify_add_inode_mark() wrappers
|
2018-05-18 14:58:22 +02:00 |
|
audit_tree.c
|
fsnotify: add fsnotify_add_inode_mark() wrappers
|
2018-05-18 14:58:22 +02:00 |
|
audit_watch.c
|
\n
|
2018-06-17 05:06:18 +09:00 |
|
auditfilter.c
|
audit: use existing session info function
|
2018-05-18 15:47:54 -04:00 |
|
auditsc.c
|
audit: Fix wrong task in comparison of session ID
|
2018-05-21 14:27:43 -04:00 |
|
backtracetest.c
|
|
|
|
bounds.c
|
|
|
|
capability.c
|
|
|
|
compat.c
|
Merge branch 'timers-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
|
2018-06-04 20:27:54 -07:00 |
|
configs.c
|
|
|
|
context_tracking.c
|
|
|
|
cpu.c
|
cpu/hotplug: Fix unused function warning
|
2018-03-15 20:34:40 +01:00 |
|
cpu_pm.c
|
|
|
|
crash_core.c
|
mm: split page_type out from _mapcount
|
2018-06-07 17:34:37 -07:00 |
|
crash_dump.c
|
|
|
|
cred.c
|
|
|
|
delayacct.c
|
delayacct: Use raw_spinlocks
|
2018-04-27 14:34:51 +02:00 |
|
dma.c
|
proc: introduce proc_create_single{,_data}
|
2018-05-16 07:23:35 +02:00 |
|
elfcore.c
|
|
|
|
exec_domain.c
|
proc: introduce proc_create_single{,_data}
|
2018-05-16 07:23:35 +02:00 |
|
exit.c
|
kernel: use kernel_wait4() instead of sys_wait4()
|
2018-04-02 20:14:51 +02:00 |
|
extable.c
|
extable: Make init_kernel_text() global
|
2018-02-21 16:54:06 +01:00 |
|
fail_function.c
|
treewide: kmalloc() -> kmalloc_array()
|
2018-06-12 16:19:22 -07:00 |
|
fork.c
|
mm: make vm_area_alloc() initialize core fields
|
2018-07-21 15:24:03 -07:00 |
|
freezer.c
|
|
|
|
futex.c
|
pids: introduce find_get_task_by_vpid() helper
|
2018-02-06 18:32:46 -08:00 |
|
futex_compat.c
|
|
|
|
groups.c
|
|
|
|
hung_task.c
|
kernel/hung_task.c: show all hung tasks before panic
|
2018-06-07 17:34:39 -07:00 |
|
iomem.c
|
memremap: split devm_memremap_pages() and memremap() infrastructure
|
2018-05-15 23:08:33 -07:00 |
|
irq_work.c
|
|
|
|
jump_label.c
|
jump_label: Disable jump labels in __exit code
|
2018-03-20 08:57:17 +01:00 |
|
kallsyms.c
|
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/pmladek/printk
|
2018-02-01 13:36:15 -08:00 |
|
kcmp.c
|
|
|
|
Kconfig.freezer
|
|
|
|
Kconfig.hz
|
|
|
|
Kconfig.locks
|
|
|
|
Kconfig.preempt
|
|
|
|
kcov.c
|
sched/core / kcov: avoid kcov_area during task switch
|
2018-06-15 07:55:24 +09:00 |
|
kexec.c
|
kexec: call do_kexec_load() in compat syscall directly
|
2018-04-02 20:15:01 +02:00 |
|
kexec_core.c
|
kexec: yield to scheduler when loading kimage segments
|
2018-06-15 07:55:24 +09:00 |
|
kexec_file.c
|
treewide: Use array_size() in vzalloc()
|
2018-06-12 16:19:22 -07:00 |
|
kexec_internal.h
|
|
|
|
kmod.c
|
|
|
|
kprobes.c
|
kprobes: Fix random address output of blacklist file
|
2018-04-25 10:27:56 -04:00 |
|
ksysfs.c
|
|
|
|
kthread.c
|
kthread, sched/core: Fix kthread_parkme() (again...)
|
2018-07-03 09:17:30 +02:00 |
|
latencytop.c
|
|
|
|
Makefile
|
dma-mapping: move all DMA mapping code to kernel/dma
|
2018-06-14 08:50:37 +02:00 |
|
memremap.c
|
mm: introduce MEMORY_DEVICE_FS_DAX and CONFIG_DEV_PAGEMAP_OPS
|
2018-05-22 06:59:39 -07:00 |
|
module-internal.h
|
|
|
|
module.c
|
Modules updates for v4.18
|
2018-06-16 07:36:39 +09:00 |
|
module_signing.c
|
|
|
|
notifier.c
|
|
|
|
nsproxy.c
|
|
|
|
padata.c
|
|
|
|
panic.c
|
Kbuild: rename CC_STACKPROTECTOR[_STRONG] config variables
|
2018-06-14 12:21:18 +09:00 |
|
params.c
|
kernel/params.c: downgrade warning for unsafe parameters
|
2018-04-11 10:28:37 -07:00 |
|
pid.c
|
xarray: add the xa_lock to the radix_tree_root
|
2018-04-11 10:28:39 -07:00 |
|
pid_namespace.c
|
Merge branch 'userns-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/ebiederm/user-namespace
|
2018-04-03 19:15:32 -07:00 |
|
profile.c
|
|
|
|
ptrace.c
|
pids: introduce find_get_task_by_vpid() helper
|
2018-02-06 18:32:46 -08:00 |
|
range.c
|
|
|
|
reboot.c
|
|
|
|
relay.c
|
kernel/relay.c: change return type to vm_fault_t
|
2018-06-15 07:55:24 +09:00 |
|
resource.c
|
libnvdimm for 4.18
|
2018-06-08 17:21:52 -07:00 |
|
rseq.c
|
rseq: uapi: Declare rseq_cs field as union, update includes
|
2018-07-10 22:18:52 +02:00 |
|
seccomp.c
|
audit/stable-4.18 PR 20180605
|
2018-06-06 16:34:00 -07:00 |
|
signal.c
|
signal: Remove no longer required irqsave/restore
|
2018-06-10 06:14:01 +02:00 |
|
smp.c
|
|
|
|
smpboot.c
|
|
|
|
smpboot.h
|
|
|
|
softirq.c
|
Mark HI and TASKLET softirq synchronous
|
2018-07-17 11:12:43 -07:00 |
|
stacktrace.c
|
|
|
|
stop_machine.c
|
stop_machine: Disable preemption after queueing stopper threads
|
2018-07-25 11:25:08 +02:00 |
|
sys.c
|
mm: introduce arg_lock to protect arg_start|end and env_start|end in mm_struct
|
2018-06-07 17:34:34 -07:00 |
|
sys_ni.c
|
Merge branch 'core-rseq-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
|
2018-06-10 10:17:09 -07:00 |
|
sysctl.c
|
treewide: kzalloc() -> kcalloc()
|
2018-06-12 16:19:22 -07:00 |
|
sysctl_binary.c
|
staging: irda: remove remaining remants of irda code removal
|
2018-04-16 11:26:49 +02:00 |
|
task_work.c
|
|
|
|
taskstats.c
|
pids: introduce find_get_task_by_vpid() helper
|
2018-02-06 18:32:46 -08:00 |
|
test_kprobes.c
|
|
|
|
torture.c
|
rcu: Rename cond_resched_rcu_qs() to cond_resched_tasks_rcu_qs()
|
2018-05-15 10:27:29 -07:00 |
|
tracepoint.c
|
tracepoints: Fix the descriptions of tracepoint_probe_register{_prio}
|
2018-05-28 12:49:51 -04:00 |
|
tsacct.c
|
|
|
|
ucount.c
|
headers: untangle kmemleak.h from mm.h
|
2018-04-05 21:36:27 -07:00 |
|
uid16.c
|
fs: add do_fchownat(), ksys_fchown() helpers and ksys_{,l}chown() wrappers
|
2018-04-02 20:15:59 +02:00 |
|
uid16.h
|
kernel: provide ksys_*() wrappers for syscalls called by kernel/uid16.c
|
2018-04-02 20:15:30 +02:00 |
|
umh.c
|
umh: fix race condition
|
2018-06-07 16:56:28 -04:00 |
|
up.c
|
|
|
|
user-return-notifier.c
|
|
|
|
user.c
|
efivarfs: Limit the rate for non-root to read files
|
2018-02-22 10:21:02 -08:00 |
|
user_namespace.c
|
treewide: kmalloc() -> kmalloc_array()
|
2018-06-12 16:19:22 -07:00 |
|
utsname.c
|
uts: create "struct uts_namespace" from kmem_cache
|
2018-04-11 10:28:35 -07:00 |
|
utsname_sysctl.c
|
|
|
|
watchdog.c
|
|
|
|
watchdog_hld.c
|
|
|
|
workqueue.c
|
treewide: kzalloc() -> kcalloc()
|
2018-06-12 16:19:22 -07:00 |
|
workqueue_internal.h
|
workqueue: Set worker->desc to workqueue name by default
|
2018-05-18 08:47:13 -07:00 |