linux/kernel
Brian Silverman da71549028 sched: Fix RLIMIT_RTTIME when PI-boosting to RT
commit 746db9443e upstream.

When non-realtime tasks get priority-inheritance boosted to a realtime
scheduling class, RLIMIT_RTTIME starts to apply to them. However, the
counter used for checking this (the same one used for SCHED_RR
timeslices) was not getting reset. This meant that tasks running with a
non-realtime scheduling class which are repeatedly boosted to a realtime
one, but never block while they are running realtime, eventually hit the
timeout without ever running for a time over the limit. This patch
resets the realtime timeslice counter when un-PI-boosting from an RT to
a non-RT scheduling class.

I have some test code with two threads and a shared PTHREAD_PRIO_INHERIT
mutex which induces priority boosting and spins while boosted that gets
killed by a SIGXCPU on non-fixed kernels but doesn't with this patch
applied. It happens much faster with a CONFIG_PREEMPT_RT kernel, and
does happen eventually with PREEMPT_VOLUNTARY kernels.

Signed-off-by: Brian Silverman <brian@peloton-tech.com>
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Cc: austin@peloton-tech.com
Link: http://lkml.kernel.org/r/1424305436-6716-1-git-send-email-brian@peloton-tech.com
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2015-04-19 10:11:06 +02:00
..
cpu sched/preempt: Fix up missed PREEMPT_NEED_RESCHED folding 2014-01-13 17:38:55 +01:00
debug kdb: fix incorrect counts in KDB summary command output 2015-03-06 14:43:30 -08:00
events perf: Fix irq_work 'tail' recursion 2015-04-13 14:03:01 +02:00
gcov
irq genirq: Prevent proc race against freeing of irq descriptors 2015-01-27 08:18:55 -08:00
locking rtmutex: Plug slow unlock race 2014-06-30 20:11:58 -07:00
power PM / Sleep: fix recovery during resuming from hibernation 2014-11-14 09:00:10 -08:00
printk console: Fix console name size mismatch 2015-03-26 15:06:53 +01:00
rcu rcu: Use rcu_gp_kthread_wake() to wake up grace period kthreads 2014-11-21 09:23:05 -08:00
sched sched: Fix RLIMIT_RTTIME when PI-boosting to RT 2015-04-19 10:11:06 +02:00
time ntp: Fixup adjtimex freq validation on 32-bit systems 2015-03-06 14:43:30 -08:00
trace tracing: Fix unmapping loop in tracing_mark_write 2015-03-06 14:43:28 -08:00
.gitignore
Kconfig.freezer
Kconfig.hz
Kconfig.locks locking/mutex: Disable optimistic spinning on some architectures 2014-07-28 08:06:03 -07:00
Kconfig.preempt
Makefile
acct.c
async.c
audit.c audit: AUDIT_FEATURE_CHANGE message format missing delimiting space 2014-11-21 09:23:01 -08:00
audit.h audit: Use struct net not pid_t to remember the network namespce to reply in 2014-02-28 04:04:33 -08:00
audit_tree.c audit: keep inode pinned 2014-11-21 09:23:01 -08:00
audit_watch.c inotify: Fix reporting of cookies for inotify events 2014-02-18 11:17:17 +01:00
auditfilter.c audit: restore AUDIT_LOGINUID unset ABI 2015-01-08 10:00:50 -08:00
auditsc.c audit: remove superfluous new- prefix in AUDIT_LOGIN messages 2014-07-09 11:18:28 -07:00
backtracetest.c
bounds.c
capability.c CAPABILITIES: remove undefined caps from all processes 2014-09-17 09:19:09 -07:00
cgroup.c cgroup: fix unbalanced locking 2014-10-05 14:52:17 -07:00
cgroup_freezer.c
compat.c
configs.c
context_tracking.c
cpu.c sched: Fix hotplug vs. set_cpus_allowed_ptr() 2014-06-11 11:54:11 -07:00
cpu_pm.c
cpuset.c cpuset: Fix cpuset sched_relax_domain_level 2015-03-26 15:06:54 +01:00
crash_dump.c
cred.c
delayacct.c
dma.c
elfcore.c
exec_domain.c
exit.c exit: call disassociate_ctty() before exit_task_namespaces() 2014-04-26 17:19:07 -07:00
extable.c
fork.c mm: per-thread vma caching 2014-10-09 12:21:29 -07:00
freezer.c freezer: Do not freeze tasks killed by OOM killer 2014-11-14 09:00:01 -08:00
futex.c futex: Ensure get_futex_key_refs() always implies a barrier 2014-10-30 09:38:24 -07:00
futex_compat.c
groups.c userns: Don't allow setgroups until a gid mapping has been setablished 2015-01-08 10:00:50 -08:00
hrtimer.c hrtimer: Set expiry time before switch_hrtimer_base() 2014-06-07 10:28:12 -07:00
hung_task.c hung_task: Display every hung task warning 2014-01-25 12:13:33 +01:00
irq_work.c
itimer.c
jump_label.c
kallsyms.c
kcmp.c kcmp: fix standard comparison bug 2014-10-05 14:52:20 -07:00
kexec.c powerpc, kexec: Fix "Processor X is stuck" issue during kexec from ST mode 2014-06-07 10:28:28 -07:00
kmod.c execve: use 'struct filename *' for executable name passing 2014-02-05 12:54:53 -08:00
kprobes.c
ksysfs.c kdump: fix exported size of vmcoreinfo note 2014-01-23 16:37:03 -08:00
kthread.c kthread: fix return value of kthread_create() upon SIGKILL. 2014-06-30 20:11:53 -07:00
latencytop.c
module-internal.h
module.c modules, lock around setting of MODULE_STATE_UNFORMED 2014-11-14 08:59:52 -08:00
module_signing.c
notifier.c
nsproxy.c
padata.c
panic.c
params.c
pid.c exit: pidns: alloc_pid() leaks pid_namespace if child_reaper is exiting 2015-01-08 10:00:50 -08:00
pid_namespace.c pid_namespace: pidns_get() should check task_active_pid_ns() != NULL 2014-04-26 17:19:04 -07:00
posix-cpu-timers.c
posix-timers.c posix-timers: Fix stack info leak in timer_create() 2014-11-14 09:00:10 -08:00
profile.c mm: fix GFP_THISNODE callers and clarify 2014-03-10 17:26:19 -07:00
ptrace.c
range.c
reboot.c
relay.c
res_counter.c
resource.c
seccomp.c
signal.c kernel/signal.c: change do_signal_stop/do_sigaction to use while_each_thread() 2014-01-23 16:37:02 -08:00
smp.c kernel/smp.c:on_each_cpu_cond(): fix warning in fallback path 2014-09-17 09:19:09 -07:00
smpboot.c smpboot: Add missing get_online_cpus() in smpboot_register_percpu_thread() 2015-02-11 14:54:49 +08:00
smpboot.h
softirq.c Merge branch 'timers-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip 2014-01-31 09:02:51 -08:00
stacktrace.c
stop_machine.c stop_machine: Fix^2 race between stop_two_cpus() and stop_cpus() 2014-03-11 11:33:47 +01:00
sys.c kernel/sys.c: k_getrusage() can use while_each_thread() 2014-01-23 16:37:02 -08:00
sys_ni.c
sysctl.c mm, pcp: allow restoring percpu_pagelist_fraction default 2014-07-09 11:18:26 -07:00
sysctl_binary.c
system_certificates.S
system_keyring.c
task_work.c
taskstats.c
test_kprobes.c
time.c time: settimeofday: Validate the values of tv from user 2015-01-29 17:40:49 -08:00
timeconst.bc
timer.c timer: Prevent overflow in apply_slack 2014-06-07 10:28:09 -07:00
tracepoint.c tracepoint: Do not waste memory on mods with no tracepoints 2014-05-31 13:20:28 -07:00
tsacct.c
uid16.c groups: Consolidate the setgroups permission checks 2015-01-08 10:00:49 -08:00
up.c
user-return-notifier.c
user.c userns: Add a knob to disable setgroups on a per user namespace basis 2015-01-08 10:00:50 -08:00
user_namespace.c userns: Allow setting gid_maps without privilege when setgroups is disabled 2015-01-08 10:00:50 -08:00
utsname.c
utsname_sysctl.c
watchdog.c kernel/watchdog.c: remove preemption restrictions when restarting lockup detector 2014-07-06 18:57:27 -07:00
workqueue.c workqueue: fix hang involving racing cancel[_delayed]_work_sync()'s for PREEMPT_NONE 2015-03-26 15:06:54 +01:00
workqueue_internal.h