svn commit: r297190 - head/sys/kern

Alexander Motin mavbsd at gmail.com
Thu Mar 24 14:09:56 UTC 2016


On 24.03.16 15:42, Edward Tomasz Napierała wrote:
> On 0324T1032, Jean-Sébastien Pédron wrote:
>> On 23/03/2016 18:45, Edward Tomasz Napierala wrote:
>>>> So maybe callouts are disabled in this situation. If there is a way to
>>>> detect that, then vt(4) can go back to a "synchronous mode" where it
>>>> refreshes the screen after each typed character, like it does when ddb
>>>> is active.
>>>
>>> Looks like that's the case: for some reason the callouts don't work.
>>> This trivial hack is a (mostly) working workaround:
>>>
>>> Index: svn/head/sys/kern/kern_cons.c
>>> ===================================================================
>>> --- svn/head/sys/kern/kern_cons.c	(revision 297210)
>>> +++ svn/head/sys/kern/kern_cons.c	(working copy)
>>> @@ -430,6 +430,7 @@ cngets(char *cp, size_t size, int visible)
>>>  	lp = cp;
>>>  	end = cp + size - 1;
>>>  	for (;;) {
>>> +		pause("meh", 1);
>>
>> Could you please explain how this works to me? Does calling pause() here
>> give a chance to interrupt handlers or other threads of running?
> 
> It looks like it allows the callout to run.  I've did an experiment
> and added a simple callout that printed something each second; during
> the root mount prompt it doesn't get run unless you type '.', which
> calls pause(9).

Kernel threads run with absolute priorities, so if somehow this threads
happen to have higher or equal priority then callout thread, or the
kernel is built without PREEMPTION, then the last may never be executed
until this thread get to sleep or at least call sched_yield().

-- 
Alexander Motin


More information about the svn-src-all mailing list