svn commit: r356194 - head/sys/dev/random

Mateusz Guzik mjguzik at gmail.com
Mon Dec 30 04:48:15 UTC 2019


On 12/30/19, Conrad Meyer <cem at freebsd.org> wrote:
> Author: cem
> Date: Mon Dec 30 01:38:19 2019
> New Revision: 356194
> URL: https://svnweb.freebsd.org/changeset/base/356194
>
> Log:
>   random(4): Make entropy source deregistration safe
>
>   Allow loadable modules that provide random entropy source(s) to safely
>   unload.  Prior to this change, no driver could ensure that their
>   random_source structure was not being used by random_harvestq.c for any
>   period of time after invoking random_source_deregister().
>
>   This change converts the source_list LIST to a ConcurrencyKit CK_LIST and
>   uses an epoch(9) to protect typical read accesses of the list.  The
> existing
>   HARVEST_LOCK spin mutex is used to safely add and remove list entries.
>   random_source_deregister() uses epoch_wait() to ensure no concurrent
>   source_list readers are accessing a random_source before freeing the list
>   item and returning to the caller.
>
>   Callers can safely unload immediately after random_source_deregister()
>   returns.
>

What's the point of using epoch for this one instead of rmlocks?

rmlocks have the upshot of being faster single-threaded for the case you
want (no fences).

epoch would make sense if the list was expected to change over time,

-- 
Mateusz Guzik <mjguzik gmail.com>


More information about the svn-src-all mailing list