• Luis R. Rodriguez's avatar
    printk: make dynamic kernel ring buffer alignment explicit · 70300177
    Luis R. Rodriguez authored
    We have to consider alignment for the ring buffer both for the default
    static size, and then also for when an dynamic allocation is made when
    the log_buf_len=n kernel parameter is passed to set the size
    specifically to a size larger than the default size set by the
    architecture through CONFIG_LOG_BUF_SHIFT.
    
    The default static kernel ring buffer can be aligned properly if
    architectures set CONFIG_LOG_BUF_SHIFT properly, we provide ranges for
    the size though so even if CONFIG_LOG_BUF_SHIFT has a sensible aligned
    value it can be reduced to a non aligned value.  Commit 6ebb017d
    ("printk: Fix alignment of buf causing crash on ARM EABI") by Andrew
    Lunn ensures the static buffer is always aligned and the decision of
    alignment is done by the compiler by using __alignof__(struct log).
    
    When log_buf_len=n is used we allocate the ring buffer dynamically.
    Dynamic allocation varies, for the early allocation called before
    setup_arch() memblock_virt_alloc() requests a page aligment and for the
    default kernel allocation memblock_virt_alloc_nopanic() requests no
    special alignment, which in turn ends up aligning the allocation to
    SMP_CACHE_BYTES, which is L1 cache aligned.
    
    Since we already have the required alignment for the kernel ring buffer
    though we can do better and request explicit alignment for LOG_ALIGN.
    This does that to be safe and make dynamic allocation alignment
    explicit.
    Signed-off-by: default avatarLuis R. Rodriguez <mcgrof@suse.com>
    Tested-by: default avatarPetr Mladek <pmladek@suse.cz>
    Acked-by: default avatarPetr Mladek <pmladek@suse.cz>
    Cc: Andrew Lunn <andrew@lunn.ch>
    Cc: Stephen Warren <swarren@wwwdotorg.org>
    Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Cc: Michal Hocko <mhocko@suse.cz>
    Cc: Petr Mladek <pmladek@suse.cz>
    Cc: Joe Perches <joe@perches.com>
    Cc: Arun KS <arunks.linux@gmail.com>
    Cc: Kees Cook <keescook@chromium.org>
    Cc: Davidlohr Bueso <davidlohr@hp.com>
    Cc: Chris Metcalf <cmetcalf@tilera.com>
    Cc: Jan Kara <jack@suse.cz>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    70300177
printk.c 74.7 KB