Re: powerpc64 head -r344018 stuck sleeping problems: th->th_scale * tc_delta(th) overflows unsigned 64 bits sometimes [patched failed]

Mark Millard via freebsd-ppc <[email protected]>
Newsgroups gmane.os.freebsd.devel.ppc,gmane.os.freebsd.devel.hackers
Message-ID <[email protected]>
A basic question and a small note.

Question's context for it tc->tc_get_timecount(tc) values: 

In the powerpc64 context tc->tc_get_timecount(tc) is the lower
32 bits of the tbr, in my context having a 33,333,333 MHz or so
increment rate for a machine with a 2.5 GHz or so clock rate.
The truncated 32 bit tbr value wraps every 128 seconds or so.
2 sockets, 2 cores per socket, so 4 separate tbr values.

The question is . . .

In tc_delta's:

    tc->tc_get_timecount(tc) - th->th_offset_count

is observing tc->tc_get_timecount(tc) < th->th_offset_count
ever supposed to be possible in correct operation, other than
tc->tc_get_timecount(tc) having wrapped around (and so being 
newly 0 or "near" 0, no evidence of of having it having been
near 128 seconds or more for my context)?


The note:

On 2019-Mar-7, at 14:22, Konstantin Belousov <[email protected]> wrote:

> . . .
> +
> +	if (__predict_false(delta < large_delta)) {

I thought that delta<large_delta was the non-overflow context
for scale*delta and that the overflow case for the multiplication
was when delta>=large_delta .

> +		/* Avoid overflow for scale * delta. */
> +		x = (scale >> 32) * delta;
> +		bt->sec += x >> 32;
> +		bintime_addx(bt, x << 32);
> +		bintime_addx(bt, (scale & 0xffffffff) * delta);
> +	} else {
> +		bintime_addx(bt, scale * delta);
> +	}
> . . .

===
Mark Millard
marklmi at yahoo.com
( dsl-only.net went
away in early 2018-Mar)

_______________________________________________
[email protected] mailing list
https://lists.freebsd.org/mailman/listinfo/freebsd-ppc
To unsubscribe, send any mail to "[email protected]"
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.