Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 076f9776 authored by Ingo Molnar's avatar Ingo Molnar
Browse files

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: default avatarIngo Molnar <mingo@elte.hu>
Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
parent 8866cd9d
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -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
+6 −1
Original line number Diff line number Diff line
@@ -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");
+7 −0
Original line number Diff line number Diff line
@@ -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

+0 −1
Original line number Diff line number Diff line
@@ -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);
+3 −0
Original line number Diff line number Diff line
@@ -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);
Loading