From 448fd89053bb8526a81a68e5403b5b6c4fc8d413 Mon Sep 17 00:00:00 2001 From: Thomas Gleixner Date: Wed, 20 Mar 2013 15:07:33 +1100 Subject: [PATCH] early_printk: consolidate random copies of identical code The early console implementations are the same all over the place. Move the print function to kernel/printk and get rid of the copies. [v3: drop sparc bits as suggested by tglx, redo build tests on sparc sparc32, Randy's randconfig, ppc, mips, arm...] [v2: essentially unchanged since v1, so I've left the acked/reviewed tags. There was a compile fail[1] for a randconfig with EARLY_PRINTK=y and PRINTK=n, because the early_console struct and early_printk calls were nested within an #ifdef CONFIG_PRINTK -- moving that whole block exactly as-is to be outside the #ifdef CONFIG_PRINTK fixes the randconfig and still works for everyday sane configs too.] [1] http://marc.info/?l=linux-next&m=136219350914998&w=2 Signed-off-by: Thomas Gleixner Cc: Russell King Acked-by: Mike Frysinger Cc: Michal Simek Cc: Ralf Baechle Cc: Benjamin Herrenschmidt Cc: Paul Mundt Cc: "David S. Miller" Cc: Chris Metcalf Cc: Richard Weinberger Reviewed-by: Ingo Molnar Signed-off-by: Paul Gortmaker Signed-off-by: Andrew Morton --- arch/sparc/kernel/setup_32.c | 1 - arch/sparc/kernel/setup_64.c | 8 +------ kernel/printk.c | 46 ++++++++++++++++++------------------ 3 files changed, 24 insertions(+), 31 deletions(-) diff --git a/arch/sparc/kernel/setup_32.c b/arch/sparc/kernel/setup_32.c index f4fb00e76d0e..38bf80a22f02 100644 --- a/arch/sparc/kernel/setup_32.c +++ b/arch/sparc/kernel/setup_32.c @@ -309,7 +309,6 @@ void __init setup_arch(char **cmdline_p) boot_flags_init(*cmdline_p); - early_console = &prom_early_console; register_console(&prom_early_console); printk("ARCH: "); diff --git a/arch/sparc/kernel/setup_64.c b/arch/sparc/kernel/setup_64.c index d9c57e9ad454..88a127b9c69e 100644 --- a/arch/sparc/kernel/setup_64.c +++ b/arch/sparc/kernel/setup_64.c @@ -551,12 +551,6 @@ static void __init init_sparc64_elf_hwcap(void) pause_patch(); } -static inline void register_prom_console(void) -{ - early_console = &prom_early_console; - register_console(&prom_early_console); -} - void __init setup_arch(char **cmdline_p) { /* Initialize PROM console and command line. */ @@ -568,7 +562,7 @@ void __init setup_arch(char **cmdline_p) #ifdef CONFIG_EARLYFB if (btext_find_display()) #endif - register_prom_console(); + register_console(&prom_early_console); if (tlb_type == hypervisor) printk("ARCH: SUN4V\n"); diff --git a/kernel/printk.c b/kernel/printk.c index 50388f358f0c..922942a2baa6 100644 --- a/kernel/printk.c +++ b/kernel/printk.c @@ -758,29 +758,6 @@ module_param(ignore_loglevel, bool, S_IRUGO | S_IWUSR); MODULE_PARM_DESC(ignore_loglevel, "ignore loglevel setting, to" "print all kernel messages to the console."); -#ifdef CONFIG_EARLY_PRINTK -struct console *early_console; - -void early_vprintk(const char *fmt, va_list ap) -{ - if (early_console) { - char buf[512]; - int n = vscnprintf(buf, sizeof(buf), fmt, ap); - - early_console->write(early_console, buf, n); - } -} - -asmlinkage void early_printk(const char *fmt, ...) -{ - va_list ap; - - va_start(ap, fmt); - early_vprintk(fmt, ap); - va_end(ap); -} -#endif - #ifdef CONFIG_BOOT_PRINTK_DELAY static int boot_delay; /* msecs delay after each printk during bootup */ @@ -1743,6 +1720,29 @@ static size_t cont_print_text(char *text, size_t size) { return 0; } #endif /* CONFIG_PRINTK */ +#ifdef CONFIG_EARLY_PRINTK +struct console *early_console; + +void early_vprintk(const char *fmt, va_list ap) +{ + if (early_console) { + char buf[512]; + int n = vscnprintf(buf, sizeof(buf), fmt, ap); + + early_console->write(early_console, buf, n); + } +} + +asmlinkage void early_printk(const char *fmt, ...) +{ + va_list ap; + + va_start(ap, fmt); + early_vprintk(fmt, ap); + va_end(ap); +} +#endif + static int __add_preferred_console(char *name, int idx, char *options, char *brl_options) { -- 2.39.5