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
This commit is contained in:
parent
7877f59352
commit
7a8d266139
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=338542
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user