* Byungchul Park <[email protected]> wrote:

> diff --git a/kernel/locking/semaphore.c b/kernel/locking/semaphore.c
> index b8120ab..6634b68 100644
> --- a/kernel/locking/semaphore.c
> +++ b/kernel/locking/semaphore.c
> @@ -130,13 +130,14 @@ EXPORT_SYMBOL(down_killable);
>  int down_trylock(struct semaphore *sem)
>  {
>       unsigned long flags;
> -     int count;
> +     int count = -1;
>  
> -     raw_spin_lock_irqsave(&sem->lock, flags);
> -     count = sem->count - 1;
> -     if (likely(count >= 0))
> -             sem->count = count;
> -     raw_spin_unlock_irqrestore(&sem->lock, flags);
> +     if (raw_spin_trylock_irqsave(&sem->lock, flags)) {
> +             count = sem->count - 1;
> +             if (likely(count >= 0))
> +                     sem->count = count;
> +             raw_spin_unlock_irqrestore(&sem->lock, flags);
> +     }

I still don't really like it: two parallel trylocks will cause one of them to 
fail 
- while with the previous code they would both succeed.

None of these changes are necessary with all the printk robustification 
changes/enhancements we talked about, right?

Thanks,

        Ingo

Reply via email to