Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 22 Nov 2017 22:15:48 -0500
From:      Shawn Webb <shawn.webb@hardenedbsd.org>
To:        Mateusz Guzik <mjg@FreeBSD.org>
Cc:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   Re: svn commit: r326110 - head/sys/kern
Message-ID:  <20171123031548.rd5vmsgghsmuvjs4@mutt-hbsd>
In-Reply-To: <201711222352.vAMNq5Bh071788@repo.freebsd.org>
References:  <201711222352.vAMNq5Bh071788@repo.freebsd.org>

next in thread | previous in thread | raw e-mail | index | archive | help

--cgmojfw26kqwmzra
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable

On Wed, Nov 22, 2017 at 11:52:05PM +0000, Mateusz Guzik wrote:
> Author: mjg
> Date: Wed Nov 22 23:52:05 2017
> New Revision: 326110
> URL: https://svnweb.freebsd.org/changeset/base/326110
>=20
> Log:
>   rwlock: don't check for curthread's read lock count in the fast path
>=20
> Modified:
>   head/sys/kern/kern_rwlock.c
>=20
> Modified: head/sys/kern/kern_rwlock.c
> =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D
> --- head/sys/kern/kern_rwlock.c	Wed Nov 22 23:10:20 2017	(r326109)
> +++ head/sys/kern/kern_rwlock.c	Wed Nov 22 23:52:05 2017	(r326110)
> @@ -364,12 +364,20 @@ _rw_wunlock_cookie(volatile uintptr_t *c, const cha=
r *
>   * is unlocked and has no writer waiters or spinners.  Failing otherwise
>   * prioritizes writers before readers.
>   */
> -#define	RW_CAN_READ(td, _rw)						\
> -    (((_rw) & (RW_LOCK_READ | RW_LOCK_WRITE_WAITERS | RW_LOCK_WRITE_SPIN=
NER)) =3D=3D\
> -    RW_LOCK_READ || ((td)->td_rw_rlocks && (_rw) & RW_LOCK_READ))
> +static bool __always_inline
> +__rw_can_read(struct thread *td, uintptr_t v, bool fp)
> +{
> =20
> +	if ((v & (RW_LOCK_READ | RW_LOCK_WRITE_WAITERS | RW_LOCK_WRITE_SPINNER))
> +	    =3D=3D RW_LOCK_READ)
> +		return (true);
> +	if (!fp && td->td_rw_rlocks && (v & RW_LOCK_READ))
> +		return (true);
> +	return (false);
> +}

This bit of the patch breaks buildkernel. You left a consumer of
RW_CAN_READ on line 554: MPASS(!RW_CAN_READ(td, v));

Thanks,

--=20
Shawn Webb
Cofounder and Security Engineer
HardenedBSD

GPG Key ID:          0x6A84658F52456EEE
GPG Key Fingerprint: 2ABA B6BD EF6A F486 BE89  3D9E 6A84 658F 5245 6EEE

--cgmojfw26kqwmzra
Content-Type: application/pgp-signature; name="signature.asc"

-----BEGIN PGP SIGNATURE-----

iQIzBAEBCAAdFiEEKrq2ve9q9Ia+iT2eaoRlj1JFbu4FAloWPWIACgkQaoRlj1JF
bu5Lfg/9Fv0BENwM2MgPc7RQnzn9wvjQzFVWrXq+oWHZJ4SQtutULA6epLvX3psG
JXt9HeOkPP5GqKA92LUO06kb9NAenZe8EsrkjL/J09KLVjS7Xa8qSw+B56uBIXeW
kv1+ufv3uCN9Q4mxVbNmbwLryuwKKuZxSvIFjo2a+Zmu5G5dObF3w9JALl8K74KU
cNQXlzaMQ8tLxRhtwaiGTSi7yB/pXdwg0B6WfLvLz5YVrH1XDkq7Zvl793bl+a7G
O+TOF00R8vTYYb0KQpGQn8knfrTpdQc/5nDAnm4XoMtpl1/uW+3utcNqMGYd9Hbk
vwPC9e4EOUZw1sVFzjDs0zRxuZ+7zQ6Dlo319gnM41RqPPyLH6HcrErNL3Fq5WPk
8f3lAyVU7TjUxztvzDpP1CZmYgLOBzi9gdK8byLiuQCBe7WqhE7ThXwrWaQHpYrs
/s8jvdb5wGur3WFi1vXWHboxfIRI/tnv6c6QFt7fMVFUDa2pPC4I6d9u6bmI7eKM
jBw126iBuum05yp8HARfoSDWkd89iZ9Wb1Y/sXhNQ3mnHkHdVVunZI26620ikvF3
yfHjXmHkY5kChpiJmJ+bOfjPQ0TLr6CR/S0clFfqvQUVNGBGxJ3ZceA+uLkgS4k+
VQ+liQ8q+x1y+KuHcN04ol271wmbnua7Wd4BsZQ7uBP5mID2QX4=
=W5Wx
-----END PGP SIGNATURE-----

--cgmojfw26kqwmzra--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20171123031548.rd5vmsgghsmuvjs4>