Hi! 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. Thank you. -- Alexander <alexhoppus111@gmail.com>
Hello Alexander, On Sat, Jul 18, 2015 at 11:23 AM, Alexander <alexhoppus111@gmail.com> wrote:
Hi! 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. Thank you.
What about trying this patch, https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/kerne... Its not changing console printing through UART to interrupt mode. But minimizes the time interrupts being disabled on printk(). Thanks, Arun
-- Alexander <alexhoppus111@gmail.com>
_______________________________________________ Kernelnewbies mailing list Kernelnewbies@kernelnewbies.org http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies
Hi Arun KS, Actually, i already saw this one and something similar were tested. I just trying to figure out the reasons why generic kernel layer (console_unlock) implemented in such way: i.e. why it accounts on immediate busyloop printing? Is it reliable to defer such printing to UART interrupts? Thank you. On Mon, 20 Jul 2015 09:34:16 +0530 Arun KS <getarunks@gmail.com> wrote:
Hello Alexander,
On Sat, Jul 18, 2015 at 11:23 AM, Alexander <alexhoppus111@gmail.com> wrote:
Hi! 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. Thank you.
What about trying this patch, https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/kerne...
Its not changing console printing through UART to interrupt mode. But minimizes the time interrupts being disabled on printk().
Thanks, Arun
-- Alexander <alexhoppus111@gmail.com>
_______________________________________________ Kernelnewbies mailing list Kernelnewbies@kernelnewbies.org http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies
-- Alexander <alexhoppus111@gmail.com>
Hello Alexander, On Wed, Jul 22, 2015 at 11:08 AM, Alexander <alexhoppus111@gmail.com> wrote:
Hi Arun KS, Actually, i already saw this one and something similar were tested. I just trying to figure out the reasons why generic kernel layer (console_unlock) implemented in such way: i.e. why it accounts on immediate busyloop printing? Is it reliable to defer such printing to UART interrupts?
Lets try to find out why it is done the way it is. My guess is "it makes printk simple and robust". Because if interrupts are blocked, console should not fail giving the critical information. To change this behavior, we have to change the complete logic in the prink code to adjust with that. Because as of now printk code expects serial drivers returns only after finishing the job. Thanks, Arun
Thank you.
On Mon, 20 Jul 2015 09:34:16 +0530 Arun KS <getarunks@gmail.com> wrote:
Hello Alexander,
On Sat, Jul 18, 2015 at 11:23 AM, Alexander <alexhoppus111@gmail.com> wrote:
Hi! 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. Thank you.
What about trying this patch,
https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/kerne...
Its not changing console printing through UART to interrupt mode. But minimizes the time interrupts being disabled on printk().
Thanks, Arun
-- Alexander <alexhoppus111@gmail.com>
_______________________________________________ Kernelnewbies mailing list Kernelnewbies@kernelnewbies.org http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies
-- Alexander <alexhoppus111@gmail.com>
participants (2)
-
Alexander -
Arun KS