Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753361AbbFCHzH (ORCPT ); Wed, 3 Jun 2015 03:55:07 -0400 Received: from mail-la0-f45.google.com ([209.85.215.45]:34704 "EHLO mail-la0-f45.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753296AbbFCHzA (ORCPT ); Wed, 3 Jun 2015 03:55:00 -0400 From: Alexander Kuleshov To: Thomas Gleixner , Ingo Molnar , "H. Peter Anvin" Cc: Alexander Kuleshov , Andy Shevchenko , LKML , Greg Kroah-Hartman , Borislav Petkov , Mark Rustad , Yinghai Lu Subject: [PATCH v9 0/3] x86/earlyprintk: setup serial earlyprintk as early as possible Date: Wed, 3 Jun 2015 13:54:32 +0600 Message-Id: <1433318072-5611-1-git-send-email-kuleshovmail@gmail.com> X-Mailer: git-send-email 2.4.0.GIT Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 4185 Lines: 109 The early_printk function is usable only after the setup_early_printk will be executed. We pass 'earlyprintk' through the kernel command line. So, it means that earlyprintk will be usable only after the 'parse_early_param' will be executed or in another words earlyprintk is usable only during early boot, kernel decompression and after call of the parse_early_param. But there are many stuff after the kernel decompression and before the parse_early_param will be called as memblock usage, early cpu initialization, early ioremap initialization and etc... So earlyprintk allows us to see what's going on there. Patchset was tested for both x86 and x86_64 architectures with the qemu. It also provides call of the earlyprintk function right after the early initialization of the serial console, so it must prints the debug string. These patchset provides following changes: 1. Move handling of the builtin command line to the separate function from the setup_arch. Now we can call it from the arch/x86/kernel/head{32,64}.c, and find 'earlyprintk' kernel command line paramter there. 2. Provide setup_serial_console function to setup serial earlyprintk in the arch/x86/kernel/head{32,64}.c v9: * Add call of the lockdep_init to the arch/x86/kernel/head{32,64}.c before the serial console initialization to prevent: [ 0.000000] WARNING: lockdep init error! lock-(console_sem).lock was acquiredbefore lockdep_init [ 0.000000] Call stack leading to lockdep invocation was: [ 0.000000] [] save_stack_trace+0x2f/0x50 [ 0.000000] [] __lock_acquire+0xa2c/0xf00 [ 0.000000] [] lock_acquire+0xdb/0x2b0 [ 0.000000] [] _raw_spin_lock_irqsave+0x53/0x90 [ 0.000000] [] down+0x16/0x50 [ 0.000000] [] console_lock+0x19/0x60 [ 0.000000] [] register_console+0x116/0x350 [ 0.000000] [] setup_early_printk+0x165/0x467 [ 0.000000] [] setup_early_serial_console+0x56/0x58 [ 0.000000] [] x86_64_start_kernel+0xce/0x110 [ 0.000000] [] 0xffffffffffffffff [ 0.000000] ------------------------ during early serial console initialization. * Add additional check to the earlyprintk initialization to protect double initialization of the early_serial_console. * Fixed comment. v8: * Fixed warning with the definition of the setup_early_serial_console in the arch/x86/include/asm/setup.h v7: * Move setup_early_serial_console to the the arch/x86/include/setup.h * Add ifdefs to prevent setup_serial_console if CONFIG_EARLY_PRINTK is not set. v6: * Style fixes. * Call of the suetp_builtin_cmdline moved to the separate patch. v5: * Call setup_builtin_cmdline instead of setup_cmdline v4: * Move setup_early_serial_console from the include/linux/printk.h to the arch/x86/include/asm/serial.h, because this function is only for x86 now. v3: * Call setup_cmdline before setup_early_printk; * setup_early_printk call wrapped with the setup_early_serial_console which checks that 'serial' given to the earlyprintk command line option. This prevents call of the setup_early_printk with the given pciserial/dbgp/efi, because they are using early_ioremap. v2: * Comment added before the setup_early_printk call; * Added information about testing to the commit message. Alexander Kuleshov (3): x86/setup: introduce setup_bultin_cmdline x86/setup: handle builtin command line as early as possible x86/earlyprintk: setup earlyprintk as early as possible arch/x86/include/asm/setup.h | 8 ++++++++ arch/x86/kernel/early_printk.c | 24 ++++++++++++++++++++++++ arch/x86/kernel/head32.c | 7 +++++++ arch/x86/kernel/head64.c | 7 +++++++ arch/x86/kernel/setup.c | 33 ++++++++++++++++++--------------- 5 files changed, 64 insertions(+), 15 deletions(-) -- 2.4.0.350.g9532ead -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/