Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 2 Nov 2014 19:56:11 +0000
From:      Mark R V Murray <mark@grondar.org>
To:        Konstantin Belousov <kostikbel@gmail.com>
Cc:        "svn-src-head@freebsd.org" <svn-src-head@freebsd.org>, "svn-src-all@freebsd.org" <svn-src-all@freebsd.org>, "src-committers@freebsd.org" <src-committers@freebsd.org>
Subject:   Re: svn commit: r273958 - head/sys/dev/random
Message-ID:  <751CD860-95B9-4F68-AE69-976B42823AD0@grondar.org>
In-Reply-To: <20141102194625.GC53947@kib.kiev.ua>
References:  <201411020201.sA221unt091493@svn.freebsd.org> <720EB74E-094A-43F3-8B1C-47BC7F6FECC3@grondar.org> <1414934579.17308.248.camel@revolution.hippie.lan> <6FB65828-6A79-4BDE-A9F7-BC472BA538CE@grondar.org> <CAJ-VmomeOwE3LOpehhJ__G=FCoBDRXrrn%2BSfjwPFODts6YYHNQ@mail.gmail.com> <20141102192057.GB53947@kib.kiev.ua> <29A795E1-19E2-49E4-9653-143D3F6F3F12@grondar.org> <20141102194625.GC53947@kib.kiev.ua>

next in thread | previous in thread | raw e-mail | index | archive | help

> On 2 Nov 2014, at 19:46, Konstantin Belousov <kostikbel@gmail.com> =
wrote:
>=20
>> I don???t quite follow what you mean, but it sounds like you =
understand
>> the problem. Could you please explain with a bit more detail?
>=20
> Which problem ? There are two.
>=20
> One is the Adrian' complain. tsleep(9) catches signals, and return
> EINTR/ERESTART when catched.  Typical driver code checks for the
> errors from {t,m}sleep(9) and aborts the operation if error is
> returned.  I.e. you should do
> 	error =3D tsleep(...);
> 	if (error !=3D 0) {
> 		abort the loop;
> 		return to caller;
> 	}
> The fine detail is that for the case when read has already partially
> progressed, i.e. something was copied out to uio, the error must
> not be returned, but short read performed instead.

OK, I think I follow this.

In another mail you say:
> Yes, this is because error from tsleep() in random_adaptor_read()
> does not abort the loop.  But next loop iteration calls tsleep()
> which returns immediately since there is still pending signal.
> The process continues indefinitely.

.. which supports this what you say further above. Thanks.

> This leads to another question about the code in =
random_adapter_read():
> if ra_read method sleeps, it must handle the signals as well, return
> error, and the second loop which perorms ra_read/uiomove should be
> aborted as well.  Again, error from either ra_read or uiomove(9)
> must result in short read if something was already copied to uio.
> Currently, there is no error returned by ra_read (or it is ignored),
> and error from uiomove always returned, even if something was already
> copied.

Are you saying the same thing again, or something else? If you are =
saying
something else, then I am struggling to follow you.

> Second problem is that random_adaptor_lock is owned while tsleep()
> is called (or whatever sleep primitive is used inside ra_read).  If
> platform could only provide randomness through some hw, and module
> is loaded while thread is blocked, module cannot register, while
> reading thread cannot make progress.

I=E2=80=99m sorry, I don=E2=80=99t understand this.

M
--=20
Mark R V Murray




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?751CD860-95B9-4F68-AE69-976B42823AD0>