From: Jack Lange Date: Tue, 10 Mar 2009 00:58:16 +0000 (-0500) Subject: added seastar memory mapping X-Git-Url: http://v3vee.org/palacios/gitweb/gitweb.cgi?p=palacios.git;a=commitdiff_plain;h=5bce09a95e6cfe1a2c84bfe5825b2b456d6ff4a5 added seastar memory mapping --- diff --git a/build/Makefile b/build/Makefile index 2bddb76..e173545 100644 --- a/build/Makefile +++ b/build/Makefile @@ -172,6 +172,8 @@ ifeq ($(INSTRUMENT_VMM),1) GEEKOS_FLAGS:= $(GEEKOS_FLAGS) INSTRUMENT_VMM=1 endif + + # ---------------------------------------------------------------------- # Targets - # Specifies files to be built @@ -194,6 +196,9 @@ palacios-full32: palacios-full64: (cd $(PALACIOS_BUILD_DIR) && make ARCH=64 $(DEBUG_SECTIONS) world) +palacios-full-cray: + (cd $(PALACIOS_BUILD_DIR) && make V=1 ARCH=64 CRAY_XT=1 $(DEBUG_SECTIONS) world) + palacios-lean: (cd $(PALACIOS_BUILD_DIR) && make LEAN_AND_MEAN=1 world) diff --git a/palacios/build/Makefile b/palacios/build/Makefile index bf527cd..ed91e6d 100644 --- a/palacios/build/Makefile +++ b/palacios/build/Makefile @@ -321,7 +321,7 @@ DEVICES_OBJS := \ devices/apic.o \ devices/io_apic.o \ devices/vpci.o \ - + devices/para_net.o \ # devices/vnic.o \ @@ -342,6 +342,11 @@ V3_ARCH := __V3_32BIT__ endif +ifeq ($(CRAY_XT),1) +EXTRA_C_OPTS := $(EXTRA_C_OPTS) -DCRAY_XT +endif + + # Uncomment if cross compiling #TARGET_CC_PREFIX := $(PROJECT_ROOT)/../devtools/i386/bin/i386-elf- #TARGET_CC_PREFIX := i386-elf- diff --git a/palacios/src/palacios/vmm_config.c b/palacios/src/palacios/vmm_config.c index cab9d9e..db9aa8b 100644 --- a/palacios/src/palacios/vmm_config.c +++ b/palacios/src/palacios/vmm_config.c @@ -39,6 +39,7 @@ #include #include #include +#include @@ -222,8 +223,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 +266,8 @@ static int setup_memory_map(struct guest_info * info, struct v3_vm_config * conf } } } - +#endif + print_shadow_map(info); return 0; @@ -255,6 +287,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; @@ -287,6 +320,8 @@ 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); + if (use_ramdisk) { v3_attach_device(info, ramdisk); v3_attach_device(info, cdrom);