#include <palacios/vmm_lowlevel.h>
#include <palacios/svm_msr.h>
+#include <palacios/vmm_rbtree.h>
extern void v3_stgi();
- if (vm_info->io_map.num_ports > 0) {
- struct vmm_io_hook * iter;
+ if ( !RB_EMPTY_ROOT(&(vm_info->io_map)) ) {
+ struct v3_io_hook * iter;
+ struct rb_node * io_node = v3_rb_first(&(vm_info->io_map));
addr_t io_port_bitmap;
io_port_bitmap = (addr_t)V3_VAddr(V3_AllocPages(3));
//PrintDebug("Setting up IO Map at 0x%x\n", io_port_bitmap);
- FOREACH_IO_HOOK(vm_info->io_map, iter) {
+ do {
+ iter = rb_entry(io_node, struct v3_io_hook, tree_node);
+
ushort_t port = iter->port;
uchar_t * bitmap = (uchar_t *)io_port_bitmap;
bitmap += (port / 8);
// PrintDebug("Setting Bit for port 0x%x\n", port);
*bitmap |= 1 << (port % 8);
- }
+ } while ((io_node = v3_rb_next(io_node)));
//PrintDebugMemDump((uchar_t*)io_port_bitmap, PAGE_SIZE *2);
PrintDebug("RIP Linear: %p\n", (void *)linear_addr);
v3_print_segments(info);
v3_print_ctrl_regs(info);
+ if (info->shdw_pg_mode == SHADOW_PAGING) {
+ PrintDebug("Shadow Paging Guest Registers:\n");
+ PrintDebug("\tGuest CR0=%p\n", (void *)(addr_t)(info->shdw_pg_state.guest_cr0));
+ PrintDebug("\tGuest CR3=%p\n", (void *)(addr_t)(info->shdw_pg_state.guest_cr3));
+ // efer
+ // CR4
+ }
v3_print_GPRs(info);
+
+
PrintDebug("SVM Exit Code: %p\n", (void *)(addr_t)guest_ctrl->exit_code);