X-Git-Url: http://v3vee.org/palacios/gitweb/gitweb.cgi?a=blobdiff_plain;f=linux_module%2Fvm.c;h=440ff69f660c391e9d8b36f83080ed9be11f22cf;hb=2cb41f7db5b9f89113432d6b3daff4807ba8e5f2;hp=d352c36439805e251cca9a936417221994685e31;hpb=8e4b89f4bc2e252e0c1bc7cbc52bf1f4ae2e538c;p=palacios.git diff --git a/linux_module/vm.c b/linux_module/vm.c index d352c36..440ff69 100644 --- a/linux_module/vm.c +++ b/linux_module/vm.c @@ -195,6 +195,38 @@ static long v3_vm_ioctl(struct file * filp, v3_simulate_vm(guest->v3_ctx, arg); break; } + case V3_VM_RESET: { + struct v3_reset_cmd r; + void __user * argp = (void __user *)arg; + v3_vm_reset_type t; + uint32_t core_range[2]; + + if (copy_from_user(&r, argp, sizeof(struct v3_reset_cmd))) { + WARNING("Copy from user error getting reset info\n"); + return -EFAULT; + } + + if (r.type==V3_RESET_VM_ALL) { + t=V3_VM_RESET_ALL; + } else if (r.type==V3_RESET_VM_HRT) { + t=V3_VM_RESET_HRT; + } else if (r.type==V3_RESET_VM_ROS) { + t=V3_VM_RESET_ROS; + } else if (r.type==V3_RESET_VM_CORE_RANGE){ + t=V3_VM_RESET_CORE_RANGE; + core_range[0]=r.first_core; + core_range[1]=r.first_core+r.num_cores-1; + } else { + ERROR("Unknown reset type %d requested\n",r.type); + return -EFAULT; + } + + if (v3_reset_vm_extended(guest->v3_ctx, t, core_range) == -1) { + WARNING("Error reseting VM\n"); + return -EFAULT; + } + break; + } #ifdef V3_CONFIG_CHECKPOINT