svn commit: r338542 - head/sys/dev/random
Xin LI
delphij at FreeBSD.org
Sun Sep 9 17:12:32 UTC 2018
Author: delphij
Date: Sun Sep 9 17:12:31 2018
New Revision: 338542
URL: https://svnweb.freebsd.org/changeset/base/338542
Log:
random(4): Squash non-error timeout codes from tsleep(9).
In both scenarios a timeout (EWOULDBLOCK) is considered as a
normal condition and the error should not pop up to upper layers.
PR: 231181
Submitted by: cem
Reported by: lev
Reviewed by: vangyzen, markm, delphij
Approved by: re (kib)
Approved by: secteam (delphij)
Differential Revision: https://reviews.freebsd.org/D17049
Modified:
head/sys/dev/random/randomdev.c
Modified: head/sys/dev/random/randomdev.c
==============================================================================
--- head/sys/dev/random/randomdev.c Sun Sep 9 07:20:15 2018 (r338541)
+++ head/sys/dev/random/randomdev.c Sun Sep 9 17:12:31 2018 (r338542)
@@ -156,6 +156,10 @@ READ_RANDOM_UIO(struct uio *uio, bool nonblock)
error = tsleep(&random_alg_context, PCATCH, "randseed", hz/10);
if (error == ERESTART || error == EINTR)
break;
+ /* Squash tsleep timeout condition */
+ if (error == EWOULDBLOCK)
+ error = 0;
+ KASSERT(error == 0, ("unexpected tsleep error %d", error));
}
if (error == 0) {
read_rate_increment((uio->uio_resid + sizeof(uint32_t))/sizeof(uint32_t));
@@ -184,9 +188,13 @@ READ_RANDOM_UIO(struct uio *uio, bool nonblock)
* uninterruptible syscalls.
*/
if (error == 0 && uio->uio_resid != 0 &&
- total_read % sigchk_period == 0)
+ total_read % sigchk_period == 0) {
error = tsleep_sbt(&random_alg_context, PCATCH,
"randrd", SBT_1NS, 0, C_HARDCLOCK);
+ /* Squash tsleep timeout condition */
+ if (error == EWOULDBLOCK)
+ error = 0;
+ }
}
if (error == ERESTART || error == EINTR)
error = 0;
More information about the svn-src-all
mailing list