Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 99767
b: refs/heads/master
c: 064d25f
h: refs/heads/master
i:
  99765: c74b100
  99763: 69fe7c8
  99759: 0b3e603
v: v3
  • Loading branch information
Yinghai Lu authored and Ingo Molnar committed Jul 8, 2008
1 parent e60cc5c commit 3c86241
Show file tree
Hide file tree
Showing 12 changed files with 93 additions and 235 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: cc9f7a0ccf000d4db5fbdc7b0ae48eefea102f69
refs/heads/master: 064d25f12014ae1d97c2882f9ab874995321f2b2
2 changes: 1 addition & 1 deletion trunk/arch/x86/kernel/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ obj-y += setup_$(BITS).o i8259_$(BITS).o setup.o
obj-$(CONFIG_X86_32) += sys_i386_32.o i386_ksyms_32.o
obj-$(CONFIG_X86_64) += sys_x86_64.o x8664_ksyms_64.o
obj-$(CONFIG_X86_64) += syscall_64.o vsyscall_64.o setup64.o
obj-y += bootflag.o e820_$(BITS).o e820.o
obj-y += bootflag.o e820.o
obj-y += pci-dma.o quirks.o i8237.o topology.o kdebugfs.o
obj-y += alternative.o i8253.o pci-nommu.o
obj-$(CONFIG_X86_64) += bugs_64.o
Expand Down
72 changes: 72 additions & 0 deletions trunk/arch/x86/kernel/e820.c
Original file line number Diff line number Diff line change
Expand Up @@ -1029,4 +1029,76 @@ void __init e820_reserve_resources(void)
}
}

char *__init __attribute__((weak)) machine_specific_memory_setup(void)
{
char *who = "BIOS-e820";
int new_nr;
/*
* Try to copy the BIOS-supplied E820-map.
*
* Otherwise fake a memory map; one section from 0k->640k,
* the next section from 1mb->appropriate_mem_k
*/
new_nr = boot_params.e820_entries;
sanitize_e820_map(boot_params.e820_map,
ARRAY_SIZE(boot_params.e820_map),
&new_nr);
boot_params.e820_entries = new_nr;
if (copy_e820_map(boot_params.e820_map, boot_params.e820_entries) < 0) {
#ifdef CONFIG_X86_64
early_panic("Cannot find a valid memory map");
#else
unsigned long mem_size;

/* compare results from other methods and take the greater */
if (boot_params.alt_mem_k
< boot_params.screen_info.ext_mem_k) {
mem_size = boot_params.screen_info.ext_mem_k;
who = "BIOS-88";
} else {
mem_size = boot_params.alt_mem_k;
who = "BIOS-e801";
}

e820.nr_map = 0;
e820_add_region(0, LOWMEMSIZE(), E820_RAM);
e820_add_region(HIGH_MEMORY, mem_size << 10, E820_RAM);
#endif
}

/* In case someone cares... */
return who;
}

/* Overridden in paravirt.c if CONFIG_PARAVIRT */
char * __init __attribute__((weak)) memory_setup(void)
{
return machine_specific_memory_setup();
}

void __init setup_memory_map(void)
{
printk(KERN_INFO "BIOS-provided physical RAM map:\n");
e820_print_map(memory_setup());
}

#ifdef CONFIG_X86_64
int __init arch_get_ram_range(int slot, u64 *addr, u64 *size)
{
int i;

if (slot < 0 || slot >= e820.nr_map)
return -1;
for (i = slot; i < e820.nr_map; i++) {
if (e820.map[i].type != E820_RAM)
continue;
break;
}
if (i == e820.nr_map || e820.map[i].addr > (max_pfn << PAGE_SHIFT))
return -1;
*addr = e820.map[i].addr;
*size = min_t(u64, e820.map[i].size + e820.map[i].addr,
max_pfn << PAGE_SHIFT) - *addr;
return i + 1;
}
#endif
29 changes: 0 additions & 29 deletions trunk/arch/x86/kernel/e820_32.c

This file was deleted.

92 changes: 0 additions & 92 deletions trunk/arch/x86/kernel/e820_64.c

This file was deleted.

8 changes: 1 addition & 7 deletions trunk/arch/x86/kernel/setup_64.c
Original file line number Diff line number Diff line change
Expand Up @@ -266,12 +266,6 @@ static inline void __init reserve_crashkernel(void)
{}
#endif

/* Overridden in paravirt.c if CONFIG_PARAVIRT */
void __attribute__((weak)) __init memory_setup(void)
{
machine_specific_memory_setup();
}

