Index: sys/dev/random/random_harvestq.c =================================================================== --- sys/dev/random/random_harvestq.c +++ sys/dev/random/random_harvestq.c @@ -523,6 +523,12 @@ u_int ring_in; KASSERT(origin >= RANDOM_START && origin < ENTROPYSOURCE, ("%s: origin %d invalid\n", __func__, origin)); + + /* Do a very dirty check to avoid taking lock if not necessary */ + if (((harvest_context.hc_entropy_ring.in + 1) % RANDOM_RING_MAX) + == harvest_context.hc_entropy_ring.out) + return; + RANDOM_HARVEST_LOCK(); ring_in = (harvest_context.hc_entropy_ring.in + 1)%RANDOM_RING_MAX; if (ring_in != harvest_context.hc_entropy_ring.out) {