Hey Richard, and others,

I am currently implementing a timecounter setup for a device which
(nominally) represents time as

Field1: 32bits, Seconds
Field2: 32bits, Nanoseconds (never > 999,999,999)

I do the math to convert this to u64 nanoseconds, and provide this to a
cycle counter.

The trouble is that the u64 field "overflows" at an arbitrary number,
not at a potential mask value.

Since seconds value will overflow at 0xFFFFFFFF, the nanoseconds u64
field overflows at

0xFFFFFFFF*(0d1000000000) + 0d999999999 or 3B9AC9FFFFFFFFFF which is not
a mask-able value.

It overflows somewhete between (2^61)-1 and (2^62)-1.. That is, 2^61-1
is a valid value, but (2^62)-1 is not.

I am trying to determine what mask I can use for this. If I use 64,
obviously I will get an incorrect value.

I believe that I have to use the mask as 41 bits, which is the maximum
value that it can actually hold that consistently overflows at the same
location.

I think the timecounter code is actually incorrect, because it doesn't
allow for arbitrary overflow points....

I tried it out at using 61, and it really didn't look right.. But I
don't really like the idea that I have to mask all the way down to 41
bits.

Any suggestions or thoughts on the timecounter stuff?

Regards,
Jake
------------------------------------------------------------------------------
Dive into the World of Parallel Programming The Go Parallel Website, sponsored
by Intel and developed in partnership with Slashdot Media, is your hub for all
things parallel software development, from weekly thought leadership blogs to
news, videos, case studies, tutorials and more. Take a look and join the 
conversation now. http://goparallel.sourceforge.net/
_______________________________________________
Linuxptp-devel mailing list
Linuxptp-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linuxptp-devel

Reply via email to