From 398a5caf812b231c878f93191987f67908ba30c0 Mon Sep 17 00:00:00 2001 From: Glauber de Oliveira Costa Date: Wed, 30 Jan 2008 13:31:11 +0100 Subject: [PATCH] --- yaml --- r: 79963 b: refs/heads/master c: 746ef0cd0c7190d570c65b8e39a4ac67550ae43a h: refs/heads/master i: 79961: a5fafd4fe03467c88b98ee6937035b34613566f0 79959: af0cbbc2b48932dbd94b3d7d65cb0350b2aff177 v: v3 --- [refs] | 2 +- trunk/arch/x86/kernel/e820_64.c | 9 +++++++-- trunk/arch/x86/kernel/setup_64.c | 28 +++++++++++++++++++++++++++- trunk/arch/x86/kernel/smpboot_64.c | 4 ++-- trunk/include/asm-x86/setup.h | 11 ++++++++--- 5 files changed, 45 insertions(+), 9 deletions(-) diff --git a/[refs] b/[refs] index 7fe996fa2137..4a85202ff56e 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: ba082427ae6ffbf8e48a26ae4f72f4501a6b80c1 +refs/heads/master: 746ef0cd0c7190d570c65b8e39a4ac67550ae43a diff --git a/trunk/arch/x86/kernel/e820_64.c b/trunk/arch/x86/kernel/e820_64.c index 8e7321101a0a..abc473bcabe8 100644 --- a/trunk/arch/x86/kernel/e820_64.c +++ b/trunk/arch/x86/kernel/e820_64.c @@ -638,8 +638,10 @@ static void early_panic(char *msg) panic(msg); } -void __init setup_memory_region(void) +/* We're not void only for x86 32-bit compat */ +char * __init machine_specific_memory_setup(void) { + char *who = "BIOS-e820"; /* * Try to copy the BIOS-supplied E820-map. * @@ -650,7 +652,10 @@ void __init setup_memory_region(void) if (copy_e820_map(boot_params.e820_map, boot_params.e820_entries) < 0) early_panic("Cannot find a valid memory map"); printk(KERN_INFO "BIOS-provided physical RAM map:\n"); - e820_print_map("BIOS-e820"); + e820_print_map(who); + + /* In case someone cares... */ + return who; } static int __init parse_memopt(char *p) diff --git a/trunk/arch/x86/kernel/setup_64.c b/trunk/arch/x86/kernel/setup_64.c index f2b131ef844e..8dd110d93e73 100644 --- a/trunk/arch/x86/kernel/setup_64.c +++ b/trunk/arch/x86/kernel/setup_64.c @@ -39,6 +39,7 @@ #include #include #include +#include #include #include @@ -62,6 +63,12 @@ #include #include +#ifdef CONFIG_PARAVIRT +#include +#else +#define ARCH_SETUP +#endif + /* * Machine setup.. */ @@ -246,6 +253,16 @@ static void discover_ebda(void) * 4K EBDA area at 0x40E */ ebda_addr = *(unsigned short *)__va(EBDA_ADDR_POINTER); + /* + * There can be some situations, like paravirtualized guests, + * in which there is no available ebda information. In such + * case, just skip it + */ + if (!ebda_addr) { + ebda_size = 0; + return; + } + ebda_addr <<= 4; ebda_size = *(unsigned short *)__va(ebda_addr); @@ -259,6 +276,12 @@ static void discover_ebda(void) ebda_size = 64*1024; } +/* Overridden in paravirt.c if CONFIG_PARAVIRT */ +void __attribute__((weak)) memory_setup(void) +{ + machine_specific_memory_setup(); +} + void __init setup_arch(char **cmdline_p) { unsigned i; @@ -276,7 +299,10 @@ void __init setup_arch(char **cmdline_p) rd_prompt = ((boot_params.hdr.ram_size & RAMDISK_PROMPT_FLAG) != 0); rd_doload = ((boot_params.hdr.ram_size & RAMDISK_LOAD_FLAG) != 0); #endif - setup_memory_region(); + + ARCH_SETUP + + memory_setup(); copy_edd(); if (!boot_params.hdr.root_flags) diff --git a/trunk/arch/x86/kernel/smpboot_64.c b/trunk/arch/x86/kernel/smpboot_64.c index c3f2736ba530..cb73c4da87fc 100644 --- a/trunk/arch/x86/kernel/smpboot_64.c +++ b/trunk/arch/x86/kernel/smpboot_64.c @@ -369,7 +369,7 @@ void __cpuinit start_secondary(void) unlock_ipi_call_lock(); - setup_secondary_APIC_clock(); + setup_secondary_clock(); cpu_idle(); } @@ -923,7 +923,7 @@ void __init smp_prepare_cpus(unsigned int max_cpus) * Set up local APIC timer on boot CPU. */ - setup_boot_APIC_clock(); + setup_boot_clock(); } /* diff --git a/trunk/include/asm-x86/setup.h b/trunk/include/asm-x86/setup.h index 24d786e07b49..071e054abd82 100644 --- a/trunk/include/asm-x86/setup.h +++ b/trunk/include/asm-x86/setup.h @@ -3,6 +3,13 @@ #define COMMAND_LINE_SIZE 2048 +#ifndef __ASSEMBLY__ +char *machine_specific_memory_setup(void); +#ifndef CONFIG_PARAVIRT +#define paravirt_post_allocator_init() do {} while (0) +#endif +#endif /* __ASSEMBLY__ */ + #ifdef __KERNEL__ #ifdef __i386__ @@ -51,9 +58,7 @@ void __init add_memory_region(unsigned long long start, extern unsigned long init_pg_tables_end; -#ifndef CONFIG_PARAVIRT -#define paravirt_post_allocator_init() do {} while (0) -#endif + #endif /* __i386__ */ #endif /* _SETUP */