On Thu, 1 Nov 2012, Chuansheng Liu wrote:
> 
> Some posix clock interface directly use the variable rtcdev,
> cleanup it here by alarmtimer_get_rtcdev().
> 
> Signed-off-by: liu chuansheng <chuansheng....@intel.com>
> ---
>  kernel/time/alarmtimer.c |   13 ++++++-------
>  1 files changed, 6 insertions(+), 7 deletions(-)
> 
> diff --git a/kernel/time/alarmtimer.c b/kernel/time/alarmtimer.c
> index 4fc17cb..5490fa8 100644
> --- a/kernel/time/alarmtimer.c
> +++ b/kernel/time/alarmtimer.c
> @@ -86,11 +86,10 @@ static int alarmtimer_rtc_add_device(struct device *dev,
>               return -1;
>  
>       mutex_lock(&rtcdev_mutex);
> -     if (!rtcdev) {
> -             rtcdev = rtc;
> -             /* hold a reference so it doesn't go away */
> -             get_device(dev);
> -     }
> +     rtcdev = rtc;
> +     /* hold a reference so it doesn't go away */
> +     get_device(dev);
> +

Brilliant. 

rtcdev = NULL

CPU0                            CPU 1

alarmtimer_rtc_add_device(A)
        if (rtcdev)             alarmtimer_rtc_add_device(B)
             return -EBUSY;             if (rtcdev)
        mutex_lock();                           return -EBUSY;
        rtcdev = A;                     mutex_lock();   
        mutex_unlock;

bla = alarmtimer_rtc_get_device()

So bla = A
                                        mutex_lock() returns
                                        rtcdev = B;
                                        mutex_unlock();

The next call to alarmtimer_rtc_get_device() will return B. Not what
you want. Maybe you want that, but then your patch is missing an
explanation why you want that and why this would be a desired
behaviour.

Thanks,

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

Reply via email to