X-Git-Url: http://v3vee.org/palacios/gitweb/gitweb.cgi?a=blobdiff_plain;f=palacios%2Fsrc%2Fpalacios%2Fvmm_config.c;h=b713975af67eb01aa49ea06f4cdbb85c1826dfb8;hb=176328b42924a56b53e4c7255ef83acb5847c621;hp=99033e5cf4195e6afddc9f84db5acef5b298a488;hpb=a6865d183eedbdf3e5510e4be89dcb5ce51b5953;p=palacios.git diff --git a/palacios/src/palacios/vmm_config.c b/palacios/src/palacios/vmm_config.c index 99033e5..b713975 100644 --- a/palacios/src/palacios/vmm_config.c +++ b/palacios/src/palacios/vmm_config.c @@ -22,6 +22,9 @@ #include #include #include +#include +#include + #include #include @@ -32,6 +35,10 @@ #include #include #include +#include +#include +#include + #include @@ -75,8 +82,8 @@ int v3_config_guest(struct guest_info * info, struct v3_vm_config * config_ptr) v3_init_host_events(info); v3_init_decoder(info); - - init_shadow_map(info); + + v3_init_shadow_map(info); if (v3_cpu_type == V3_SVM_REV3_CPU) { info->shdw_pg_mode = NESTED_PAGING; @@ -99,6 +106,14 @@ int v3_config_guest(struct guest_info * info, struct v3_vm_config * config_ptr) setup_devices(info, config_ptr); + + if (config_ptr->enable_profiling) { + info->enable_profiler = 1; + v3_init_profiler(info); + } else { + info->enable_profiler = 0; + } + //v3_hook_io_port(info, 1234, &IO_Read, NULL, info); // Setup initial cpu register state @@ -124,7 +139,7 @@ static int setup_memory_map(struct guest_info * info, struct v3_vm_config * conf PrintDebug("Layout Region %d bytes\n", config_ptr->rombios_size); memcpy(V3_VAddr(guest_mem), config_ptr->rombios, config_ptr->rombios_size); - add_shadow_region_passthrough(info, ROMBIOS_START, ROMBIOS_START + (num_pages * PAGE_SIZE), (addr_t)guest_mem); + v3_add_shadow_mem(info, ROMBIOS_START, ROMBIOS_START + (num_pages * PAGE_SIZE) - 1, (addr_t)guest_mem); PrintDebug("Adding Shadow Region (0x%p-0x%p) -> 0x%p\n", (void *)ROMBIOS_START, @@ -141,7 +156,7 @@ static int setup_memory_map(struct guest_info * info, struct v3_vm_config * conf PrintDebug("Layout Region %d bytes\n", config_ptr->vgabios_size); memcpy(V3_VAddr(guest_mem), config_ptr->vgabios, config_ptr->vgabios_size); - add_shadow_region_passthrough(info, VGABIOS_START, VGABIOS_START + (num_pages * PAGE_SIZE), (addr_t)guest_mem); + v3_add_shadow_mem(info, VGABIOS_START, VGABIOS_START + (num_pages * PAGE_SIZE) - 1, (addr_t)guest_mem); PrintDebug("Adding Shadow Region (0x%p-0x%p) -> 0x%p\n", (void *)VGABIOS_START, @@ -150,44 +165,44 @@ static int setup_memory_map(struct guest_info * info, struct v3_vm_config * conf } // - add_shadow_region_passthrough(info, 0x0, 0xa0000, (addr_t)V3_AllocPages(160)); + v3_add_shadow_mem(info, 0x0, 0x9ffff, (addr_t)V3_AllocPages(160)); - if (0) { - add_shadow_region_passthrough(info, 0xa0000, 0xc0000, 0xa0000); + if (1) { + v3_add_shadow_mem(info, 0xa0000, 0xbffff, 0xa0000); } else { - v3_hook_write_mem(info, 0xa0000, 0xc0000, 0xa0000, passthrough_mem_write, NULL); + v3_hook_write_mem(info, 0xa0000, 0xbffff, 0xa0000, passthrough_mem_write, NULL); } // TEMP //add_shadow_region_passthrough(info, 0xc0000, 0xc8000, 0xc0000); if (1) { - add_shadow_region_passthrough(info, 0xc7000, 0xc8000, (addr_t)V3_AllocPages(1)); - if (add_shadow_region_passthrough(info, 0xc8000, 0xf0000, (addr_t)V3_AllocPages(40)) == -1) { + v3_add_shadow_mem(info, 0xc7000, 0xc8000, (addr_t)V3_AllocPages(1)); + if (v3_add_shadow_mem(info, 0xc8000, 0xf0000, (addr_t)V3_AllocPages(40)) == -1) { PrintDebug("Error adding shadow region\n"); } } else { - add_shadow_region_passthrough(info, 0xc0000, 0xc8000, 0xc0000); - add_shadow_region_passthrough(info, 0xc8000, 0xf0000, 0xc8000); + v3_add_shadow_mem(info, 0xc0000, 0xc8000, 0xc0000); + v3_add_shadow_mem(info, 0xc8000, 0xf0000, 0xc8000); } if (1) { - add_shadow_region_passthrough(info, 0x100000, 0x1000000, (addr_t)V3_AllocPages(4096)); + v3_add_shadow_mem(info, 0x100000, 0x1000000, (addr_t)V3_AllocPages(4096)); } else { /* MEMORY HOOK TEST */ - add_shadow_region_passthrough(info, 0x100000, 0xa00000, (addr_t)V3_AllocPages(2304)); + v3_add_shadow_mem(info, 0x100000, 0xa00000, (addr_t)V3_AllocPages(2304)); v3_hook_write_mem(info, 0xa00000, 0xa01000, (addr_t)V3_AllocPages(1), passthrough_mem_write, NULL); - add_shadow_region_passthrough(info, 0xa01000, 0x1000000, (addr_t)V3_AllocPages(1791)); + v3_add_shadow_mem(info, 0xa01000, 0x1000000, (addr_t)V3_AllocPages(1791)); } - add_shadow_region_passthrough(info, 0x1000000, 0x8000000, (addr_t)V3_AllocPages(32768)); + v3_add_shadow_mem(info, 0x1000000, 0x8000000, (addr_t)V3_AllocPages(32768)); // test - give linux accesss to PCI space - PAD - add_shadow_region_passthrough(info, 0xc0000000,0xffffffff,0xc0000000); + //v3_add_shadow_mem(info, 0xc0000000,0xffffffff,0xc0000000); - print_shadow_map(&(info->mem_map)); + print_shadow_map(info); return 0; } @@ -203,6 +218,9 @@ static int setup_devices(struct guest_info * info, struct v3_vm_config * config_ struct vm_device * keyboard = v3_create_keyboard(); struct vm_device * pit = v3_create_pit(); struct vm_device * bochs_debug = v3_create_bochs_debug(); + 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 * serial = v3_create_serial(); struct vm_device * generic = NULL; @@ -230,6 +248,10 @@ static int setup_devices(struct guest_info * info, struct v3_vm_config * config_ v3_attach_device(info, keyboard); // v3_attach_device(info, serial); v3_attach_device(info, bochs_debug); + v3_attach_device(info, os_debug); + + v3_attach_device(info, apic); + v3_attach_device(info, ioapic); if (use_ramdisk) { v3_attach_device(info, ramdisk);