Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=076f9776f5d8d131b36955db8641aba3893c2c1b
Commit:     076f9776f5d8d131b36955db8641aba3893c2c1b
Parent:     8866cd9dc9d0bbadcf361a14e0cdfecb66473087
Author:     Ingo Molnar <[EMAIL PROTECTED]>
AuthorDate: Wed Jan 30 13:33:06 2008 +0100
Committer:  Ingo Molnar <[EMAIL PROTECTED]>
CommitDate: Wed Jan 30 13:33:06 2008 +0100

    x86: make early printk selectable on 64-bit as well
    
    Enable CONFIG_EMBEDDED to select CONFIG_EARLY_PRINTK on 64-bit as well.
    
    saves ~2K:
    
       text    data     bss     dec     hex filename
       7290283 3672091 1907848 12870222         c4624e vmlinux.before
       7288373 3671795 1907848 12868016         c459b0 vmlinux.after
    
    Signed-off-by: Ingo Molnar <[EMAIL PROTECTED]>
    Signed-off-by: Thomas Gleixner <[EMAIL PROTECTED]>
---
 arch/x86/Kconfig.debug    |    2 +-
 arch/x86/kernel/head64.c  |    7 ++++++-
 arch/x86/kernel/head_64.S |    7 +++++++
 include/asm-x86/kdebug.h  |    1 -
 include/linux/kernel.h    |    3 +++
 kernel/printk.c           |    7 +++++++
 6 files changed, 24 insertions(+), 3 deletions(-)

diff --git a/arch/x86/Kconfig.debug b/arch/x86/Kconfig.debug
index 15854b5..88420af 100644
--- a/arch/x86/Kconfig.debug
+++ b/arch/x86/Kconfig.debug
@@ -6,7 +6,7 @@ config TRACE_IRQFLAGS_SUPPORT
 source "lib/Kconfig.debug"
 
 config EARLY_PRINTK
-       bool "Early printk" if EMBEDDED && DEBUG_KERNEL && X86_32
+       bool "Early printk" if EMBEDDED
        default y
        help
          Write kernel log output directly into the VGA buffer or to a serial
diff --git a/arch/x86/kernel/head64.c b/arch/x86/kernel/head64.c
index 85c1e6b..87e031d 100644
--- a/arch/x86/kernel/head64.c
+++ b/arch/x86/kernel/head64.c
@@ -58,8 +58,13 @@ void __init x86_64_start_kernel(char * real_mode_data)
        /* Make NULL pointers segfault */
        zap_identity_mappings();
 
-       for (i = 0; i < IDT_ENTRIES; i++)
+       for (i = 0; i < IDT_ENTRIES; i++) {
+#ifdef CONFIG_EARLY_PRINTK
                set_intr_gate(i, &early_idt_handlers[i]);
+#else
+               set_intr_gate(i, early_idt_handler);
+#endif
+       }
        load_idt((const struct desc_ptr *)&idt_descr);
 
        early_printk("Kernel alive\n");
diff --git a/arch/x86/kernel/head_64.S b/arch/x86/kernel/head_64.S
index 8b4c35c..1d5a7a3 100644
--- a/arch/x86/kernel/head_64.S
+++ b/arch/x86/kernel/head_64.S
@@ -267,6 +267,7 @@ init_rsp:
 bad_address:
        jmp bad_address
 
+#ifdef CONFIG_EARLY_PRINTK
 .macro early_idt_tramp first, last
        .ifgt \last-\first
        early_idt_tramp \first, \last-1
@@ -281,8 +282,10 @@ early_idt_handlers:
        early_idt_tramp 64, 127
        early_idt_tramp 128, 191
        early_idt_tramp 192, 255
+#endif
 
 ENTRY(early_idt_handler)
+#ifdef CONFIG_EARLY_PRINTK
        cmpl $2,early_recursion_flag(%rip)
        jz  1f
        incl early_recursion_flag(%rip)
@@ -311,8 +314,11 @@ ENTRY(early_idt_handler)
        movq 8(%rsp),%rsi       # get rip again
        call __print_symbol
 #endif
+#endif /* EARLY_PRINTK */
 1:     hlt
        jmp 1b
+
+#ifdef CONFIG_EARLY_PRINTK
 early_recursion_flag:
        .long 0
 
@@ -320,6 +326,7 @@ early_idt_msg:
        .asciz "PANIC: early exception %02lx rip %lx:%lx error %lx cr2 %lx\n"
 early_idt_ripmsg:
        .asciz "RIP %s\n"
+#endif /* CONFIG_EARLY_PRINTK */
 
 .balign PAGE_SIZE
 
diff --git a/include/asm-x86/kdebug.h b/include/asm-x86/kdebug.h
index a5e5e3b..e9f42d1 100644
--- a/include/asm-x86/kdebug.h
+++ b/include/asm-x86/kdebug.h
@@ -22,7 +22,6 @@ enum die_val {
        DIE_PAGE_FAULT,
 };
 
-extern void early_printk(const char *fmt, ...) 
__attribute__((format(printf,1,2)));
 extern void printk_address(unsigned long address);
 extern void die(const char *,struct pt_regs *,long);
 extern int __must_check __die(const char *, struct pt_regs *, long);
diff --git a/include/linux/kernel.h b/include/linux/kernel.h
index a7283c9..ff356b2 100644
--- a/include/linux/kernel.h
+++ b/include/linux/kernel.h
@@ -194,6 +194,9 @@ static inline int log_buf_read(int idx) { return 0; }
 static inline int log_buf_copy(char *dest, int idx, int len) { return 0; }
 #endif
 
+extern void __attribute__((format(printf, 1, 2)))
+       early_printk(const char *fmt, ...);
+
 unsigned long int_sqrt(unsigned long);
 
 extern int printk_ratelimit(void);
diff --git a/kernel/printk.c b/kernel/printk.c
index 3b7c968..58bbec6 100644
--- a/kernel/printk.c
+++ b/kernel/printk.c
@@ -36,6 +36,13 @@
 
 #include <asm/uaccess.h>
 
+/*
+ * Architectures can override it:
+ */
+void __attribute__((weak)) early_printk(const char *fmt, ...)
+{
+}
+
 #define __LOG_BUF_LEN  (1 << CONFIG_LOG_BUF_SHIFT)
 
 /* printk's without a loglevel use this.. */
-
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to