svn commit: r326237 - head/sys/kern

Mateusz Guzik mjguzik at gmail.com
Sun Nov 26 21:14:39 UTC 2017


On Sun, Nov 26, 2017 at 10:10 PM, Mateusz Guzik <mjg at freebsd.org> wrote:

> Author: mjg
> Date: Sun Nov 26 21:10:47 2017
> New Revision: 326237
> URL: https://svnweb.freebsd.org/changeset/base/326237
>
> Log:
>   rw: fix runlock_hard when new readers show up
>
>   When waiters/writer spinner flags are set no new readers can show up
> unless
>   they already have a different rw rock read locked. The change in r326195
> failed
>   to take that into account - in presence of new readers it would spin
> until
>   they all drain, which would be lead to trouble if e.g. they go off cpu
> and
>   can get scheduled because of this thread.
>
>
Now that's an amazingly bad commit message. Typos and whatnot aside,
I of course meant they *can't* get on the cpu. The thread in runlock slow
path holds a spinlock and loops with it.


>   Reported by:  pho
>
> Modified:
>   head/sys/kern/kern_rwlock.c
>
> Modified: head/sys/kern/kern_rwlock.c
> ============================================================
> ==================
> --- head/sys/kern/kern_rwlock.c Sun Nov 26 20:30:02 2017        (r326236)
> +++ head/sys/kern/kern_rwlock.c Sun Nov 26 21:10:47 2017        (r326237)
> @@ -769,6 +769,11 @@ __rw_runlock_hard(struct rwlock *rw, struct thread *td
>                 turnstile_chain_lock(&rw->lock_object);
>                 v = RW_READ_VALUE(rw);
>  retry_ts:
> +               if (__predict_false(RW_READERS(v) > 1)) {
> +                       turnstile_chain_unlock(&rw->lock_object);
> +                       continue;
> +               }
> +
>                 v &= (RW_LOCK_WAITERS | RW_LOCK_WRITE_SPINNER);
>                 MPASS(v & RW_LOCK_WAITERS);
>
> _______________________________________________
> svn-src-all at freebsd.org mailing list
> https://lists.freebsd.org/mailman/listinfo/svn-src-all
> To unsubscribe, send any mail to "svn-src-all-unsubscribe at freebsd.org"
>



-- 
Mateusz Guzik <mjguzik gmail.com>


More information about the svn-src-all mailing list