diff options
-rw-r--r-- | include/linux/sched.h | 1 | ||||
-rw-r--r-- | kernel/sched_rt.c | 6 |
2 files changed, 6 insertions, 1 deletions
diff --git a/include/linux/sched.h b/include/linux/sched.h index 312d047eb91..c17fdfbd323 100644 --- a/include/linux/sched.h +++ b/include/linux/sched.h @@ -1200,6 +1200,7 @@ struct sched_entity { struct sched_rt_entity { struct list_head run_list; unsigned long timeout; + unsigned long watchdog_stamp; unsigned int time_slice; int nr_cpus_allowed; diff --git a/kernel/sched_rt.c b/kernel/sched_rt.c index 2992f93b68c..f57fda7cbef 100644 --- a/kernel/sched_rt.c +++ b/kernel/sched_rt.c @@ -1777,7 +1777,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; |