#ifdef CONFIG_PCI_MMCONFIG
extern void __cpuinit fam10h_check_enable_mmcfg(void);
extern void __init check_enable_amd_mmconf_dmi(void);
Expand Down Expand Up @@ -316,7 +310,7 @@ void __init setup_arch(char **cmdline_p)

ARCH_SETUP

memory_setup();
setup_memory_map();
copy_edd();

if (!boot_params.hdr.root_flags)
Expand Down
47 changes: 0 additions & 47 deletions trunk/arch/x86/mach-default/setup.c
Original file line number Diff line number Diff line change
Expand Up @@ -142,50 +142,3 @@ static int __init print_ipi_mode(void)

late_initcall(print_ipi_mode);

/**
* machine_specific_memory_setup - Hook for machine specific memory setup.
*
* Description:
* This is included late in kernel/setup.c so that it can make
* use of all of the static functions.
**/

char * __init machine_specific_memory_setup(void)
{
char *who;
int new_nr;


who = "BIOS-e820";

/*
* Try to copy the BIOS-supplied E820-map.
*
* Otherwise fake a memory map; one section from 0k->640k,
* the next section from 1mb->appropriate_mem_k
*/
new_nr = boot_params.e820_entries;
sanitize_e820_map(boot_params.e820_map,
ARRAY_SIZE(boot_params.e820_map),
&new_nr);
boot_params.e820_entries = new_nr;
if (copy_e820_map(boot_params.e820_map, boot_params.e820_entries)
< 0) {
unsigned long mem_size;

/* compare results from other methods and take the greater */
if (boot_params.alt_mem_k
< boot_params.screen_info.ext_mem_k) {
mem_size = boot_params.screen_info.ext_mem_k;
who = "BIOS-88";
} else {
mem_size = boot_params.alt_mem_k;
who = "BIOS-e801";
}

e820.nr_map = 0;
e820_add_region(0, LOWMEMSIZE(), E820_RAM);
e820_add_region(HIGH_MEMORY, mem_size << 10, E820_RAM);
}
return who;
}
12 changes: 12 additions & 0 deletions trunk/arch/x86/mm/init_64.c
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,18 @@
#include <asm/numa.h>
#include <asm/cacheflush.h>

/*
* PFN of last memory page.
*/
unsigned long end_pfn;

/*
* end_pfn only includes RAM, while max_pfn_mapped includes all e820 entries.
* The direct mapping extends to max_pfn_mapped, so that we can directly access
* apertures, ACPI and other tables without having to play with fixmaps.
*/
unsigned long max_pfn_mapped;

static unsigned long dma_reserve __initdata;

DEFINE_PER_CPU(struct mmu_gather, mmu_gathers);
Expand Down
9 changes: 6 additions & 3 deletions trunk/include/asm-x86/e820.h
Original file line number Diff line number Diff line change
Expand Up @@ -101,6 +101,9 @@ extern void e820_register_active_regions(int nid, unsigned long start_pfn,
extern u64 e820_hole_size(u64 start, u64 end);
extern void finish_e820_parsing(void);
extern void e820_reserve_resources(void);
extern void setup_memory_map(void);
extern char *machine_specific_memory_setup(void);
extern char *memory_setup(void);

#endif /* __ASSEMBLY__ */

Expand All @@ -111,10 +114,10 @@ extern void e820_reserve_resources(void);
#define BIOS_END 0x00100000

#ifdef __KERNEL__
#include <linux/ioport.h>

#ifdef CONFIG_X86_32
# include "e820_32.h"
#else
# include "e820_64.h"
#define HIGH_MEMORY (1024*1024)
#endif
#endif /* __KERNEL__ */

Expand Down
24 changes: 0 additions & 24 deletions trunk/include/asm-x86/e820_32.h

This file was deleted.

26 changes: 0 additions & 26 deletions trunk/include/asm-x86/e820_64.h

This file was deleted.

5 changes: 0 additions & 5 deletions trunk/include/asm-x86/setup.h
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@
/* Interrupt control for vSMPowered x86_64 systems */
void vsmp_init(void);

char *machine_specific_memory_setup(void);
#ifndef CONFIG_PARAVIRT
#define paravirt_post_allocator_init() do {} while (0)
#endif
Expand Down Expand Up @@ -50,10 +49,6 @@ extern struct boot_params boot_params;
*/
#define LOWMEMSIZE() (0x9f000)

char * __init machine_specific_memory_setup(void);
char *memory_setup(void);


void __init i386_start_kernel(void);

extern unsigned long init_pg_tables_start;
Expand Down

0 comments on commit 3c86241

Please sign in to comment.