Re: [PATCH 2/2] sched_rt: protect rt_rq->rt_time by rt_runtime_lock
From: Hiroshi Shimamoto
Date: Thu Feb 05 2009 - 19:07:00 EST
Peter Zijlstra wrote:
> 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.
OK. I just noticed rt_time is accessed with rt_runtime_lock held except
this point. Will look at this again.
Thanks,
Hiroshi
>
>> 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/
>
--
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/