projects
/
platform
/
adaptation
/
renesas_rcar
/
renesas_kernel.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
audit: keep inode pinned
[platform/adaptation/renesas_rcar/renesas_kernel.git]
/
kernel
/
sched
/
deadline.c
diff --git
a/kernel/sched/deadline.c
b/kernel/sched/deadline.c
index
6e79b3f
..
37dac98
100644
(file)
--- a/
kernel/sched/deadline.c
+++ b/
kernel/sched/deadline.c
@@
-329,7
+329,7
@@
static void replenish_dl_entity(struct sched_dl_entity *dl_se,
if (!lag_once) {
lag_once = true;
if (!lag_once) {
lag_once = true;
- printk_
sch
ed("sched: DL replenish lagged to much\n");
+ printk_
deferr
ed("sched: DL replenish lagged to much\n");
}
dl_se->deadline = rq_clock(rq) + pi_se->dl_deadline;
dl_se->runtime = pi_se->dl_runtime;
}
dl_se->deadline = rq_clock(rq) + pi_se->dl_deadline;
dl_se->runtime = pi_se->dl_runtime;
@@
-490,9
+490,17
@@
static enum hrtimer_restart dl_task_timer(struct hrtimer *timer)
struct sched_dl_entity,
dl_timer);
struct task_struct *p = dl_task_of(dl_se);
struct sched_dl_entity,
dl_timer);
struct task_struct *p = dl_task_of(dl_se);
- struct rq *rq = task_rq(p);
+ struct rq *rq;
+again:
+ rq = task_rq(p);
raw_spin_lock(&rq->lock);
raw_spin_lock(&rq->lock);
+ if (rq != task_rq(p)) {
+ /* Task was moved, retrying. */
+ raw_spin_unlock(&rq->lock);
+ goto again;
+ }
+
/*
* We need to take care of a possible races here. In fact, the
* task might have changed its scheduling policy to something
/*
* We need to take care of a possible races here. In fact, the
* task might have changed its scheduling policy to something