Re: [PATCH 2/2] sched_rt: protect rt_rq->rt_time by rt_runtime_lock

From: Peter Zijlstra
Date: Thu Feb 05 2009 - 18:59:23 EST


On Thu, 2009-02-05 at 15:38 -0800, Hiroshi Shimamoto wrote:
> From: Hiroshi Shimamoto <h-shimamoto@xxxxxxxxxxxxx>
>
> Impact: fix possible race condition
>
> rt_rq->rt_time should be protected.

Don't think so, all we do is check the value for non-zero outside the
lock, that should be ok.

If there's still a race, your changelog utterly fails to mention the
race scenario.

> Signed-off-by: Hiroshi Shimamoto <h-shimamoto@xxxxxxxxxxxxx>
> ---
> 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);

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/