svn commit: r273958 - head/sys/dev/random
Xin Li
delphij at delphij.net
Sun Nov 2 20:27:41 UTC 2014
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA512
Hi, Mark,
I'd like to propose the attached patch for review. It replaces
tsleep's with sx_sleep's, then checks the return value and quit the loop.
Cheers,
- --
Xin LI <delphij at delphij.net> https://www.delphij.net/
FreeBSD - The Power to Serve! Live free or die
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2.0
iQIcBAEBCgAGBQJUVpO0AAoJEJW2GBstM+nsTcoQAKQglUQUKCh4h+flynK+of1J
I8pyCJTqkJHsvQu7Lj8Nh4gd6OQM3+XdpEGymA/wB1Q906cNI8ieLwuXCOmCxYhw
xs2XJL5cyp1myDqCp3BRrNta8PPSF8gxfnCeU/0LuItrvcNaE3axNb/eu4g3u5s7
NZObx84C03uRoHMz+9qG0qkZbutY/qN8YP3DQ1WvkYom/i4UT2NGa1EgHLYa9Ofu
REQ/lADumxqn5Cw6viKym1wI1HrCu00X602jGjivEzn1L7DSfKFJjckyLC2IbbdY
Ydy4ejsILJRPFDt6PrcSWkaSBIy585wP90YsFvSK4riyy1i3HUF4pE5wQPPG/ogV
ATm4S9GZgr4mM3SHZrcaTDyrm9BEsEizqBs/F3yyuKBqZt0xtTjv+tupCN5AG1LX
DnfgLj7pNAW2SIF7lul34/CzisoKB7b5oEpL9YWOh8DvZiEgHMex4nRqTNAt9T8F
7f5bGvcMHfkIOQIUanxlganUW2ZgVaDPYQADjrEsfqD2pTwwK7glN0jXKJ9YStGW
kzbjAQil9X/fliVSzPubbO0XTqAtjnPwONBbjw06vlrwZlkHbLOTz0VVZ3cAJcei
4CkCiEQtuFWbD9QVCUe6snztRRTI542dIlWSDPhSxYV3+hrkCgCeJ3fMvTutf7YZ
ejIPZ/NOkhddVmvjMHKw
=XrYs
-----END PGP SIGNATURE-----
-------------- next part --------------
Index: sys/dev/random/random_adaptors.c
===================================================================
--- sys/dev/random/random_adaptors.c (revision 273982)
+++ sys/dev/random/random_adaptors.c (working copy)
@@ -217,7 +217,7 @@ random_adaptor_read(struct cdev *dev __unused, str
/* (Un)Blocking logic */
error = 0;
- while (!random_adaptor->ra_seeded()) {
+ while (!random_adaptor->ra_seeded() && error == 0) {
if (flags & O_NONBLOCK) {
error = EWOULDBLOCK;
break;
@@ -224,7 +224,8 @@ random_adaptor_read(struct cdev *dev __unused, str
}
/* Sleep instead of going into a spin-frenzy */
- tsleep(&random_adaptor, PUSER | PCATCH, "block", hz/10);
+ error = sx_sleep(&random_adaptor, &random_adaptors_lock,
+ PUSER | PCATCH, "block", hz/10);
/* keep tapping away at the pre-read until we seed/unblock. */
(random_adaptor->ra_read)(NULL, 0);
@@ -298,7 +299,7 @@ random_adaptor_write(struct cdev *dev __unused, st
random_buf = malloc(PAGE_SIZE, M_ENTROPY, M_WAITOK);
- while (uio->uio_resid > 0) {
+ while (uio->uio_resid > 0 && error == 0) {
c = MIN(uio->uio_resid, PAGE_SIZE);
error = uiomove(random_buf, c, uio);
if (error)
@@ -306,7 +307,8 @@ random_adaptor_write(struct cdev *dev __unused, st
(random_adaptor->ra_write)(random_buf, c);
/* Introduce an annoying delay to stop swamping */
- tsleep(&random_adaptor, PUSER | PCATCH, "block", hz/10);
+ error = sx_sleep(&random_adaptor, &random_adaptors_lock,
+ PUSER | PCATCH, "block", hz/10);
}
free(random_buf, M_ENTROPY);
-------------- next part --------------
A non-text attachment was scrubbed...
Name: random-tsleep.diff.sig
Type: application/octet-stream
Size: 543 bytes
Desc: not available
URL: <http://lists.freebsd.org/pipermail/svn-src-head/attachments/20141102/162eaf23/attachment.obj>
More information about the svn-src-head
mailing list