From owner-freebsd-hackers@freebsd.org Thu Feb 28 21:46:17 2019 Return-Path: Delivered-To: freebsd-hackers@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 19C60151A75E for ; Thu, 28 Feb 2019 21:46:17 +0000 (UTC) (envelope-from marklmi@yahoo.com) Received: from sonic303-22.consmr.mail.ne1.yahoo.com (sonic303-22.consmr.mail.ne1.yahoo.com [66.163.188.148]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 887EF8AD60 for ; Thu, 28 Feb 2019 21:46:16 +0000 (UTC) (envelope-from marklmi@yahoo.com) X-YMail-OSG: 8kxB3nYVM1kBOQtOEtPR3odYJ_0nZ_nrZUVL6HZ.74dh9izCUPgbpiEhTXh3WHZ YFefPes4x_6YiI3_CrDGU6k2vPKA8lpFOvU4MFaGg42RwJpAWtbhUzG5PkrPKel61b4XufkqqPom fcCmrEK0BmS.AK_Z1z1CKA.VSqB25WcxHn9VnUCusp08xQIjpTLPBttSVkg5x45nFthW.3tphtML IuWHyeGTx9Qb1Ifhu7JVOYlf_jORM5rWXt1m.IvwWJRXtBsutNBdMOpUdfNx9rGjfyEL1YzWbXPp kcYaYvykvlGYDVQuWnejnFTKavkBwkribzNi.mRwlU2Kz1Lrmw7vXalUwzgHZ9GaV0k3lnCniOBN k0q21ptC66I4aFTyMM7X48Te9Exm.bpv.nqLreatvU_4xN3T0zwiYfztOh99RYWsAxmIZz7HHSiX 7p9KV5vGrKrlQC09Nlq.9UsSPeh86KlcRSsvhmRkj.lz0CnE0MVJ8G6kgxclAgJTewSbc6oZkKmo 1kwuSnh23Dlya.llvQpkPDEH6fb3v1ZqrKeToSwNt27Otbnu7nemRkbE1QFIoRxSJsjLFO_9hIHn tfTJOIgE7W6JEHAOWhqMaVe5_1WZJ9v741aHMsM3G3ujbVl4iqvwMoFIbjv6.HiqKD35pYRfstO6 xia8IQtF825sLt8uWaxXCxlxG0_Odzh8t49KD19TGupd14.ywmdfrCf3vKzXTPyg7kPKF3MWNtr0 PGqtH3dzg7030Jp2mADQRvTMLP..EaIZzNuwhyuBN0eHf2uTeupelgb8.5pI73QaovznbxQeGLvn I0JoynI2MuBmQwiefcIoEHEubBjfYx7CT6wghCvXtnJs3I11CPRSO_WIeDlVHZ2QmW5Sq3iqFemt YN_dnaNXgsuHUXuApv0J16p2RfEkJQCWq57AoAZyqjFn982MR7OKYwM8UwHjQ41MJMwJr0.4L.85 qM2ICSJ.OPqNvnbfFNj9JzW46evGyUjs4W4SqiiDttYcFDaTHAkmxF6sKq_DoGiac7BJMdfP78.E NBhgq066CM3bWvN.Kjq6tWCSBkSiSEbvw1PhLfq3KhOd6H5.6hAGLiWXnctQaWsylJHSzLSxK3w- - Received: from sonic.gate.mail.ne1.yahoo.com by sonic303.consmr.mail.ne1.yahoo.com with HTTP; Thu, 28 Feb 2019 21:46:14 +0000 Received: from c-67-170-167-181.hsd1.or.comcast.net (EHLO [192.168.1.113]) ([67.170.167.181]) by smtp426.mail.ne1.yahoo.com (Oath Hermes SMTP Server) with ESMTPA ID 4664458328c716d9daee1a813f76f6e2; Thu, 28 Feb 2019 21:46:12 +0000 (UTC) Content-Type: text/plain; charset=us-ascii Mime-Version: 1.0 (Mac OS X Mail 12.2 \(3445.102.3\)) Subject: Re: powerpc64 head -r344018 stuck sleeping problems: th->th_scale * tc_delta(th) overflows unsigned 64 bits sometimes From: Mark Millard In-Reply-To: <20190228150811.GU2420@kib.kiev.ua> Date: Thu, 28 Feb 2019 13:46:11 -0800 Cc: freebsd-hackers Hackers , FreeBSD PowerPC ML Content-Transfer-Encoding: quoted-printable Message-Id: <0A345E1F-7675-4B4B-8A74-ACD59E90E72F@yahoo.com> References: <20190228145542.GT2420@kib.kiev.ua> <20190228150811.GU2420@kib.kiev.ua> To: Konstantin Belousov X-Mailer: Apple Mail (2.3445.102.3) X-Rspamd-Queue-Id: 887EF8AD60 X-Spamd-Bar: ------ X-Spamd-Result: default: False [-6.99 / 15.00]; NEURAL_HAM_MEDIUM(-1.00)[-1.000,0]; NEURAL_HAM_LONG(-1.00)[-1.000,0]; REPLY(-4.00)[]; NEURAL_HAM_SHORT(-0.99)[-0.994,0] X-BeenThere: freebsd-hackers@freebsd.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Technical Discussions relating to FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 28 Feb 2019 21:46:17 -0000 On 2019-Feb-28, at 07:08, Konstantin Belousov = wrote: > On Thu, Feb 28, 2019 at 04:55:42PM +0200, Konstantin Belousov wrote: >> On Thu, Feb 28, 2019 at 05:06:23AM -0800, Mark Millard via = freebsd-ppc wrote: >>> . . . >>=20 >> . . . >=20 > Of course I botched the formula, please try this instead: >=20 > diff --git a/sys/kern/kern_tc.c b/sys/kern/kern_tc.c > index 2656fb4d22f..fdd4f4f6a52 100644 > --- a/sys/kern/kern_tc.c > +++ b/sys/kern/kern_tc.c > @@ -355,13 +355,22 @@ void > binuptime(struct bintime *bt) > { > struct timehands *th; > - u_int gen; > + uint64_t scale, x; > + u_int delta, gen; >=20 > do { > th =3D timehands; > gen =3D atomic_load_acq_int(&th->th_generation); > *bt =3D th->th_offset; > - bintime_addx(bt, th->th_scale * tc_delta(th)); > + scale =3D th->th_scale; > + delta =3D tc_delta(th); > + if (fls(scale) + fls(delta) > 63) { > + x =3D (scale >> 32) * delta; > + scale &=3D UINT_MAX; The following two lines confuse me overall: > + bt->sec +=3D x >> 32; > + bintime_addx(bt, x << 32); bintime_addx does: static __inline void bintime_addx(struct bintime *_bt, uint64_t _x) { uint64_t _u; _u =3D _bt->frac; _bt->frac +=3D _x; if (_u > _bt->frac) _bt->sec++; } So I'd expect: bintime_addx(bt, x << 32) to find _u > _bt->frac and to also do _bt->sec++ . So overall (as a means of summarizing for bt->sec): bt->sec +=3D (x >> 32) + 1; Is that the intent? > + } > + bintime_addx(bt, scale * delta); > atomic_thread_fence_acq(); > } while (gen =3D=3D 0 || gen !=3D th->th_generation); > } > @@ -388,13 +397,22 @@ void > bintime(struct bintime *bt) > { > struct timehands *th; > - u_int gen; > + uint64_t scale, x; > + u_int delta, gen; >=20 > do { > th =3D timehands; > gen =3D atomic_load_acq_int(&th->th_generation); > *bt =3D th->th_bintime; > - bintime_addx(bt, th->th_scale * tc_delta(th)); > + scale =3D th->th_scale; > + delta =3D tc_delta(th); > + if (fls(scale) + fls(delta) > 63) { > + x =3D (scale >> 32) * delta; > + scale &=3D UINT_MAX; The same for the below two lines: > + bt->sec +=3D x >> 32; > + bintime_addx(bt, x << 32); > + } > + bintime_addx(bt, scale * delta); > atomic_thread_fence_acq(); > } while (gen =3D=3D 0 || gen !=3D th->th_generation); > } >=20 =3D=3D=3D Mark Millard marklmi at yahoo.com ( dsl-only.net went away in early 2018-Mar)