gettimeofday seconds rollover problem?
Joel Sherrill
joel.sherrill at oarcorp.com
Mon Feb 27 16:18:14 UTC 2006
Eric Norum wrote:
> What's the current status of this?
Discussion stalled. Nothing committed AFAIK.
> 1) Have the 'volatile' additions to the _TOD_xxxxx variables been
> committed? I think that we all agree that this step is necessary.
I think we do all agree. Someone noted that any variable accessed and
potentially modified
between ISR Disable/Enable should also be volatile. By that logic, we
have more to add:
_Thread_Heir
_Thread_Do_post_task_switch_extension
_Thread_Dispatch_disable_level
_Priority_Major_bit_map
_Priority_Bit_map
_ISR_Nest_level
I think _Thread_Executing is OK since it only changes as a side-effect
of a subroutine call.
The contents of many chains change in ISRs so I think the fields in the
Chain_Node and
Chain_Control structures may need to be marked as volatile.
All of the above is based upon the statement that anything modified by
an ISR needs
to be volatile. Those are the most obviously critical items.
> 2) Are the "memory" barriers going to be added to the _ISR_Disable/
> Enable/Flash macros? If so, who's going to make and commit the
> changes? If not, are we sure that we are going to have correct code
> where they're used? It seems likely that any code protected by
> _ISR_Disable is going to be acting upon volatile variables but is it
> reasonable to assume that this will always force the compiler to
> generate the expected code?
I liked the suggestion that the memory barriers be added to the ISR
level wrappers not the
CPU specific implementations.
You noted that cc needed to be added to the m68k which has to be CPU
dependent.
> 3) Are the "memory" barriers going to be added to the
> _Thread_Dispatch_disable/enable macros? If so, by whom and why do
> the arguments against adding the barriers to the interrupt macros not
> apply here as well?
>
I think the memory barriers need to be added to those macros given the
argument. We don't want something
moved outside any critical section so we need to draw our own Maginot
Line. I hope ours works well though. :)
> This problem is important enough that it needs to be dealt with quickly.
Yes. I just don't know that we reached a consensus. I ended Friday
with the impression that some volatiles
and memory barriers would resolve the problem. The cc issue on the m68k
implementation was orthogonal
to the real problem.
Unless you or Till objects, I would prefer to take the cross-platform
patches from one of you two. I know
you two have multiple hardware platforms to test on.
Any CPU dependent patches to ISR disable/enable code which has been
identified as a side-effect of this
discussion needs to come from a CPU expert.
What is the oldest GCC version, this behavior has been observed in? Can
we verify that it does or does
not occur in a version prior to that? I was specifically ask this
question by a user offline and want to see
what we all know. They were on a project which locked down an old RTEMS
version
with a gcc 2.95 variant.
--joel
More information about the users
mailing list