diff options
Diffstat (limited to 'linux-2.6-xen-sparse/arch/x86_64/kernel/setup-xen.c')
-rw-r--r-- | linux-2.6-xen-sparse/arch/x86_64/kernel/setup-xen.c | 43 |
1 files changed, 13 insertions, 30 deletions
diff --git a/linux-2.6-xen-sparse/arch/x86_64/kernel/setup-xen.c b/linux-2.6-xen-sparse/arch/x86_64/kernel/setup-xen.c index 8fe13ee2b0..711ce5d198 100644 --- a/linux-2.6-xen-sparse/arch/x86_64/kernel/setup-xen.c +++ b/linux-2.6-xen-sparse/arch/x86_64/kernel/setup-xen.c @@ -74,6 +74,7 @@ #include <asm/hypervisor.h> #include <xen/interface/nmi.h> #include <xen/features.h> +#include <xen/xencons.h> #define PFN_UP(x) (((x) + PAGE_SIZE-1) >> PAGE_SHIFT) #define PFN_PHYS(x) ((x) << PAGE_SHIFT) #include <asm/mach-xen/setup_arch_post.h> @@ -143,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; @@ -625,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 @@ -645,33 +648,15 @@ void __init setup_arch(char **cmdline_p) screen_info.orig_video_cols = 80; screen_info.orig_video_ega_bx = 3; screen_info.orig_video_points = 16; + screen_info.orig_y = screen_info.orig_video_lines - 1; if (xen_start_info->console.dom0.info_size >= sizeof(struct dom0_vga_console_info)) { const struct dom0_vga_console_info *info = (struct dom0_vga_console_info *)( (char *)xen_start_info + xen_start_info->console.dom0.info_off); - screen_info.orig_video_mode = info->txt_mode; - screen_info.orig_video_isVGA = info->video_type; - screen_info.orig_video_lines = info->video_height; - screen_info.orig_video_cols = info->video_width; - screen_info.orig_video_points = info->txt_points; - screen_info.lfb_width = info->video_width; - screen_info.lfb_height = info->video_height; - screen_info.lfb_depth = info->lfb_depth; - screen_info.lfb_base = info->lfb_base; - screen_info.lfb_size = info->lfb_size; - screen_info.lfb_linelength = info->lfb_linelen; - screen_info.red_size = info->red_size; - screen_info.red_pos = info->red_pos; - screen_info.green_size = info->green_size; - screen_info.green_pos = info->green_pos; - screen_info.blue_size = info->blue_size; - screen_info.blue_pos = info->blue_pos; - screen_info.rsvd_size = info->rsvd_size; - screen_info.rsvd_pos = info->rsvd_pos; + dom0_init_screen_info(info); } - screen_info.orig_y = screen_info.orig_video_lines - 1; xen_start_info->console.domU.mfn = 0; xen_start_info->console.domU.evtchn = 0; } else @@ -936,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); @@ -959,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 |