Palacios Public Git Repository

To checkout Palacios execute

  git clone http://v3vee.org/palacios/palacios.web/palacios.git
This will give you the master branch. You probably want the devel branch or one of the release branches. To switch to the devel branch, simply execute
  cd palacios
  git checkout --track -b devel origin/devel
The other branches are similar.


Generalization of constraints on page allocation and implementation/use
[palacios.git] / palacios / src / palacios / mmu / vmm_shdw_pg_tlb.c
index 02be430..d6f77d8 100644 (file)
@@ -12,6 +12,8 @@
  * All rights reserved.
  *
  * Author: Jack Lange <jarusl@cs.northwestern.edu>
+ * Author: Chunxiao Diao <chunxiaodiao2012@u.northwestern.edu> 
+ *
  *
  * This is free software.  You are permitted to use,
  * redistribute, and modify it as specified in the file "V3VEE_LICENSE".
@@ -53,6 +55,7 @@ static struct shadow_page_data * create_new_shadow_pt(struct guest_info * core);
 #include "vmm_shdw_pg_tlb_64.h"
 
 
+
 static struct shadow_page_data * create_new_shadow_pt(struct guest_info * core) {
     struct v3_shdw_pg_state * state = &(core->shdw_pg_state);
     struct vtlb_local_state * impl_state = (struct vtlb_local_state *)(state->local_impl_data);
@@ -88,7 +91,7 @@ static struct shadow_page_data * create_new_shadow_pt(struct guest_info * core)
        return NULL;
     }
 
-    page_tail->page_pa = (addr_t)V3_AllocPages(1);
+    page_tail->page_pa = (addr_t)V3_AllocPagesExtended(1,PAGE_SIZE_4KB,-1,0,0);
 
     if (!page_tail->page_pa) {
        PrintError(core->vm_info, core, "Cannot allocate page\n");
@@ -167,15 +170,19 @@ static int vtlb_activate_shdw_pt(struct guest_info * core) {
 
        case PROTECTED:
            return activate_shadow_pt_32(core);
+           break;
        case PROTECTED_PAE:
            return activate_shadow_pt_32pae(core);
+           break;
        case LONG:
        case LONG_32_COMPAT:
        case LONG_16_COMPAT:
            return activate_shadow_pt_64(core);
+           break;
        default:
            PrintError(core->vm_info, core, "Invalid CPU mode: %s\n", v3_cpu_mode_to_str(v3_get_vm_cpu_mode(core)));
            return -1;
+           break;
     }
 
     return 0;
@@ -187,7 +194,7 @@ static int vtlb_invalidate_shdw_pt(struct guest_info * core) {
 
 
 static int vtlb_handle_pf(struct guest_info * core, addr_t fault_addr, pf_error_t error_code) {
-
+  
        switch (v3_get_vm_cpu_mode(core)) {
            case PROTECTED:
                return handle_shadow_pagefault_32(core, fault_addr, error_code);
@@ -211,15 +218,19 @@ static int vtlb_handle_invlpg(struct guest_info * core, addr_t vaddr) {
     switch (v3_get_vm_cpu_mode(core)) {
        case PROTECTED:
            return handle_shadow_invlpg_32(core, vaddr);
+           break;
        case PROTECTED_PAE:
            return handle_shadow_invlpg_32pae(core, vaddr);
+           break;
        case LONG:
        case LONG_32_COMPAT:
        case LONG_16_COMPAT:
            return handle_shadow_invlpg_64(core, vaddr);
+           break;
        default:
            PrintError(core->vm_info, core, "Invalid CPU mode: %s\n", v3_cpu_mode_to_str(v3_get_vm_cpu_mode(core)));
            return -1;
+           break;
     }
 }