From: Alexander <alexhoppus111@gmail.com>
To: Peter Hurley <peter@hurleysoftware.com>
Cc: yalin wang <yalin.wang2010@gmail.com>,
Arun KS <arunks.linux@gmail.com>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
Arun KS <getarunks@gmail.com>
Subject: Re: Why linux console designed to work in polling mode?
Date: Thu, 23 Jul 2015 08:54:03 +0300 [thread overview]
Message-ID: <20150723085403.bfb381dd5e4791fb3bec7258@gmail.com> (raw)
In-Reply-To: <55B00CF8.5070901@hurleysoftware.com>
Hi Peter,
I always know the oops enter point(?). Why i can't just switch to old mode (per char
busyloop) in this case and do things like in old console unlock?
Actually, i suspect that there might be some reliability problems with this deferred
stuff, but, actually, i can't come up with a test case (the only one - stuck on all
CPUs with disabled interrupts).
Thank you for respond.
On Wed, 22 Jul 2015 17:36:56 -0400
Peter Hurley <peter@hurleysoftware.com> wrote:
> Hi Alexander,
>
> On 07/22/2015 04:08 PM, Alexander wrote:
> > Hi. Thanks for respond.
> > Don't understand how this affects described logic (deferred printk).
> > Suppose you put bytes to UART FIFO in console_unlock() until you can,
> > after this up_console_sem and move forward. In UART interrupt you will
> > do the same thing: get char from log_buf, put into UART FIFO until it
> > will be full then break. How the fact that printk could be called from any context
> > interfere this? Other way round, this logic will eliminate busyloop
> > and decrease printk time significantly (including printk in interrupts etc)
> >> it is not easy to implement in a context that you can’t call any sleep function.
> > Deferred printing is done in UART interrupt, there is no need to sleep anywhere ...
>
> Here's an example kernel crash report on the serial console with 'deferred'
> serial output on typical 16550A h/w:
>
> [76330.588297] B
>
> That's not much to diagnose the crash with.
>
> Regards,
> Peter Hurley
>
> > On Wed, 22 Jul 2015 14:53:13 +0800
> > yalin wang <yalin.wang2010@gmail.com> wrote:
> >
> >>
> >>> On Jul 22, 2015, at 14:27, Arun KS <arunks.linux@gmail.com> wrote:
> >>>
> >>> When i checked how kernel printing works, i mentioned that it takes
> >>> messages from log_buffer in console_unlock and gives it to
> >>> call_console_drivers -> ...-> some uart bsp function. Basically, as i
> >>> see this BSP realization tries to flush all message chars in busyloop
> >>> ... so it waits until FIFO_NOT_FULL bit will be dropped by UART and it
> >>> will be able to push the next byte. Basically, as i see userspace
> >>> printing do something different. It puts N_FIFO_BYTES and exits, next,
> >>> when FIFO will be freed - interrupt will be generated, and other
> >>> characters will be put into UART FIFO.
> >>> Can we do something similar for kernel printing? i.e. do not busyloop
> >>> sending char after char, but put N_FIFO chars and flush other in
> >>> interrupt. When panic will occur we can do busyloop printing again. Is
> >>> it reliable? Suppose we have several cores.
> >>>
> >>>
> >>
> >> i think it is because printk is very different from other printf function in user space,
> >> printk() can be called in any context atomic / non- atomic / irq / soft-irq context ..
> >>
> >> so your bsp->print function can’t be sleep, can’t call any sleep functions .
> >>
> >> another reason is that in console_unlock() function, it call bas->print like this:
> >> call_console_drivers(level, ext_text, ext_len, text, len);
> >> print expect your bsp function print all the text as showed in parameters.
> >> and it doesn’t check the return value ,
> >> so if your driver doesn’t use POLL mode, you should only print N_FIFO_BYTES bytes,
> >> this need prink to check return value or need your bsp function to use some special method
> >> to send the remaining bytes after received FIFO empty interrupt.
> >> it is not easy to implement in a context that you can’t call any sleep function.
> >>
> >> Thanks
> >
>
--
Alexander <alexhoppus111@gmail.com>
prev parent reply other threads:[~2015-07-23 5:54 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-07-22 6:27 Why linux console designed to work in polling mode? Arun KS
2015-07-22 6:53 ` yalin wang
2015-07-22 20:08 ` Alexander
2015-07-22 21:36 ` Peter Hurley
2015-07-23 5:54 ` Alexander [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20150723085403.bfb381dd5e4791fb3bec7258@gmail.com \
--to=alexhoppus111@gmail.com \
--cc=arunks.linux@gmail.com \
--cc=getarunks@gmail.com \
--cc=linux-kernel@vger.kernel.org \
--cc=peter@hurleysoftware.com \
--cc=yalin.wang2010@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox