]> Pileus Git - ~andy/linux/blobdiff - kernel/printk/printk.c
Merge branch 'sched-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel...
[~andy/linux] / kernel / printk / printk.c
index be7c86bae5762e4e5283dcbd305951301310c58d..b1d255f041351779dacb5341dbcb0c0c4a09fb87 100644 (file)
@@ -757,14 +757,10 @@ void __init setup_log_buf(int early)
                return;
 
        if (early) {
-               unsigned long mem;
-
-               mem = memblock_alloc(new_log_buf_len, PAGE_SIZE);
-               if (!mem)
-                       return;
-               new_log_buf = __va(mem);
+               new_log_buf =
+                       memblock_virt_alloc(new_log_buf_len, PAGE_SIZE);
        } else {
-               new_log_buf = alloc_bootmem_nopanic(new_log_buf_len);
+               new_log_buf = memblock_virt_alloc_nopanic(new_log_buf_len, 0);
        }
 
        if (unlikely(!new_log_buf)) {
@@ -1599,10 +1595,13 @@ asmlinkage int vprintk_emit(int facility, int level,
                 * either merge it with the current buffer and flush, or if
                 * there was a race with interrupts (prefix == true) then just
                 * flush it out and store this line separately.
+                * If the preceding printk was from a different task and missed
+                * a newline, flush and append the newline.
                 */
-               if (cont.len && cont.owner == current) {
-                       if (!(lflags & LOG_PREFIX))
-                               stored = cont_add(facility, level, text, text_len);
+               if (cont.len) {
+                       if (cont.owner == current && !(lflags & LOG_PREFIX))
+                               stored = cont_add(facility, level, text,
+                                                 text_len);
                        cont_flush(LOG_NEWLINE);
                }