gettimeofday seconds rollover problem?

Thomas Doerfler (nt) Thomas.Doerfler at imd-systems.de
Tue Feb 28 07:23:19 UTC 2006


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Pavel,

Pavel Pisa schrieb:
> 
> Excuse me for question, but can be performance problem discussed there.
> "memory" should not affect local variables and parameters cached
> in registers. Only cached values of global variables and data obtained
> through pointers are discarded. Should not be so big problem.
> 
> As for m68k and "cc", I think, that the real bug is in "rtems/score/m68k.h":
> 
> #define m68k_enable_interrupts( _level ) \
>   asm volatile ( "move.w  %0,%%sr " : : "d" (_level));
> 
> This construct clobbers flags and it is required to inform GCC
> about that. The "cc" has to be there
> 
> #define m68k_enable_interrupts( _level ) \
>   asm volatile ( "move.w  %0,%%sr " : : "d" (_level): "cc");

Yes, I would like to see this aswell.

> 
> Linux kernel folks are convinced that "memory" is OK there.
> The Linux uses only these primitives in all IRQ defines for i386 for example:
> 
> __asm__ __volatile__("pushl %0 ; popfl": /* no output */ :"g" (x):"memory", "cc")
> __asm__ __volatile__("cli": : :"memory")
> __asm__ __volatile__("sti": : :"memory")
> 
> Each time with "memory".
> 
> If there is problem with performance, than I suggest to define
> volatile access macros to mark problematic pieces of the code
> 
> #define AS_VOLATILE(x) (*(typeof(&(x)))(&(x)))
> 
> This says, that exactly this access could should be protected
> against move around other volatile constructs.
> 
>   loc_var=AS_VOLATILE(*glob_var_ptr)
>   loc_var=AS_VOLATILE(glob_var)
> 
>   AS_VOLATILE(*glob_var_ptr)=loc_var

Shouldn't it be something like this:

#define AS_VOLATILE(x) (*(volatile typeof(&(x)))(&(x)))

Apart from the missing "volatile", I think this construct has nice
features. It will mark, which accesses are really required to be "safe".
The disadvantage is, that all the locations using
interrupt_disable/enable are required to be revised.

Therefore I would tend again to use the "memory barrier" method as it is
more robust (with the disadvantage of loosing some performance).

wkr,
Thomas.

>   AS_VOLATILE(glob_var)=loc_var

> 
> But again, I do not think, that it is good to propagate
> volatile to the other code. It start to spread into
> lists and other structures. If there is really
> some busy loop code waiting for global variable change,
> than barrier should be in the loop. If ordering is required
> again memory barrier or explicit volatile or atomic
> accesses are required.
> 
> I hope, that I am not too much off good sense
> with my thoughts there.
> 
> Best wishes
> 
>             Pavel Pisa


- --
- --------------------------------------------
IMD Ingenieurbuero fuer Microcomputertechnik
Thomas Doerfler           Herbststrasse 8
D-82178 Puchheim          Germany
email:    Thomas.Doerfler at imd-systems.de
PGP public key available at:
     http://www.imd-systems.de/pgpkey_en.html
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.5 (MingW32)
Comment: Using GnuPG with Thunderbird - http://enigmail.mozdev.org

iD8DBQFEA/plwHyg4bDtfjQRArSpAJ4x7laAO2JDMrz/ga9dlgA1Mvvv3ACeJafP
ugL2uJ97USfbFjvVrz1geNw=
=2G8C
-----END PGP SIGNATURE-----



More information about the users mailing list