Messages in this thread Patch in this message | | | Date | Thu, 05 Feb 2009 15:38:10 -0800 | From | Hiroshi Shimamoto <> | Subject | [PATCH 2/2] sched_rt: protect rt_rq->rt_time by rt_runtime_lock |
| |
From: Hiroshi Shimamoto <h-shimamoto@ct.jp.nec.com>
Impact: fix possible race condition
rt_rq->rt_time should be protected.
Signed-off-by: Hiroshi Shimamoto <h-shimamoto@ct.jp.nec.com> --- kernel/sched_rt.c | 4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/kernel/sched_rt.c b/kernel/sched_rt.c index 299d012..d7654a3 100644 --- a/kernel/sched_rt.c +++ b/kernel/sched_rt.c @@ -496,10 +496,10 @@ static int do_sched_rt_period_timer(struct rt_bandwidth *rt_b, int overrun) struct rq *rq = rq_of_rt_rq(rt_rq); spin_lock(&rq->lock); + spin_lock(&rt_rq->rt_runtime_lock); if (rt_rq->rt_time) { u64 runtime; - spin_lock(&rt_rq->rt_runtime_lock); if (rt_rq->rt_throttled) balance_runtime(rt_rq); runtime = rt_rq->rt_runtime; @@ -510,9 +510,9 @@ static int do_sched_rt_period_timer(struct rt_bandwidth *rt_b, int overrun) } if (rt_rq->rt_time || rt_rq->rt_nr_running) idle = 0; - spin_unlock(&rt_rq->rt_runtime_lock); } else if (rt_rq->rt_nr_running) idle = 0; + spin_unlock(&rt_rq->rt_runtime_lock); if (enqueue) sched_rt_rq_enqueue(rt_rq); -- 1.6.1.2
| |