Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 24 Mar 2016 16:09:51 +0200
From:      Alexander Motin <mavbsd@gmail.com>
To:        =?UTF-8?B?SmVhbi1Tw6liYXN0aWVuIFDDqWRyb24=?= <jean-sebastien.pedron@dumbbell.fr>, Ian Lepore <ian@freebsd.org>,  src-committers@freebsd.org, svn-src-all@freebsd.org,  svn-src-head@freebsd.org
Subject:   Re: svn commit: r297190 - head/sys/kern
Message-ID:  <56F3F52F.9040705@gmail.com>
In-Reply-To: <20160324134222.GA1442@brick.home>
References:  <201603221346.u2MDk1XH029623@repo.freebsd.org> <1458662141.1091.16.camel@freebsd.org> <56F29654.8030806@dumbbell.fr> <20160323174537.GA1826@brick.home> <56F3B441.6030602@dumbbell.fr> <20160324134222.GA1442@brick.home>

next in thread | previous in thread | raw e-mail | index | archive | help
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



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?56F3F52F.9040705>