lkml.org 
[lkml]   [2020]   [Jul]   [18]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    SubjectRe: [PATCH v5 4/4] printk: use the lockless ringbuffer
    On Thu, Jul 09, 2020 at 03:29PM +0206, John Ogness wrote:
    > Replace the existing ringbuffer usage and implementation with
    > lockless ringbuffer usage. Even though the new ringbuffer does not
    > require locking, all existing locking is left in place. Therefore,
    > this change is purely replacing the underlining ringbuffer.
    >
    > Changes that exist due to the ringbuffer replacement:
    >
    > - The VMCOREINFO has been updated for the new structures.
    >
    > - Dictionary data is now stored in a separate data buffer from the
    > human-readable messages. The dictionary data buffer is set to the
    > same size as the message buffer. Therefore, the total required
    > memory for both dictionary and message data is
    > 2 * (2 ^ CONFIG_LOG_BUF_SHIFT) for the initial static buffers and
    > 2 * log_buf_len (the kernel parameter) for the dynamic buffers.
    >
    > - Record meta-data is now stored in a separate array of descriptors.
    > This is an additional 72 * (2 ^ (CONFIG_LOG_BUF_SHIFT - 5)) bytes
    > for the static array and 72 * (log_buf_len >> 5) bytes for the
    > dynamic array.
    >
    > Signed-off-by: John Ogness <john.ogness@linutronix.de>
    > Reviewed-by: Petr Mladek <pmladek@suse.com>

    It seems this causes a regression observed at least with newline-only
    printks. I noticed this during -next testing because various debugging
    tools (K*SAN, lockdep, etc.) use e.g. pr_{err,warn,info}("\n") to format
    reports.

    Without wanting to wait for a report from one of these debugging tools,
    a simple reproducer is below. Without this patch, the expected newline
    is printed.

    Thanks,
    -- Marco

    ------ >8 ------

    --- a/init/main.c
    +++ b/init/main.c
    @@ -1039,6 +1039,10 @@ asmlinkage __visible void __init start_kernel(void)
    sfi_init_late();
    kcsan_init();

    + pr_info("EXPECT BLANK LINE --vv\n");
    + pr_info("\n");
    + pr_info("EXPECT BLANK LINE --^^\n");
    +
    /* Do the rest non-__init'ed, we're now alive */
    arch_call_rest_init();

    \
     
     \ /
      Last update: 2020-07-18 14:11    [W:4.134 / U:0.196 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site