Thread (12 messages) 12 messages, 3 authors, 2002-05-23

ANK's PSCHED_TDIFF_SAFE change unmasked old bug (~0UL != 0xFFFFFFFF)

From: Martin Devera <hidden>
Date: 2002-05-16 13:52:43

quoted
even if tv1<tv2 which can be true when time wraps (which is true
at least with PSCHED_TIME_SOURCE == JIFFIES)
No, psched_time_t cannot wrap for our life.
Ok. It did. I looked for the reason and probably find another
bug. In all kernels (example given for 2.4.19pre8)
include/net/pkt_sched.h line 224:
#if ~0UL == 0xFFFFFFFF

this test delimits part which decides about PSCHED_WATCHER usage.
The test is FALSE on gcc:
gcc version 2.95.2 20000220 (Debian GNU/Linux)
gcc version egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)
gcc version 3.0.2

I tested by:
echo -e "#if ~0UL == 0xffffffff\nTST\n#endif"|gcc -E -
echo -e "#if ~0UL == 0xffffffffffffffff\nTST\n#endif"|gcc -E -

and the second line displays TST !!

So that the test is never TRUE and PSCHED_WATCHER is never used.
Thus psched_time_t wraps every 40 minutes and your change (althought
correct one) to PSCHED_TDIFF_SAFE made it more visible than before.

Probably the test should be changed. I'm not sure how. How to detect
that long is 64 bit in cpp ?

regards
devik
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help