On Wed, 2 May 2007, Ingo Molnar wrote:
* Balbir Singh <[email protected]> wrote:
The problem is with comparing a s64 values with (s64)ULONG_MAX, which
evaluates to -1. Then we check if exec_delta64 and fair_delta64 are
greater than (s64)ULONG_MAX (-1), if so we assign (s64)ULONG_MAX to
the respective values.
ah, indeed ...
The fix is to compare these values against (s64)LONG_MAX and assign
(s64)LONG_MAX to exec_delta64 and fair_delta64 if they are greater
than (s64)LONG_MAX.
Tested on PowerPC, the regression is gone, tasks are load balanced as
they were in v7.
thanks, applied!
Ingo
I have been wondering why you use usigned for timers anyway. It is also
like that in hrtimers. Why not use signed and avoid (almost) all worries
about wrap around issues. The trick is that when all
a < b
is be replaced by
a - b < 0
the code will work on all 2-complement machines even if the (signed!)
integers a and b wrap around.
In both the hrtimer and CFS patch 32 bit timers could be used internally
on 32 bit architectures to avoid expensive 64 bit integer calculations.
The only thing is: timeouts can not be bigger than 2^31 in the chosen
units.
I have successfully coded a (much more primitive) hrtimer system for
another OS on both ARM and PPC using the above trick in my former job.
On both I used the machine's internal clock as the internal
representation of time and I only scaled to a struct timespec in the user
interface.
Esben
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
[Index of Archives]
[Kernel Newbies]
[Netfilter]
[Bugtraq]
[Photo]
[Stuff]
[Gimp]
[Yosemite News]
[MIPS Linux]
[ARM Linux]
[Linux Security]
[Linux RAID]
[Video 4 Linux]
[Linux for the blind]
[Linux Resources]