mirror of
https://github.com/xen-project/xen.git
synced 2026-10-29 18:50:05 +01:00
[LINUX] Provide permanent global version of machine_e820 map for
general use. Signed-off-by: Keir Fraser <keir@xensource.com>
This commit is contained in:
1 parent
d6b2fad88e
commit
c0d4d58131
2 files changed
+19
-18
No files matched your search
@@ -156,6 +156,9 @@ struct ist_info ist_info;
|
||||
EXPORT_SYMBOL(ist_info);
|
||||
#endif
|
||||
struct e820map e820;
|
||||
#ifdef CONFIG_XEN
|
||||
struct e820map machine_e820;
|
||||
#endif
|
||||
|
||||
extern void early_cpu_init(void);
|
||||
extern void generic_apic_probe(char *);
|
||||
@@ -1451,7 +1454,6 @@ e820_setup_gap(struct e820entry *e820, int nr_map)
|
||||
static void __init register_memory(void)
|
||||
{
|
||||
#ifdef CONFIG_XEN
|
||||
struct e820entry *machine_e820;
|
||||
struct xen_memory_map memmap;
|
||||
#endif
|
||||
int i;
|
||||
@@ -1461,14 +1463,14 @@ static void __init register_memory(void)
|
||||
return;
|
||||
|
||||
#ifdef CONFIG_XEN
|
||||
machine_e820 = alloc_bootmem_low_pages(PAGE_SIZE);
|
||||
|
||||
memmap.nr_entries = E820MAX;
|
||||
set_xen_guest_handle(memmap.buffer, machine_e820);
|
||||
set_xen_guest_handle(memmap.buffer, machine_e820.map);
|
||||
|
||||
BUG_ON(HYPERVISOR_memory_op(XENMEM_machine_memory_map, &memmap));
|
||||
if (HYPERVISOR_memory_op(XENMEM_machine_memory_map, &memmap))
|
||||
BUG();
|
||||
machine_e820.nr_map = memmap.nr_entries;
|
||||
|
||||
legacy_init_iomem_resources(machine_e820, memmap.nr_entries,
|
||||
legacy_init_iomem_resources(machine_e820.map, machine_e820.nr_map,
|
||||
&code_resource, &data_resource);
|
||||
#else
|
||||
if (efi_enabled)
|
||||
@@ -1486,8 +1488,7 @@ static void __init register_memory(void)
|
||||
request_resource(&ioport_resource, &standard_io_resources[i]);
|
||||
|
||||
#ifdef CONFIG_XEN
|
||||
e820_setup_gap(machine_e820, memmap.nr_entries);
|
||||
free_bootmem(__pa(machine_e820), PAGE_SIZE);
|
||||
e820_setup_gap(machine_e820.map, machine_e820.nr_map);
|
||||
#else
|
||||
e820_setup_gap(e820.map, e820.nr_map);
|
||||
#endif
|
||||
|
||||
@@ -144,6 +144,9 @@ struct sys_desc_table_struct {
|
||||
|
||||
struct edid_info edid_info;
|
||||
struct e820map e820;
|
||||
#ifdef CONFIG_XEN
|
||||
struct e820map machine_e820;
|
||||
#endif
|
||||
|
||||
extern int root_mountflags;
|
||||
|
||||
@@ -626,7 +629,6 @@ static void __init reserve_ebda_region(void)
|
||||
void __init setup_arch(char **cmdline_p)
|
||||
{
|
||||
unsigned long kernel_end;
|
||||
struct e820entry *machine_e820;
|
||||
struct xen_memory_map memmap;
|
||||
|
||||
#ifdef CONFIG_XEN
|
||||
@@ -919,14 +921,14 @@ void __init setup_arch(char **cmdline_p)
|
||||
probe_roms();
|
||||
#ifdef CONFIG_XEN
|
||||
if (is_initial_xendomain()) {
|
||||
machine_e820 = alloc_bootmem_low_pages(PAGE_SIZE);
|
||||
|
||||
memmap.nr_entries = E820MAX;
|
||||
set_xen_guest_handle(memmap.buffer, machine_e820);
|
||||
set_xen_guest_handle(memmap.buffer, machine_e820.map);
|
||||
|
||||
BUG_ON(HYPERVISOR_memory_op(XENMEM_machine_memory_map, &memmap));
|
||||
if (HYPERVISOR_memory_op(XENMEM_machine_memory_map, &memmap))
|
||||
BUG();
|
||||
machine_e820.nr_map = memmap.nr_entries;
|
||||
|
||||
e820_reserve_resources(machine_e820, memmap.nr_entries);
|
||||
e820_reserve_resources(machine_e820.map, machine_e820.nr_map);
|
||||
}
|
||||
#else
|
||||
e820_reserve_resources(e820.map, e820.nr_map);
|
||||
@@ -942,10 +944,8 @@ void __init setup_arch(char **cmdline_p)
|
||||
}
|
||||
|
||||
#ifdef CONFIG_XEN
|
||||
if (is_initial_xendomain()) {
|
||||
e820_setup_gap(machine_e820, memmap.nr_entries);
|
||||
free_bootmem(__pa(machine_e820), PAGE_SIZE);
|
||||
}
|
||||
if (is_initial_xendomain())
|
||||
e820_setup_gap(machine_e820.map, machine_e820.nr_map);
|
||||
#else
|
||||
e820_setup_gap(e820.map, e820.nr_map);
|
||||
#endif
|
||||
|
||||