Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 3 Nov 2014 04:08:41 +0100
From:      Mateusz Guzik <mjguzik@gmail.com>
To:        Xin LI <delphij@FreeBSD.org>
Cc:        svn-src-head@freebsd.org, svn-src-all@freebsd.org, src-committers@freebsd.org
Subject:   Re: svn commit: r273997 - head/sys/dev/random
Message-ID:  <20141103030841.GB29497@dft-labs.eu>
In-Reply-To: <201411022330.sA2NUpr8004713@svn.freebsd.org>
References:  <201411022330.sA2NUpr8004713@svn.freebsd.org>

next in thread | previous in thread | raw e-mail | index | archive | help
On Sun, Nov 02, 2014 at 11:30:51PM +0000, Xin LI wrote:
> Author: delphij
> Date: Sun Nov  2 23:30:50 2014
> New Revision: 273997
> URL: https://svnweb.freebsd.org/changeset/base/273997
> 
> Log:
>    - Make sure random_adaptor accesses happen only when
>      random_adaptors_lock is held.
>    - Use sx_sleep instead of tsleep in read and write path to allow
>      another thread that registers a new random adapter when waiting.
>      Assert that random_adaptor is not NULL after reacquiring the lock.
>    - Capture EINTR/ERESTART from sx_sleep to allow the blocking cycle be
>      stopped when user requests so, while there also make short
>      read/write's return 0.
>    - Move M_WAITOK allocations out of lock scope.
>   
>   In collobration with:	kib, markm, ian, jilles
>   Reviewed by:	kib, markm
>   Approved by:	so
> 
> Modified:
>   head/sys/dev/random/random_adaptors.c
> 

> @@ -269,6 +275,8 @@ random_adaptor_read_rate(void)
>  {
>  	int ret;
>  
> +	sx_assert(&random_adaptors_lock, SA_LOCKED);
> +
>  	KASSERT(random_adaptor != NULL, ("No active random adaptor in %s", __func__));
>  
>  	mtx_lock(&random_read_rate_mtx);

This panics with:
panic: Lock (sx) random_adaptors not locked @
/usr/src/sys/dev/random/random_adaptors.c:278.
cpuid = 0
KDB: stack backtrace:
db_trace_self_wrapper() at db_trace_self_wrapper+0x2b/frame
0xfffffe02e7fe4940
kdb_backtrace() at kdb_backtrace+0x39/frame 0xfffffe02e7fe49f0
vpanic() at vpanic+0x189/frame 0xfffffe02e7fe4a70
kassert_panic() at kassert_panic+0x139/frame 0xfffffe02e7fe4ae0
witness_assert() at witness_assert+0x32a/frame 0xfffffe02e7fe4b40
random_adaptor_read_rate() at random_adaptor_read_rate+0x23/frame
0xfffffe02e7fe4b60
live_entropy_sources_feed() at live_entropy_sources_feed+0x2a/frame
0xfffffe02e7fe4b90

Quick look suggests these asserts can be removed since random_read_rate_mtx
protects stuff.

-- 
Mateusz Guzik <mjguzik gmail.com>



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