Skip to content

Commit

Permalink
sched: rt-watchdog: fix .rlim_max = RLIM_INFINITY
Browse files Browse the repository at this point in the history
Remove the curious logic to set it_sched_expires in the future. It useless
because rt.timeout wouldn't be incremented anyway.

Explicity check for RLIM_INFINITY as a test programm that had a 1s soft limit
and a inf hard limit would SIGKILL at 1s. This is because RLIM_INFINITY+d-1
is d-2.

Signed-off-by: Peter Zijlsta <a.p.zijlstra@chello.nl>
CC: Michal Schmidt <mschmidt@redhat.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
  • Loading branch information
Peter Zijlstra authored and Ingo Molnar committed Jan 25, 2008
1 parent 1020387 commit 5a52dd5
Show file tree
Hide file tree
Showing 2 changed files with 3 additions and 8 deletions.
3 changes: 2 additions & 1 deletion kernel/posix-cpu-timers.c
Original file line number Diff line number Diff line change
Expand Up @@ -1020,7 +1020,8 @@ static void check_thread_timers(struct task_struct *tsk,
unsigned long hard = sig->rlim[RLIMIT_RTTIME].rlim_max;
unsigned long *soft = &sig->rlim[RLIMIT_RTTIME].rlim_cur;

if (tsk->rt.timeout > DIV_ROUND_UP(hard, USEC_PER_SEC/HZ)) {
if (hard != RLIM_INFINITY &&
tsk->rt.timeout > DIV_ROUND_UP(hard, USEC_PER_SEC/HZ)) {
/*
* At the hard limit, we just die.
* No need to calculate anything else now.
Expand Down
8 changes: 1 addition & 7 deletions kernel/sched_rt.c
Original file line number Diff line number Diff line change
Expand Up @@ -1125,13 +1125,7 @@ static void watchdog(struct rq *rq, struct task_struct *p)

p->rt.timeout++;
next = DIV_ROUND_UP(min(soft, hard), USEC_PER_SEC/HZ);
if (next > p->rt.timeout) {
u64 next_time = p->se.sum_exec_runtime;

next_time += next * (NSEC_PER_SEC/HZ);
if (p->it_sched_expires > next_time)
p->it_sched_expires = next_time;
} else
if (p->rt.timeout > next)
p->it_sched_expires = p->se.sum_exec_runtime;
}
}
Expand Down

0 comments on commit 5a52dd5

Please sign in to comment.