On Tue, 2007-06-26 at 09:50 +1000, Tony Breeds wrote:
> Updated to include feedback from Ben and Segher, also reposition the
> compare in the 64bit VDSO to catch all the references to tv.


> --- working.orig/arch/powerpc/kernel/vdso64/gettimeofday.S
> +++ working/arch/powerpc/kernel/vdso64/gettimeofday.S

<snippage>
> @@ -32,6 +31,8 @@ V_FUNCTION_BEGIN(__kernel_gettimeofday)
>       mr      r11,r3                  /* r11 holds tv */
>       mr      r10,r4                  /* r10 holds tz */
>       bl      V_LOCAL_FUNC(__get_datapage)    /* get data page */
> +     cmpldi  r10,0                   /* check if tv is NULL */

Whoops!    r10 holds tz value, not tv.   This should be r11.  

As is, a (64-bit) userspace app calling gettimeofday(&tv,NULL); will
"silently fail", and the application is left using whatever old data
happens to be in the tv structure.

This affected my G5 (gentoo), most noticable when apps like 'ping' and
nfs-mounts quit working properly.  :-) 

patch follows momentarily... 

> +     beq     2f
>       bl      V_LOCAL_FUNC(__do_get_xsec)     /* get xsec from tb & kernel */
>       lis     r7,15                   /* r7 = 1000000 = USEC_PER_SEC */
>       ori     r7,r7,16960
> @@ -43,8 +44,8 @@ V_FUNCTION_BEGIN(__kernel_gettimeofday)
>                                        * XSEC_PER_SEC
>                                        */
>       rldicl  r0,r0,44,20
> -     cmpldi  cr0,r10,0               /* check if tz is NULL */
>       std     r0,TVAL64_TV_USEC(r11)  /* store usec in tv */
> +2:   cmpldi  r10,0                   /* check if tz is NULL */
>       beq     1f
>       lwz     r4,CFG_TZ_MINUTEWEST(r3)/* fill tz */
>       lwz     r5,CFG_TZ_DSTTIME(r3)
> 
> Yours Tony
> 
>   linux.conf.au        http://linux.conf.au/ || http://lca2008.linux.org.au/
>   Jan 28 - Feb 02 2008 The Australian Linux Technical Conference!
> 
> _______________________________________________
> Linuxppc-dev mailing list
> Linuxppc-dev@ozlabs.org
> https://ozlabs.org/mailman/listinfo/linuxppc-dev

_______________________________________________
Linuxppc-dev mailing list
Linuxppc-dev@ozlabs.org
https://ozlabs.org/mailman/listinfo/linuxppc-dev

Reply via email to