X-Git-Url: http://v3vee.org/palacios/gitweb/gitweb.cgi?a=blobdiff_plain;f=palacios%2Fsrc%2Fpalacios%2Fsvm_io.c;h=f6e9c62675bb4525ec80f9b03682df7372617a20;hb=bf091be03d4a623fa1a9b3151698a4564a8339ba;hp=ce126693d70876059e8466041f569e130f011d6d;hpb=1c63b0651a5d039076d8027c7cd87960e4151408;p=palacios.git diff --git a/palacios/src/palacios/svm_io.c b/palacios/src/palacios/svm_io.c index ce12669..f6e9c62 100644 --- a/palacios/src/palacios/svm_io.c +++ b/palacios/src/palacios/svm_io.c @@ -20,7 +20,6 @@ int handle_svm_io_in(struct guest_info * info) { return -1; } - PrintDebug("IN on port %d (0x%x)\n", io_info->port, io_info->port); if (io_info->sz8) { read_size = 1; @@ -30,6 +29,7 @@ int handle_svm_io_in(struct guest_info * info) { read_size = 4; } + PrintDebug("IN of %d bytes on port %d (0x%x)\n", read_size, io_info->port, io_info->port); if (hook->read(io_info->port, &(info->vm_regs.rax), read_size, hook->priv_data) != read_size) { // not sure how we handle errors..... @@ -104,9 +104,9 @@ int handle_svm_io_ins(struct guest_info * info) { // This value should be set depending on the host register size... mask = get_gpr_mask(info); - - PrintDebug("INS Aborted... Check implementation\n"); - return -1; + PrintDebug("INS io_info invalid address size, assuming 32, io_info=0x%x\n",*((uint_t*)(io_info))); + // PrintDebug("INS Aborted... Check implementation\n"); + //return -1; } if (io_info->rep) { @@ -161,7 +161,6 @@ int handle_svm_io_out(struct guest_info * info) { return -1; } - PrintDebug("OUT on port %d (0x%x)\n", io_info->port, io_info->port); if (io_info->sz8) { write_size = 1; @@ -171,6 +170,7 @@ int handle_svm_io_out(struct guest_info * info) { write_size = 4; } + PrintDebug("OUT of %d bytes on port %d (0x%x)\n", write_size, io_info->port, io_info->port); if (hook->write(io_info->port, &(info->vm_regs.rax), write_size, hook->priv_data) != write_size) { // not sure how we handle errors..... @@ -237,15 +237,22 @@ int handle_svm_io_outs(struct guest_info * info) { } else if (io_info->addr64) { mask = 0xffffffffffffffffLL; } else { + // This value should be set depending on the host register size... + mask = get_gpr_mask(info); + + PrintDebug("OUTS io_info invalid address size, assuming 32, io_info=0x%x\n",*((uint_t*)(io_info))); + // PrintDebug("INS Aborted... Check implementation\n"); + //return -1; // should never happen - PrintDebug("Invalid Address length\n"); - return -1; + //PrintDebug("Invalid Address length\n"); + //return -1; } if (io_info->rep) { rep_num = info->vm_regs.rcx & mask; } + PrintDebug("OUTS size=%d for %d steps\n", write_size, rep_num); while (rep_num > 0) { addr_t host_addr;