X-Git-Url: http://v3vee.org/palacios/gitweb/gitweb.cgi?a=blobdiff_plain;f=palacios%2Fsrc%2Fpalacios%2Fvmm_config.c;h=be73f33ebf6c4892ebcfe3b318190133729ac2a1;hb=ee177da9b30ebf340c63fb5b9d535c729f90134d;hp=cab9d9efd5f99dc8a855fea4abde0d65ec3559f1;hpb=e63caa4c57933b3b38f498fea015785f8869c5ef;p=palacios.git diff --git a/palacios/src/palacios/vmm_config.c b/palacios/src/palacios/vmm_config.c index cab9d9e..be73f33 100644 --- a/palacios/src/palacios/vmm_config.c +++ b/palacios/src/palacios/vmm_config.c @@ -33,12 +33,14 @@ #include #include #include -#include -#include +#include +#include #include #include #include #include +#include +#include @@ -86,10 +88,12 @@ int v3_config_guest(struct guest_info * info, struct v3_vm_config * config_ptr) v3_init_hypercall_map(info); - - if (v3_cpu_type == V3_SVM_REV3_CPU) { + if ((v3_cpu_type == V3_SVM_REV3_CPU) && + (config_ptr->enable_nested_paging == 1)) { + PrintDebug("Guest Page Mode: NESTED_PAGING\n"); info->shdw_pg_mode = NESTED_PAGING; } else { + PrintDebug("Guest Page Mode: SHADOW_PAGING\n"); v3_init_shadow_page_state(info); info->shdw_pg_mode = SHADOW_PAGING; } @@ -222,8 +226,38 @@ static int setup_memory_map(struct guest_info * info, struct v3_vm_config * conf } } +#ifdef CRAY_XT + { +#define SEASTAR_START 0xffe00000 +#define SEASTAR_END 0xffffffff + + // Fill in generic memory below the seastar + addr_t top_of_mem = (SEASTAR_START < info->mem_size) ? SEASTAR_START : info->mem_size; + int num_low_pages = (top_of_mem - 0x100000) / PAGE_SIZE; + + if (v3_add_shadow_mem(info, 0x100000, top_of_mem, (addr_t)V3_AllocPages(num_low_pages)) == -1) { + PrintError("Could not extended memory below 4G\n"); + return -1; + } + + // Map the Seastar straight through + if (v3_add_shadow_mem(info, SEASTAR_START, SEASTAR_END, SEASTAR_START) == -1) { + PrintError("Could not map through the seastar\n"); + return -1; + } + + + // Add memory above the seastar + if (info->mem_size > SEASTAR_END) { + int num_high_pages = mem_pages - (SEASTAR_END / PAGE_SIZE); - + if (v3_add_shadow_mem(info, SEASTAR_END, info->mem_size, (addr_t)V3_AllocPages(num_high_pages)) == -1) { + PrintError("Could not map extended memory above 4G\n"); + return -1; + } + } + } +#else // Fill in the extended memory map.... { int num_ext_pages = mem_pages - (0x100000 / PAGE_SIZE); @@ -235,7 +269,8 @@ static int setup_memory_map(struct guest_info * info, struct v3_vm_config * conf } } } - +#endif + print_shadow_map(info); return 0; @@ -244,8 +279,9 @@ static int setup_memory_map(struct guest_info * info, struct v3_vm_config * conf static int setup_devices(struct guest_info * info, struct v3_vm_config * config_ptr) { - struct vm_device * ramdisk = NULL; - struct vm_device * cdrom = NULL; + struct vm_device * ide = NULL; + struct vm_device * ram_cd = NULL; + struct vm_device * pci = v3_create_pci(); struct vm_device * nvram = v3_create_nvram(); //struct vm_device * timer = v3_create_timer(); struct vm_device * pic = v3_create_pic(); @@ -255,6 +291,7 @@ static int setup_devices(struct guest_info * info, struct v3_vm_config * config_ struct vm_device * os_debug = v3_create_os_debug(); struct vm_device * apic = v3_create_apic(); struct vm_device * ioapic = v3_create_io_apic(apic); + struct vm_device * para_net = v3_create_para_net(); //struct vm_device * serial = v3_create_serial(); struct vm_device * generic = NULL; @@ -262,11 +299,13 @@ static int setup_devices(struct guest_info * info, struct v3_vm_config * config_ int use_ramdisk = config_ptr->use_ramdisk; int use_generic = USE_GENERIC; + ide = v3_create_ide(pci); if (use_ramdisk) { PrintDebug("Creating Ramdisk\n"); - ramdisk = v3_create_ramdisk(); - cdrom = v3_create_cdrom(ramdisk, config_ptr->ramdisk, config_ptr->ramdisk_size); + ram_cd = v3_create_ram_cd(ide, 0, 0, + (addr_t)(config_ptr->ramdisk), + config_ptr->ramdisk_size); } @@ -275,6 +314,8 @@ static int setup_devices(struct guest_info * info, struct v3_vm_config * config_ } + v3_attach_device(info, pci); + v3_attach_device(info, nvram); //v3_attach_device(info, timer); v3_attach_device(info, pic); @@ -287,9 +328,12 @@ static int setup_devices(struct guest_info * info, struct v3_vm_config * config_ v3_attach_device(info, apic); v3_attach_device(info, ioapic); + v3_attach_device(info, para_net); + + v3_attach_device(info, ide); + if (use_ramdisk) { - v3_attach_device(info, ramdisk); - v3_attach_device(info, cdrom); + v3_attach_device(info, ram_cd); } if (use_generic) {