From owner-svn-src-all@freebsd.org Wed Jul 31 03:40:35 2019 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id E948EB4185; Wed, 31 Jul 2019 03:40:35 +0000 (UTC) (envelope-from bdrewery@FreeBSD.org) Received: from freefall.freebsd.org (freefall.freebsd.org [96.47.72.132]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) server-signature RSA-PSS (4096 bits) client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "freefall.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id AB51C8C3FC; Wed, 31 Jul 2019 03:40:35 +0000 (UTC) (envelope-from bdrewery@FreeBSD.org) Received: from mail.xzibition.com (unknown [127.0.1.132]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by freefall.freebsd.org (Postfix) with ESMTPS id 54BFBF70; Wed, 31 Jul 2019 03:40:35 +0000 (UTC) (envelope-from bdrewery@FreeBSD.org) Received: from mail.xzibition.com (localhost [172.31.3.2]) by mail.xzibition.com (Postfix) with ESMTP id 60F871296C; Wed, 31 Jul 2019 03:40:34 +0000 (UTC) X-Virus-Scanned: amavisd-new at mail.xzibition.com Received: from mail.xzibition.com ([172.31.3.2]) by mail.xzibition.com (mail.xzibition.com [172.31.3.2]) (amavisd-new, port 10026) with LMTP id 5mhQ1lvOEaZl; Wed, 31 Jul 2019 03:40:30 +0000 (UTC) Subject: Re: svn commit: r350005 - head/sys/kern DKIM-Filter: OpenDKIM Filter v2.10.3 mail.xzibition.com 4511512964 To: Konstantin Belousov Cc: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org References: <201907151918.x6FJIPFo077975@repo.freebsd.org> <20190730231256.GL2731@kib.kiev.ua> <20190730232714.GM2731@kib.kiev.ua> From: Bryan Drewery Openpgp: preference=signencrypt Autocrypt: addr=bdrewery@FreeBSD.org; prefer-encrypt=mutual; keydata= mQENBFJphmsBCADiFgmS4bIzwZijrS31SjEMzg+n5zNellgM+HkShwehpqCiyhXdWrvH6dTZ a6u50pbUIX7doTR7W7PQHCjCTqtpwvcj0eulZva+iHFp+XrbgSFHn+VVXgkYP2MFySyZRFab D2qqzJBEJofhpv4HvY6uQI5K99pMqKr1Z/lHqsijYYu4RH2OfwB5PinId7xeldzWEonVoCr+ rfxzO/UrgA6v/3layGZcKNHFjmc3NqoN1DXtdaEHqtjIozzbndVkH6lkFvIpIrI6i5ox8pwp VxsxLCr/4Musd5CWgHiet5kSw2SzNeA8FbxdLYCpXNVu+uBACEbCUP+CSNy3NVfEUxsBABEB AAG0JEJyeWFuIERyZXdlcnkgPGJkcmV3ZXJ5QEZyZWVCU0Qub3JnPokBVwQTAQoAQQIbAwUL CQgHAwUVCgkICwUWAwIBAAIeAQIXgAIZARYhBPkXPLLDqup6XIofCTXXcbtuRpfPBQJb5hLu BQkNPvODAAoJEDXXcbtuRpfP9rMH/3f7cfX5rzyEV5QNfV/wS4jFukLoPZ4+nCM/TKxH3pEX 2bLbeQbkk6La8cueQ5Lpoht5XFZ18Y5TbMittngltrlNzoDD0h9are24OkDFGim3afJU7tkj IGQa1if+re+vI5BhzYwRhj0oKXzBi39M5oePd3L1dXfx83rg2FPyZBdIejsz6fR74T3JVkbd 6k2l5/3Zk2uiNMy+eBfDRgYE1E6CP28kV0nCeGKZgSVso0kGUUHud7voKqGVpMvbd0mE4pp4 PE5YJaFPjrll9miaDAvdU8LGIq5n6+aXPLKoQ/QNl6mg6ifgI6FfKILOkTizLW8E5PBSNnCm NapQ55yjm125AQ0EUmmGawEIAKJUU9+Q19oW1RK5jTf3m56j+szIc8Y9DaLC8REUKl4UZJBK BqCl6c0cukVApOD92XoU6hJPm2rLEyp/IcYcPPNTnVu8D8h9oag2L8EiFN7+2hk0xG+lwjc8 uOIZycme7AIJsBU4AZ1v63lxm2k104hwpiatgbe71GIGl7p1MX6ousP/wGzXCOF25Dx9w02C eRe7zEMfhnFjSUhzdCC9han2+KaVB7qIqNR3b8NfbwRNlwPmHqlhXffUow9OsQjSnTK8WKNR lx7xzVccXIvWP2wECFrmqmzMmXpSrmIuiWEpFwZ9x2a0Pva8dCNRiCVTK51IlRXKjaAxiN1u IUrMm6UAEQEAAYkBJQQYAQoADwUCUmmGawIbDAUJCWYBgAAKCRA113G7bkaXz1Q+CADaYZCn bzIJQqwnoocVXL+Wkd+hCsoX6zsd8pNTY5tV5U1fgjxl1bVQ7jyZGrEQ7BjyvlhIfpfTo6aK oJfZpIxeDc3Tr+X7O2UHT5QYaWRcGO+X3+eKL5sLpvxda67RftClv2hgEr1i2hqjK5WmUCaN 2P9w+i7rmZ4ohpLXINOMeHjnQOtbxCCF7qXRsVfgEcpNKb31T3QwvsRjX0HqIjYFlKpa61Wz IPvWgBERjo0aAOkI4g7oVLjX5Z5gINGPy+xr8GJqhfZ3ZIEOwLCwTB71+Dk9gyLa5UiG8vo6 vGfA50H5OSC87LnNlI07b1Qb8mKVkqg13PbCkRpTMKEYaou9iQElBBgBCgAPAhsMBQJa6M4o BQkKYHs9AAoJEDXXcbtuRpfPpuQH/0d1RHcTTAHAyHrPQA4UMqH49tEj1d3gidx2ETnm00rj XTrnRreAAMgPCrPeLvYYiKeSBrHOkQ7E/Vuztr4F4Xenld3omOTon+cSyGKyA1btWNRskcUa zxJ/0DqgzerhWQj8CtWjmqRnGAqzvZQdIDLk1X4B2p1Ota4AvbTF9DqADskXfld/zPJQzYYy XRfyKTt0nWMyn5MHbsuKmpsOBqYXMf0X2EL2C6v3g5D/HedD6YVnW6KlgcDUR2sq6Fv9Ozhs 38TOXyeZgbFz0HDtkHEY5Mh3+sQjOh4takC+Dp1zDRP2U19JZzo9f6R/d05c0h2TD02oogPz AQ97xrFwZgaJATwEGAEKACYCGwwWIQT5Fzyyw6rqelyKHwk113G7bkaXzwUCW+YS+AUJDT7z jQAKCRA113G7bkaXzwo3B/4rwbDqXaXm6YC4s0jVOf1+MljeQIsbHPVQZ0IRigCpzCDSUFTK QOebA9iUj8JaF2DPwd6sjyUUv/XMCLl+SwzSijmVN0Kfk85XspzNef8XmteKK1mERkYnLWBw TNwp6qezg/CukNbobNH08ciT+z2fxtPuwqK5X9Q5R4Q7egth5XUTxbwLwIJerEfVs4HG+687 m9h1bWyYJemB24MgBu8fTaVxas8dSSwDHabdgyGMKIvqDHUUJQSMDbio0Iwhs7lx2p3Xd5Br wQLMiaUPnKBHqfVM8ADWldvHF6xa9keBUjnEedKwQNjYf76lGH6bLwbyZcLigKFdXY1R2ooT Xi+R Organization: FreeBSD Message-ID: <5d3ffe05-58f3-ea26-13ed-51cdcd1deeaa@FreeBSD.org> Date: Tue, 30 Jul 2019 20:40:28 -0700 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.13; rv:60.0) Gecko/20100101 Thunderbird/60.8.0 MIME-Version: 1.0 In-Reply-To: <20190730232714.GM2731@kib.kiev.ua> Content-Type: multipart/signed; micalg=pgp-sha256; protocol="application/pgp-signature"; boundary="hwljxk2k8uM2tHhElvSoAgtwMvoOhwLgC" X-Rspamd-Queue-Id: AB51C8C3FC X-Spamd-Bar: ------ Authentication-Results: mx1.freebsd.org X-Spamd-Result: default: False [-6.95 / 15.00]; NEURAL_HAM_MEDIUM(-1.00)[-0.999,0]; NEURAL_HAM_SHORT(-0.95)[-0.951,0]; REPLY(-4.00)[]; NEURAL_HAM_LONG(-1.00)[-1.000,0] X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 31 Jul 2019 03:40:36 -0000 This is an OpenPGP/MIME signed message (RFC 4880 and 3156) --hwljxk2k8uM2tHhElvSoAgtwMvoOhwLgC Content-Type: multipart/mixed; boundary="p9Fqr5lLFAnCGEL5t8G4mRlXehaxggNpR"; protected-headers="v1" From: Bryan Drewery To: Konstantin Belousov Cc: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Message-ID: <5d3ffe05-58f3-ea26-13ed-51cdcd1deeaa@FreeBSD.org> Subject: Re: svn commit: r350005 - head/sys/kern References: <201907151918.x6FJIPFo077975@repo.freebsd.org> <20190730231256.GL2731@kib.kiev.ua> <20190730232714.GM2731@kib.kiev.ua> In-Reply-To: <20190730232714.GM2731@kib.kiev.ua> --p9Fqr5lLFAnCGEL5t8G4mRlXehaxggNpR Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: quoted-printable On 7/30/19 4:27 PM, Konstantin Belousov wrote: > On Wed, Jul 31, 2019 at 02:13:02AM +0300, Konstantin Belousov wrote: >> On Tue, Jul 30, 2019 at 03:04:57PM -0700, Bryan Drewery wrote: >>> On 7/15/2019 12:18 PM, Konstantin Belousov wrote: >>>> Author: kib >>>> Date: Mon Jul 15 19:18:25 2019 >>>> New Revision: 350005 >>>> URL: https://svnweb.freebsd.org/changeset/base/350005 >>>> >>>> Log: >>>> In do_sem2_wait(), balance umtx_key_get() with umtx_key_release() = on retry. >>>> =20 >>> >>> Is this also needed in do_sem_wait()? A similar pattern seems to be t= here. >> No, I do not think do_sem_wait() has similar issue, because the again = label >> does not re-get the key. >> >>> >>> I ask because of what I referenced on IRC. I have some processes stuc= k >>> in here from a 10.4 jail. >>> >>>> ~/git/poudriere # procstat -kk 1498 >>>> PID TID COMM TDNAME KSTACK >>>> 1498 100710 python2.7 - mi_switch+0x174= sleepq_switch+0x110 sleepq_catch_signals+0x417 sleepq_wait_sig+0xf _slee= p+0x2d0 umtxq_sleep+0x153 do_sem_wait+0x42c __umtx_op_sem_wait+0x6e amd64= _syscall+0x2bb fast_syscall_common+0x101 >>>> 1498 101575 python2.7 - mi_switch+0x174= sleepq_switch+0x110 sleepq_catch_signals+0x417 sleepq_wait_sig+0xf _slee= p+0x2d0 umtxq_sleep+0x153 do_sem_wait+0x42c __umtx_op_sem_wait+0x6e amd64= _syscall+0x2bb fast_syscall_common+0x101 >>>> 1498 101657 python2.7 - >>> ... >>>> ~/git/poudriere # procstat -kk 1498 >>>> PID TID COMM TDNAME KSTACK >>>> 1498 100710 python2.7 - mi_switch+0x174= sleepq_switch+0x110 sleepq_catch_signals+0x417 sleepq_wait_sig+0xf _slee= p+0x2d0 umtxq_sleep+0x153 do_sem_wait+0x42c __umtx_op_sem_wait+0x6e amd64= _syscall+0x2bb fast_syscall_common+0x101 >>>> 1498 101575 python2.7 - mi_switch+0x174= sleepq_switch+0x110 sleepq_catch_signals+0x417 sleepq_wait_sig+0xf _slee= p+0x2d0 umtxq_sleep+0x153 do_sem_wait+0x42c __umtx_op_sem_wait+0x6e amd64= _syscall+0x2bb fast_syscall_common+0x101 >>>> 1498 101657 python2.7 - do_sem_wait+0x1= b6 __umtx_op_sem_wait+0x6e amd64_syscall+0x2bb fast_syscall_common+0x101 >>> ... >>>> ~/git/poudriere # procstat -kk 94392 >>>> PID TID COMM TDNAME KSTACK >>>> 94392 101815 python2.7 - mi_switch+0x174= sleepq_switch+0x110 sleepq_catch_signals+0x417 sleepq_wait_sig+0xf _slee= p+0x2d0 umtxq_sleep+0x153 do_sem_wait+0x42c __umtx_op_sem_wait+0x6e amd64= _syscall+0x2bb fast_syscall_common+0x101 >>>> 94392 101816 python2.7 - __mtx_lock_slee= p+0x118 __mtx_lock_flags+0x102 _sleep+0x334 umtxq_busy+0xb7 do_sem_wait+0= x161 __umtx_op_sem_wait+0x6e amd64_syscall+0x2bb fast_syscall_common+0x10= 1 >>>> 94392 102076 python2.7 - __mtx_lock_flag= s+0x94 do_sem_wait+0x228 __umtx_op_sem_wait+0x6e amd64_syscall+0x2bb fast= _syscall_common+0x101 >> >> Try this. We should only retry casueword if it failed spuriously. >> >> diff --git a/sys/kern/kern_umtx.c b/sys/kern/kern_umtx.c >> index bb998457975..6c914ab6f3e 100644 >> --- a/sys/kern/kern_umtx.c >> +++ b/sys/kern/kern_umtx.c >> @@ -3229,7 +3229,8 @@ do_sem_wait(struct thread *td, struct _usem *sem= , struct _umtx_time *timeout) >> rv =3D casueword32(&sem->_has_waiters, 0, &count1, 1); >> if (rv =3D=3D 0) >> rv1 =3D fueword32(&sem->_count, &count); >> - if (rv =3D=3D -1 || (rv =3D=3D 0 && (rv1 =3D=3D -1 || count !=3D 0))= || rv =3D=3D 1) { >> + if (rv =3D=3D -1 || (rv =3D=3D 0 && (rv1 =3D=3D -1 || count !=3D 0))= || >> + (rv =3D=3D 1 && count1 =3D=3D 0)) { >> umtxq_lock(&uq->uq_key); >> umtxq_unbusy(&uq->uq_key); >> umtxq_remove(uq); >=20 > I think there is another problem, since even despite our intent of loop= ing > just because of casueword returned 1, the umtxq_check_susp() should hav= e > terminated the loop. I believe the following update would fix that. >=20 > If you have time, can you please apply only the umtxq_check_susp() chun= k > and see if it helps as well ? [Both chunks are needed for correctness, = but > the umtxq_check_susp() is almost impossible to test in combination] >=20 > diff --git a/sys/kern/kern_umtx.c b/sys/kern/kern_umtx.c > index bb998457975..08bdd1a1a9a 100644 > --- a/sys/kern/kern_umtx.c > +++ b/sys/kern/kern_umtx.c > @@ -723,13 +723,11 @@ umtxq_check_susp(struct thread *td, bool sleep) > error =3D 0; > p =3D td->td_proc; > PROC_LOCK(p); > - if (P_SHOULDSTOP(p) || > - ((p->p_flag & P_TRACED) && (td->td_dbgflags & TDB_SUSPEND))) { > - if (p->p_flag & P_SINGLE_EXIT) > - error =3D EINTR; > - else > - error =3D sleep ? thread_suspend_check(0) : ERESTART; > - } > + if (p->p_flag & P_SINGLE_EXIT) > + error =3D EINTR; > + else if (P_SHOULDSTOP(p) || > + ((p->p_flag & P_TRACED) && (td->td_dbgflags & TDB_SUSPEND))) > + error =3D sleep ? thread_suspend_check(0) : ERESTART; > PROC_UNLOCK(p); > return (error); > } > @@ -3229,7 +3227,8 @@ do_sem_wait(struct thread *td, struct _usem *sem,= struct _umtx_time *timeout) > rv =3D casueword32(&sem->_has_waiters, 0, &count1, 1); > if (rv =3D=3D 0) > rv1 =3D fueword32(&sem->_count, &count); > - if (rv =3D=3D -1 || (rv =3D=3D 0 && (rv1 =3D=3D -1 || count !=3D 0)) = || rv =3D=3D 1) { > + if (rv =3D=3D -1 || (rv =3D=3D 0 && (rv1 =3D=3D -1 || count !=3D 0)) = || > + (rv =3D=3D 1 && count1 =3D=3D 0)) { > umtxq_lock(&uq->uq_key); > umtxq_unbusy(&uq->uq_key); > umtxq_remove(uq); >=20 This 2nd change alone (&& count1 =3D=3D 0) was sufficient to fix the endl= ess loop problem. I am not sure how to test the umtxq_check_susp() change. Do I just need to ptrace the process? --=20 Regards, Bryan Drewery --p9Fqr5lLFAnCGEL5t8G4mRlXehaxggNpR-- --hwljxk2k8uM2tHhElvSoAgtwMvoOhwLgC Content-Type: application/pgp-signature; name="signature.asc" Content-Description: OpenPGP digital signature Content-Disposition: attachment; filename="signature.asc" -----BEGIN PGP SIGNATURE----- iQEzBAEBCAAdFiEE+Rc8ssOq6npcih8JNddxu25Gl88FAl1BDa0ACgkQNddxu25G l88UyAgAogITg3i08Cm7qOU4PKiomYEzSFl4ErRIe96narAXCBgPEA4V2/M9uiQv 5vVC37MB+BuBw8dbGASgnbaTEcL8GRxbt+t98fIoaTMC4BtqR6+gWPlKVn+T2YTa wkeLcfXI4yqW2haD4J5WFFfhUDgqeT79H1arufggpHnUM/tE8LjPujIQrSFAA3A5 ZFCyvFa7FxgFCNn1R3UDgbQ3dLnqPBn6mISfJyneYuo8IS5tZhMZI+0XuEz0lAnC /h4c4/Q11xyOqm6hZX07YcfzKVIyGBHTDrpKeykBIqLSMXqOfx0wNDR72ZhLIDny 0RMIja7p0YpULDsLhR5eFSuAyNLGVg== =hLC5 -----END PGP SIGNATURE----- --hwljxk2k8uM2tHhElvSoAgtwMvoOhwLgC--