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

Ian Lepore ian at FreeBSD.org
Sun Nov 2 20:53:06 UTC 2014


On Sun, 2014-11-02 at 12:27 -0800, Xin Li wrote:
> -----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,
> - -- 

It still doesn't handle the partial read/write case Kostik mentioned,
but there are plenty of other drivers that don't get that right.  Given
that the ra_read/ra_write functions can't return error, it would only be
errors from uiomove() in play.  I guess it would be something like this:

	nbytes = uio->uio_resid;
	while (uio->uio_resid && !error) {
		c = MIN(uio->uio_resid, PAGE_SIZE);
		(random_adaptor->ra_read)(random_buf, c);
		error = uiomove(random_buf, c, uio);
	}
	if (uio->uio_resid != nbytes)
		error = 0; /* Return partial read, not error. */

Also, there's now a mix of if (error == 0) and if (!error) near each
other (I tend to prefer using ! only on boolean_t, but I even more
prefer local consistancy. :)

-- Ian




More information about the svn-src-all mailing list