diff --git a/[refs] b/[refs] index 905ebb8a7ec4..f579b068f170 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 16c8f1c72ece3871a6c93003cd888fc2d003a7eb +refs/heads/master: 57d2aa00dcec67afa52478730f2b524521af14fb diff --git a/trunk/include/linux/sched.h b/trunk/include/linux/sched.h index d2112477ff5e..924e42a8df58 100644 --- a/trunk/include/linux/sched.h +++ b/trunk/include/linux/sched.h @@ -1208,6 +1208,7 @@ struct sched_entity { struct sched_rt_entity { struct list_head run_list; unsigned long timeout; + unsigned long watchdog_stamp; unsigned int time_slice; struct sched_rt_entity *back; diff --git a/trunk/kernel/sched/rt.c b/trunk/kernel/sched/rt.c index 29bda5bdf2a5..2f69ca997826 100644 --- a/trunk/kernel/sched/rt.c +++ b/trunk/kernel/sched/rt.c @@ -1988,7 +1988,11 @@ static void watchdog(struct rq *rq, struct task_struct *p) if (soft != RLIM_INFINITY) { unsigned long next; - p->rt.timeout++; + if (p->rt.watchdog_stamp != jiffies) { + p->rt.timeout++; + p->rt.watchdog_stamp = jiffies; + } + next = DIV_ROUND_UP(min(soft, hard), USEC_PER_SEC/HZ); if (p->rt.timeout > next) p->cputime_expires.sched_exp = p->se.sum_exec_runtime;