kern_yield vs ukbd_yield

Andriy Gapon avg at FreeBSD.org
Thu Dec 15 23:06:04 UTC 2011


on 16/12/2011 00:56 Hans Petter Selasky said the following:
> On Thursday 15 December 2011 15:17:01 Andriy Gapon wrote:
>> Hmm... I looked at the history of ukbd.c (which I should have done from the
>> very start) and I see two relevant revisions:
>> http://svnweb.freebsd.org/base/head/sys/dev/usb/input/ukbd.c?r1=199816&r2=2
>> 03896&pathrev=203896
>> http://svnweb.freebsd.org/base/head/sys/dev/usb/input/ukbd.c?r1=223755&r2=
>> 223989&pathrev=223989
>>
>> So, first use of pause(9) was introduced to work around current broken
>> syscons polling mechanism.  Then pause(9) was replaced with the
>> hand-rolled yield to fix a problem at shutdown, which supposedly was
>> caused by times being stopped.
>>
>> None of the commits seems to be directly related to thread priorities. 
> 
> Not directly, but indirect. You know, if you pause thread 1 (which I thought 
> was thread 0), then other thread will get a chance to run.
> 
> It might also be that Giant is locked by syscons, and that unless you pause or 
> yield, then Giant will block other parts of USB, like the callback thread, 
> which is Giant locked for ukbd only to run.
> 
> Maybe that is the explanation?

Maybe.  Perhaps even.  But let me quote the commit messages just in case.

Commit message #1:
Detect when we are polling from kernel via cngetc() in the boot process and
reserve the keypresses so they do not get passed to syscons.

Commit message #2:
Fix for dump after shutdown with USB keyboard plugged in. It appears that the
system timer is stopped during shutdown and that the pause() statement in ukbd
causes infinite hang in this regard. The fix is to use mi_switch() instead of
pause() to do the required task switch to ensure that the required USB processes
get executed.

So the reason I asked the above question was that the issues that we are
discussing now were never mentioned before.  So if you know that those issue
really exist, then maybe it is worthwhile describing and documenting them in detail.
As you can see the commit messages mention neither thread priorities nor Giant,
instead they talk about other rather specific (and plausible) issues.

-- 
Andriy Gapon


More information about the freebsd-hackers mailing list