Commit c0a318a3 authored by Luis R. Rodriguez's avatar Luis R. Rodriguez Committed by Linus Torvalds
Browse files

printk: move power of 2 practice of ring buffer size to a helper

In practice the power of 2 practice of the size of the kernel ring
buffer remains purely historical but not a requirement, specially now
that we have LOG_ALIGN and use it for both static and dynamic
allocations.  It could have helped with implicit alignment back in the
days given the even the dynamically sized ring buffer was guaranteed to
be aligned so long as CONFIG_LOG_BUF_SHIFT was set to produce a
__LOG_BUF_LEN which is architecture aligned, since log_buf_len=n would
be allowed only if it was > __LOG_BUF_LEN and we always ended up
rounding the log_buf_len=n to the next power of 2 with
roundup_pow_of_two(), any multiple of 2 then should be also architecture
aligned.  These assumptions of course relied heavily on
CONFIG_LOG_BUF_SHIFT producing an aligned value but users can always
change this.

We now have precise alignment requirements set for the log buffer size
for both static and dynamic allocations, but lets upkeep the old
practice of using powers of 2 for its size to help with easy expected
scalable values and the allocators for dynamic allocations.  We'll reuse
this later so move this into a helper.
Signed-off-by: default avatarLuis R. Rodriguez <>
Cc: Andrew Lunn <>
Cc: Stephen Warren <>
Cc: Greg Kroah-Hartman <>
Cc: Michal Hocko <>
Cc: Petr Mladek <>
Cc: Joe Perches <>
Cc: Arun KS <>
Cc: Kees Cook <>
Cc: Davidlohr Bueso <>
Cc: Chris Metcalf <>
Cc: Jan Kara <>
Signed-off-by: default avatarAndrew Morton <>
Signed-off-by: default avatarLinus Torvalds <>
parent 70300177
......@@ -828,15 +828,21 @@ void log_buf_kexec_setup(void)
/* requested log_buf_len from kernel cmdline */
static unsigned long __initdata new_log_buf_len;
/* save requested log_buf_len since it's too early to process it */
static int __init log_buf_len_setup(char *str)
/* we practice scaling the ring buffer by powers of 2 */
static void __init log_buf_len_update(unsigned size)
unsigned size = memparse(str, &str);
if (size)
size = roundup_pow_of_two(size);
if (size > log_buf_len)
new_log_buf_len = size;
/* save requested log_buf_len since it's too early to process it */
static int __init log_buf_len_setup(char *str)
unsigned size = memparse(str, &str);
return 0;
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment