]> git.karo-electronics.de Git - linux-beck.git/blobdiff - kernel/printk/printk.c
printk: make dynamic units clear for the kernel ring buffer
[linux-beck.git] / kernel / printk / printk.c
index 13e839dbca07ea72fb06d0b5ecbb97379c4a7f57..db290be32984db20119265aecf41a2cbc2ca7ffa 100644 (file)
@@ -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);
+
+       log_buf_len_update(size);
 
        return 0;
 }
@@ -853,9 +859,10 @@ void __init setup_log_buf(int early)
 
        if (early) {
                new_log_buf =
-                       memblock_virt_alloc(new_log_buf_len, PAGE_SIZE);
+                       memblock_virt_alloc(new_log_buf_len, LOG_ALIGN);
        } else {
-               new_log_buf = memblock_virt_alloc_nopanic(new_log_buf_len, 0);
+               new_log_buf = memblock_virt_alloc_nopanic(new_log_buf_len,
+                                                         LOG_ALIGN);
        }
 
        if (unlikely(!new_log_buf)) {
@@ -872,7 +879,7 @@ void __init setup_log_buf(int early)
        memcpy(log_buf, __log_buf, __LOG_BUF_LEN);
        raw_spin_unlock_irqrestore(&logbuf_lock, flags);
 
-       pr_info("log_buf_len: %d\n", log_buf_len);
+       pr_info("log_buf_len: %d bytes\n", log_buf_len);
        pr_info("early log buf free: %d(%d%%)\n",
                free, (free * 100) / __LOG_BUF_LEN);
 }