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.


moved debugging functions over to new page table callback interfaces
Jack Lange [Tue, 4 Nov 2008 00:36:43 +0000 (18:36 -0600)]
palacios/include/palacios/vmm_paging.h
palacios/src/palacios/vmm_paging.c
palacios/src/palacios/vmm_paging_debug.h
palacios/src/palacios/vmm_shadow_paging.c

index bce23af..e7f68f1 100644 (file)
@@ -563,27 +563,27 @@ int v3_drill_guest_pt_64(struct guest_info * info, v3_reg_t guest_cr3, addr_t va
 
 
 int v3_walk_host_pt_32(v3_reg_t host_cr3,
-                      void (*callback)(page_type_t type, addr_t vaddr, addr_t page_va, addr_t page_pa, void * private_data),
+                      int (*callback)(page_type_t type, addr_t vaddr, addr_t page_va, addr_t page_pa, void * private_data),
                       void * private_data);
 
 int v3_walk_host_pt_32pae(v3_reg_t host_cr3,
-                         void (*callback)(page_type_t type, addr_t vaddr, addr_t page_va, addr_t page_pa, void * private_data),
+                         int (*callback)(page_type_t type, addr_t vaddr, addr_t page_va, addr_t page_pa, void * private_data),
                          void * private_data);
 
 int v3_walk_host_pt_64(v3_reg_t host_cr3,
-                      void (*callback)(page_type_t type, addr_t vaddr, addr_t page_va, addr_t page_pa, void * private_data),
+                      int (*callback)(page_type_t type, addr_t vaddr, addr_t page_va, addr_t page_pa, void * private_data),
                       void * private_data);
 
 int v3_walk_guest_pt_32(struct guest_info * info, v3_reg_t guest_cr3,
-                       void (*callback)(page_type_t type, addr_t vaddr, addr_t page_va, addr_t page_pa, void * private_data),
+                       int (*callback)(page_type_t type, addr_t vaddr, addr_t page_va, addr_t page_pa, void * private_data),
                        void * private_data);
 
 int v3_walk_guest_pt_32pae(struct guest_info * info, v3_reg_t guest_cr3,
-                          void (*callback)(page_type_t type, addr_t vaddr, addr_t page_va, addr_t page_pa, void * private_data),
+                          int (*callback)(page_type_t type, addr_t vaddr, addr_t page_va, addr_t page_pa, void * private_data),
                           void * private_data);
 
 int v3_walk_guest_pt_64(struct guest_info * info, v3_reg_t guest_cr3,
-                       void (*callback)(page_type_t type, addr_t vaddr, addr_t page_va, addr_t page_pa, void * private_data),
+                       int (*callback)(page_type_t type, addr_t vaddr, addr_t page_va, addr_t page_pa, void * private_data),
                        void * private_data);
   
 
@@ -601,25 +601,14 @@ void delete_page_tables_64(pml4e64_t *  pml4);
 const uchar_t * v3_page_type_to_str(page_type_t type);
 
 
-//#include <palacios/vm_guest.h>
 
-void PrintDebugPageTables(pde32_t * pde);
+void PrintPTEntry(page_type_t type, addr_t vaddr, void * entry);
+void PrintHostPageTables(v3_vm_cpu_mode_t cpu_mode, addr_t cr3);
+void PrintGuestPageTables(struct guest_info * info, addr_t cr3);
+void PrintHostPageTree(v3_vm_cpu_mode_t cpu_mode, addr_t virtual_addr, addr_t cr3);
+void PrintGuestPageTree(struct guest_info * info, addr_t virtual_addr, addr_t cr3);
 
 
-void PrintPageTree(v3_vm_cpu_mode_t cpu_mode, addr_t virtual_addr, addr_t cr3);
-void PrintPageTree_64(addr_t virtual_addr, pml4e64_t * pml);
-
-
-void PrintPT32(addr_t starting_address, pte32_t * pte);
-void PrintPD32(pde32_t * pde);
-void PrintPTE32(addr_t virtual_address, pte32_t * pte);
-void PrintPDE32(addr_t virtual_address, pde32_t * pde);
-  
-void PrintDebugPageTables32PAE(pdpe32pae_t * pde);
-void PrintPTE32PAE(addr_t virtual_address, pte32pae_t * pte);
-void PrintPDE32PAE(addr_t virtual_address, pde32pae_t * pde);
-void PrintPTE64(addr_t virtual_address, pte64_t * pte);
-
 #endif // !__V3VEE__
 
 
index 7200b95..6f1bc14 100644 (file)
@@ -1564,7 +1564,7 @@ int v3_drill_guest_pt_64(struct guest_info * info, v3_reg_t guest_cr3, addr_t va
 
 
 int v3_walk_guest_pt_32(struct guest_info * info,  v3_reg_t guest_cr3,
-                       void (*callback)(page_type_t type, addr_t vaddr, addr_t page_ptr, addr_t page_pa, void * private_data),
+                       int (*callback)(page_type_t type, addr_t vaddr, addr_t page_ptr, addr_t page_pa, void * private_data),
                        void * private_data) {
   addr_t guest_pde_pa = CR3_TO_PDE32_PA(guest_cr3);
   pde32_t * guest_pde = NULL;
@@ -1640,7 +1640,7 @@ int v3_walk_guest_pt_32(struct guest_info * info,  v3_reg_t guest_cr3,
 
 
 int v3_walk_guest_pt_32pae(struct guest_info * info,  v3_reg_t guest_cr3,
-                          void (*callback)(page_type_t type, addr_t vaddr, addr_t page_ptr, addr_t page_pa, void * private_data),
+                          int (*callback)(page_type_t type, addr_t vaddr, addr_t page_ptr, addr_t page_pa, void * private_data),
                           void * private_data) {
   addr_t guest_pdpe_pa = CR3_TO_PDPE32PAE_PA(guest_cr3);
   pdpe32pae_t * guest_pdpe = NULL;
@@ -1737,7 +1737,7 @@ int v3_walk_guest_pt_32pae(struct guest_info * info,  v3_reg_t guest_cr3,
 
 
 int v3_walk_guest_pt_64(struct guest_info * info,  v3_reg_t guest_cr3,
-                       void (*callback)(page_type_t type, addr_t vaddr, addr_t page_ptr, addr_t page_pa, void * private_data),
+                       int (*callback)(page_type_t type, addr_t vaddr, addr_t page_ptr, addr_t page_pa, void * private_data),
                        void * private_data) {
   addr_t guest_pml_pa = CR3_TO_PML4E64_PA(guest_cr3);
   pml4e64_t * guest_pml = NULL;
@@ -1865,7 +1865,7 @@ int v3_walk_guest_pt_64(struct guest_info * info,  v3_reg_t guest_cr3,
 }
 
 int v3_walk_host_pt_32(v3_reg_t host_cr3,
-                      void (*callback)(page_type_t type, addr_t vaddr, addr_t page_ptr, addr_t page_pa, void * private_data),
+                      int (*callback)(page_type_t type, addr_t vaddr, addr_t page_ptr, addr_t page_pa, void * private_data),
                       void * private_data) {
   pde32_t * host_pde = (pde32_t *)CR3_TO_PDE32_VA(host_cr3);
   addr_t pde_pa = CR3_TO_PDE32_PA(host_cr3);
@@ -1915,7 +1915,7 @@ int v3_walk_host_pt_32(v3_reg_t host_cr3,
 
 
 int v3_walk_host_pt_32pae(v3_reg_t host_cr3,
-                         void (*callback)(page_type_t type, addr_t vaddr, addr_t page_ptr, addr_t page_pa, void * private_data),
+                         int (*callback)(page_type_t type, addr_t vaddr, addr_t page_ptr, addr_t page_pa, void * private_data),
                          void * private_data) {
   pdpe32pae_t * host_pdpe = (pdpe32pae_t *)CR3_TO_PDPE32PAE_VA(host_cr3);
   addr_t pdpe_pa = CR3_TO_PDPE32PAE_PA(host_cr3);
@@ -1974,7 +1974,7 @@ int v3_walk_host_pt_32pae(v3_reg_t host_cr3,
                        
 
 int v3_walk_host_pt_64(v3_reg_t host_cr3,
-                      void (*callback)(page_type_t type, addr_t vaddr, addr_t page_ptr, addr_t page_pa, void * private_data),
+                      int (*callback)(page_type_t type, addr_t vaddr, addr_t page_ptr, addr_t page_pa, void * private_data),
                       void * private_data) {
   pml4e64_t * host_pml = (pml4e64_t *)CR3_TO_PML4E64_VA(host_cr3);
   addr_t pml_pa = CR3_TO_PML4E64_PA(host_cr3);
index 84d2d1a..cba22a8 100644 (file)
@@ -8,7 +8,7 @@
  */
 
 
-void PrintPDE32(addr_t virtual_address, pde32_t * pde)
+static void PrintPDE32(addr_t virtual_address, pde32_t * pde)
 {
   PrintDebug("PDE %p -> %p : present=%x, writable=%x, user=%x, wt=%x, cd=%x, accessed=%x, reserved=%x, largePages=%x, globalPage=%x, kernelInfo=%x\n",
             (void *)virtual_address,
@@ -26,7 +26,7 @@ void PrintPDE32(addr_t virtual_address, pde32_t * pde)
 }
 
   
-void PrintPTE32(addr_t virtual_address, pte32_t * pte)
+static void PrintPTE32(addr_t virtual_address, pte32_t * pte)
 {
   PrintDebug("PTE %p -> %p : present=%x, writable=%x, user=%x, wt=%x, cd=%x, accessed=%x, dirty=%x, pteAttribute=%x, globalPage=%x, vmm_info=%x\n",
             (void *)virtual_address,
@@ -50,7 +50,7 @@ void PrintPTE32(addr_t virtual_address, pte32_t * pte)
 
 
 
-void PrintPDPE32PAE(addr_t virtual_address, pdpe32pae_t * pdpe)
+static void PrintPDPE32PAE(addr_t virtual_address, pdpe32pae_t * pdpe)
 {
   PrintDebug("PDPE %p -> %p : present=%x, wt=%x, cd=%x, accessed=%x, kernelInfo=%x\n",
             (void *)virtual_address,
@@ -62,7 +62,7 @@ void PrintPDPE32PAE(addr_t virtual_address, pdpe32pae_t * pdpe)
             pdpe->vmm_info);
 }
 
-void PrintPDE32PAE(addr_t virtual_address, pde32pae_t * pde)
+static void PrintPDE32PAE(addr_t virtual_address, pde32pae_t * pde)
 {
   PrintDebug("PDE %p -> %p : present=%x, writable=%x, user=%x, wt=%x, cd=%x, accessed=%x, largePages=%x, globalPage=%x, kernelInfo=%x\n",
             (void *)virtual_address,
@@ -79,7 +79,7 @@ void PrintPDE32PAE(addr_t virtual_address, pde32pae_t * pde)
 }
 
   
-void PrintPTE32PAE(addr_t virtual_address, pte32pae_t * pte)
+static void PrintPTE32PAE(addr_t virtual_address, pte32pae_t * pte)
 {
   PrintDebug("PTE %p -> %p : present=%x, writable=%x, user=%x, wt=%x, cd=%x, accessed=%x, dirty=%x, pteAttribute=%x, globalPage=%x, vmm_info=%x\n",
             (void *)virtual_address,
@@ -103,7 +103,7 @@ void PrintPTE32PAE(addr_t virtual_address, pte32pae_t * pte)
 
 
 
-void PrintPML4e64(addr_t virtual_address, pml4e64_t * pml)
+static void PrintPML4e64(addr_t virtual_address, pml4e64_t * pml)
 {
   PrintDebug("PML4e64 %p -> %p : present=%x, writable=%x, user=%x, wt=%x, cd=%x, accessed=%x, reserved=%x, kernelInfo=%x\n",
             (void *)virtual_address,
@@ -118,7 +118,7 @@ void PrintPML4e64(addr_t virtual_address, pml4e64_t * pml)
             pml->vmm_info);
 }
 
-void PrintPDPE64(addr_t virtual_address, pdpe64_t * pdpe)
+static void PrintPDPE64(addr_t virtual_address, pdpe64_t * pdpe)
 {
   PrintDebug("PDPE64 %p -> %p : present=%x, writable=%x, user=%x, wt=%x, cd=%x, accessed=%x, reserved=%x, largePages=%x, globalPage/zero=%x, kernelInfo=%x\n",
             (void *)virtual_address,
@@ -137,7 +137,7 @@ void PrintPDPE64(addr_t virtual_address, pdpe64_t * pdpe)
 
 
 
-void PrintPDE64(addr_t virtual_address, pde64_t * pde)
+static void PrintPDE64(addr_t virtual_address, pde64_t * pde)
 {
   PrintDebug("PDE64 %p -> %p : present=%x, writable=%x, user=%x, wt=%x, cd=%x, accessed=%x, reserved=%x, largePages=%x, globalPage=%x, kernelInfo=%x\n",
             (void *)virtual_address,
@@ -155,7 +155,7 @@ void PrintPDE64(addr_t virtual_address, pde64_t * pde)
 }
 
   
-void PrintPTE64(addr_t virtual_address, pte64_t * pte)
+static void PrintPTE64(addr_t virtual_address, pte64_t * pte)
 {
   PrintDebug("PTE64 %p -> %p : present=%x, writable=%x, user=%x, wt=%x, cd=%x, accessed=%x, dirty=%x, pteAttribute=%x, globalPage=%x, vmm_info=%x\n",
             (void *)virtual_address,
@@ -183,135 +183,154 @@ void PrintPTE64(addr_t virtual_address, pte64_t * pte)
 
 
 
-void PrintPD32(pde32_t * pde)
-{
-  int i;
-
-  PrintDebug("Page Directory at %p:\n", pde);
-  for (i = 0; (i < MAX_PDE32_ENTRIES); i++) { 
-    if ( pde[i].present) {
-      PrintPDE32((addr_t)(PAGE_SIZE * MAX_PTE32_ENTRIES * i), &(pde[i]));
-    }
-  }
-}
-
-void PrintPT32(addr_t starting_address, pte32_t * pte) 
-{
-  int i;
-
-  PrintDebug("Page Table at %p:\n", pte);
-  for (i = 0; (i < MAX_PTE32_ENTRIES) ; i++) { 
-    if (pte[i].present) {
-      PrintPTE32(starting_address + (PAGE_SIZE * i), &(pte[i]));
-    }
-  }
-}
 
 
+static int print_page_tree_cb(page_type_t type, addr_t vaddr, addr_t page_ptr, addr_t page_pa, void * private_data) {
 
+  switch (type) {
 
+    /* 64 Bit */
 
+  case PAGE_PML464:
+    {
+      pml4e64_t * pml = (pml4e64_t *)page_ptr;
+      PrintPML4e64(vaddr, &(pml[PML4E64_INDEX(vaddr)]));
+      break;
+    }
+  case PAGE_PDP64:
+    {
+      pdpe64_t * pdp = (pdpe64_t *)page_ptr;
+      PrintPDPE64(vaddr, &(pdp[PDPE64_INDEX(vaddr)]));
+      break;
+    }
+  case PAGE_PD64:
+    {
+      pde64_t * pd = (pde64_t *)page_ptr;
+      PrintPDE64(vaddr, &(pd[PDE64_INDEX(vaddr)]));
+      break;
+    }
+  case PAGE_PT64:
+    {
+      pte64_t * pt = (pte64_t *)page_ptr;
+      PrintPTE64(vaddr, &(pt[PTE64_INDEX(vaddr)]));
+      break;
+    }
 
+    /* 32 BIT PAE */
+    
+  case PAGE_PDP32PAE:
+    {
+      pdpe32pae_t * pdp = (pdpe32pae_t *)page_ptr;
+      PrintPDPE32PAE(vaddr, &(pdp[PDPE32PAE_INDEX(vaddr)]));
+      break;
+    }
+  case PAGE_PD32PAE:
+    {
+      pde32pae_t * pd = (pde32pae_t *)page_ptr;
+      PrintPDE32PAE(vaddr, &(pd[PDE32PAE_INDEX(vaddr)]));
+      break;
+    }
+  case PAGE_PT32PAE:
+    {
+      pte32pae_t * pt = (pte32pae_t *)page_ptr;
+      PrintPTE32PAE(vaddr, &(pt[PTE32PAE_INDEX(vaddr)]));
+      break;
+    }
 
-void PrintDebugPageTables(pde32_t * pde)
-{
-  int i;
-  
-  PrintDebug("Dumping the pages starting with the pde page at %p\n", pde);
+    /* 32 Bit */
 
-  for (i = 0; (i < MAX_PDE32_ENTRIES); i++) { 
-    if (pde[i].present) {
-      PrintPDE32((addr_t)(PAGE_SIZE * MAX_PTE32_ENTRIES * i), &(pde[i]));
-      PrintPT32((addr_t)(PAGE_SIZE * MAX_PTE32_ENTRIES * i), (pte32_t *)V3_VAddr((void *)(addr_t)(pde[i].pt_base_addr << PAGE_POWER)));
+  case PAGE_PD32:
+    {
+      pde32_t * pd = (pde32_t *)page_ptr;
+      PrintPDE32(vaddr, &(pd[PDE32_INDEX(vaddr)]));
+      break;
     }
+  case PAGE_PT32:
+    {
+      pte32_t * pt = (pte32_t *)page_ptr;
+      PrintPTE32(vaddr, &(pt[PTE32_INDEX(vaddr)]));
+      break;
+    }
+  default:
+    PrintDebug("%s %p->%p \n", v3_page_type_to_str(type), (void *)vaddr, (void *)page_pa);
+    break;
   }
-}
-    
-
 
+  return 0;
+}
 
-void PrintDebugPageTables32PAE(pdpe32pae_t * pdpe)
-{
-  int i, j, k;
-  pde32pae_t * pde;
-  pte32pae_t * pte;
-  addr_t virtual_addr = 0;
-
-  PrintDebug("Dumping the pages starting with the pde page at %p\n", pdpe);
-
-  for (i = 0; (i < MAX_PDPE32PAE_ENTRIES); i++) { 
-
-    if (pdpe[i].present) {
-      pde = (pde32pae_t *)V3_VAddr((void *)(addr_t)BASE_TO_PAGE_ADDR(pdpe[i].pd_base_addr));
-
-      PrintPDPE32PAE(virtual_addr, &(pdpe[i]));
-
-      for (j = 0; j < MAX_PDE32PAE_ENTRIES; j++) {
 
-       if (pde[j].present) {
-         pte = (pte32pae_t *)V3_VAddr((void *)(addr_t)BASE_TO_PAGE_ADDR(pde[j].pt_base_addr));
 
-         PrintPDE32PAE(virtual_addr, &(pde[j]));
+void PrintPTEntry(page_type_t type, addr_t vaddr, void * entry) {
+  print_page_tree_cb(type, vaddr, PAGE_ADDR_4KB((addr_t)entry), 0, NULL);
+}
 
-         for (k = 0; k < MAX_PTE32PAE_ENTRIES; k++) {
-           if (pte[k].present) {
-             PrintPTE32PAE(virtual_addr, &(pte[k]));
-           }
 
-           virtual_addr += PAGE_SIZE;
-         }
-       } else {
-         virtual_addr += PAGE_SIZE * MAX_PTE32PAE_ENTRIES;
-       }
-      }
-    } else {
-      virtual_addr += PAGE_SIZE * MAX_PDE32PAE_ENTRIES * MAX_PTE32PAE_ENTRIES;
-    }
+void PrintHostPageTables(v3_vm_cpu_mode_t cpu_mode, addr_t cr3) {
+  switch (cpu_mode) {
+  case PROTECTED:
+    v3_walk_host_pt_32(cr3, print_page_tree_cb, NULL);
+  case PROTECTED_PAE:
+    v3_walk_host_pt_32pae(cr3, print_page_tree_cb, NULL);
+  case LONG:
+  case LONG_32_COMPAT:
+  case LONG_16_COMPAT:
+    v3_walk_host_pt_64(cr3, print_page_tree_cb, NULL);
+    break;
+  default:
+    PrintError("Unsupported CPU MODE %s\n", v3_cpu_mode_to_str(cpu_mode));
+    break;
   }
 }
-    
 
 
-
-
-void PrintPageTree_64(addr_t virtual_addr, pml4e64_t * pml) {
-  uint_t pml4_index = PML4E64_INDEX(virtual_addr);
-  uint_t pdpe_index = PDPE64_INDEX(virtual_addr);
-  uint_t pde_index = PDE64_INDEX(virtual_addr);
-  uint_t pte_index = PTE64_INDEX(virtual_addr);
-
-  PrintPML4e64(virtual_addr, &(pml[pml4_index]));
-  if (pml[pml4_index].present) {
-    pdpe64_t * pdpe = (pdpe64_t *)V3_VAddr((void *)(addr_t)BASE_TO_PAGE_ADDR(pml[pml4_index].pdp_base_addr));
-    PrintPDPE64(virtual_addr, &(pdpe[pdpe_index]));
-
-    if (pdpe[pdpe_index].present) {
-      pde64_t * pde = (pde64_t *)V3_VAddr((void *)(addr_t)BASE_TO_PAGE_ADDR(pdpe[pdpe_index].pd_base_addr));
-      PrintPDE64(virtual_addr, &(pde[pde_index]));
-      
-      if (pde[pde_index].present) {
-       pte64_t * pte = (pte64_t *)V3_VAddr((void *)(addr_t)BASE_TO_PAGE_ADDR(pde[pde_index].pt_base_addr));
-       PrintPTE64(virtual_addr, &(pte[pte_index]));
-      }
-
-    }
-
+void PrintGuestPageTables(struct guest_info * info, addr_t cr3) {
+  switch (info->cpu_mode) {
+  case PROTECTED:
+    v3_walk_guest_pt_32(info, cr3, print_page_tree_cb, NULL);
+  case PROTECTED_PAE:
+    v3_walk_guest_pt_32pae(info, cr3, print_page_tree_cb, NULL);
+  case LONG:
+  case LONG_32_COMPAT:
+  case LONG_16_COMPAT:
+    v3_walk_guest_pt_64(info, cr3, print_page_tree_cb, NULL);
+    break;
+  default:
+    PrintError("Unsupported CPU MODE %s\n", v3_cpu_mode_to_str(info->cpu_mode));
+    break;
   }
-
 }
 
-
-
-
-void PrintPageTree(v3_vm_cpu_mode_t cpu_mode, addr_t virtual_addr, addr_t cr3) {
+void PrintHostPageTree(v3_vm_cpu_mode_t cpu_mode, addr_t virtual_addr, addr_t cr3) {
   switch (cpu_mode) {
+  case PROTECTED:
+    v3_drill_host_pt_32(cr3, virtual_addr, print_page_tree_cb, NULL);
+  case PROTECTED_PAE:
+    v3_drill_host_pt_32pae(cr3, virtual_addr, print_page_tree_cb, NULL);
+  case LONG:
+  case LONG_32_COMPAT:
+  case LONG_16_COMPAT:
+    v3_drill_host_pt_64(cr3, virtual_addr, print_page_tree_cb, NULL);
+    break;
+  default:
+    PrintError("Unsupported CPU MODE %s\n", v3_cpu_mode_to_str(cpu_mode));
+    break;
+  }
+}
+
+void PrintGuestPageTree(struct guest_info * info, addr_t virtual_addr, addr_t cr3) {
+  switch (info->cpu_mode) {
+  case PROTECTED:
+    v3_drill_guest_pt_32(info, cr3, virtual_addr, print_page_tree_cb, NULL);
+  case PROTECTED_PAE:
+    v3_drill_guest_pt_32pae(info, cr3, virtual_addr, print_page_tree_cb, NULL);
   case LONG:
   case LONG_32_COMPAT:
   case LONG_16_COMPAT:
-    PrintPageTree_64(virtual_addr, CR3_TO_PML4E64_VA(cr3));
+    v3_drill_guest_pt_64(info, cr3, virtual_addr, print_page_tree_cb, NULL);
     break;
   default:
-    PrintError("Unsupported CPU MODE %d\n", cpu_mode);
+    PrintError("Unsupported CPU MODE %s\n", v3_cpu_mode_to_str(info->cpu_mode));
     break;
   }
 }
index 894ecc4..d58fed7 100644 (file)
@@ -228,8 +228,9 @@ static int activate_shadow_pt_32pae(struct guest_info * info) {
   return -1;
 }
 
-static void activate_shadow_pt_64_cb(page_type_t type, addr_t vaddr, addr_t page_ptr, addr_t page_pa, void * private_data) {
+static int activate_shadow_pt_64_cb(page_type_t type, addr_t vaddr, addr_t page_ptr, addr_t page_pa, void * private_data) {
   PrintDebug("CB: Page: %p->%p (host_ptr=%p), Type: %s\n", (void *)vaddr, (void *)page_pa, (void *)page_ptr, v3_page_type_to_str(type));
+  return 0;
 }
 
 
@@ -314,7 +315,8 @@ int v3_handle_shadow_pagefault(struct guest_info * info, addr_t fault_addr, pf_e
     // If paging is not turned on we need to handle the special cases
 
 #ifdef DEBUG_SHADOW_PAGING
-    PrintPageTree(info->cpu_mode, fault_addr, info->ctrl_regs.cr3);
+    PrintHostPageTree(info->cpu_mode, fault_addr, info->ctrl_regs.cr3);
+    PrintGuestPageTree(info, fault_addr, info->shdw_pg_state.guest_cr3);
 #endif
 
     return handle_special_page_fault(info, fault_addr, fault_addr, error_code);
@@ -576,9 +578,9 @@ static int handle_shadow_pagefault_32(struct guest_info * info, addr_t fault_add
       PrintDebug("Manual Says to inject page fault into guest\n");
 #ifdef DEBUG_SHADOW_PAGING
       PrintDebug("Guest PDE: (access=%d)\n\t", guest_pde_access);
-      PrintPDE32(fault_addr, guest_pde);
+      PrintPTEntry(PAGE_PD32, fault_addr, guest_pde);
       PrintDebug("Shadow PDE: (access=%d)\n\t", shadow_pde_access);
-      PrintPDE32(fault_addr, shadow_pde);
+      PrintPTEntry(PAGE_PD32, fault_addr, shadow_pde);
 #endif
 
       return 0; 
@@ -703,9 +705,9 @@ static int handle_shadow_pte32_fault(struct guest_info * info,
   
 #ifdef DEBUG_SHADOW_PAGING
   PrintDebug("Guest PTE: (access=%d)\n\t", guest_pte_access);
-  PrintPTE32(fault_addr, guest_pte);
+  PrintPTEntry(PAGE_PT32, fault_addr, guest_pte);
   PrintDebug("Shadow PTE: (access=%d)\n\t", shadow_pte_access);
-  PrintPTE32(fault_addr, shadow_pte);
+  PrintPTEntry(PAGE_PT32, fault_addr, shadow_pte);
 #endif
   
   /* Was the page fault caused by the Guest's page tables? */
@@ -905,7 +907,7 @@ int v3_handle_shadow_invlpg(struct guest_info * info)
       
 #ifdef DEBUG_SHADOW_PAGING
       PrintDebug("Setting not present\n");
-      PrintPTE32(first_operand, shadow_pte );
+      PrintPTEntry(PAGE_PT32, first_operand, shadow_pte);
 #endif
       
       shadow_pte->present = 0;