On 14.02.20 23:26, Christian Borntraeger wrote: > From: Janosch Frank <frankja@xxxxxxxxxxxxx> > > For protected VMs, the VCPU resets are done by the Ultravisor, as KVM > has no access to the VCPU registers. > > Note that the ultravisor will only accept a call for the exact reset > that has been requested. > > Signed-off-by: Janosch Frank <frankja@xxxxxxxxxxxxx> > Reviewed-by: Thomas Huth <thuth@xxxxxxxxxx> > Reviewed-by: David Hildenbrand <david@xxxxxxxxxx> > Reviewed-by: Cornelia Huck <cohuck@xxxxxxxxxx> > [borntraeger@xxxxxxxxxx: patch merging, splitting, fixing] > Signed-off-by: Christian Borntraeger <borntraeger@xxxxxxxxxx> > --- > arch/s390/include/asm/uv.h | 6 ++++++ > arch/s390/kvm/kvm-s390.c | 20 ++++++++++++++++++++ > 2 files changed, 26 insertions(+) > > diff --git a/arch/s390/include/asm/uv.h b/arch/s390/include/asm/uv.h > index d59825d95b9d..d4fb54231932 100644 > --- a/arch/s390/include/asm/uv.h > +++ b/arch/s390/include/asm/uv.h > @@ -36,7 +36,10 @@ > #define UVC_CMD_SET_SEC_CONF_PARAMS 0x0300 > #define UVC_CMD_UNPACK_IMG 0x0301 > #define UVC_CMD_VERIFY_IMG 0x0302 > +#define UVC_CMD_CPU_RESET 0x0310 > +#define UVC_CMD_CPU_RESET_INITIAL 0x0311 > #define UVC_CMD_PREPARE_RESET 0x0320 > +#define UVC_CMD_CPU_RESET_CLEAR 0x0321 > #define UVC_CMD_CPU_SET_STATE 0x0330 > #define UVC_CMD_SET_UNSHARE_ALL 0x0340 > #define UVC_CMD_PIN_PAGE_SHARED 0x0341 > @@ -59,8 +62,11 @@ enum uv_cmds_inst { > BIT_UVC_CMD_SET_SEC_PARMS = 11, > BIT_UVC_CMD_UNPACK_IMG = 13, > BIT_UVC_CMD_VERIFY_IMG = 14, > + BIT_UVC_CMD_CPU_RESET = 15, > + BIT_UVC_CMD_CPU_RESET_INITIAL = 16, > BIT_UVC_CMD_CPU_SET_STATE = 17, > BIT_UVC_CMD_PREPARE_RESET = 18, > + BIT_UVC_CMD_CPU_PERFORM_CLEAR_RESET = 19, > BIT_UVC_CMD_UNSHARE_ALL = 20, > BIT_UVC_CMD_PIN_PAGE_SHARED = 21, > BIT_UVC_CMD_UNPIN_PAGE_SHARED = 22, > diff --git a/arch/s390/kvm/kvm-s390.c b/arch/s390/kvm/kvm-s390.c > index 16af4d1a2c29..932f7f32e82f 100644 > --- a/arch/s390/kvm/kvm-s390.c > +++ b/arch/s390/kvm/kvm-s390.c > @@ -4695,6 +4695,7 @@ long kvm_arch_vcpu_ioctl(struct file *filp, > void __user *argp = (void __user *)arg; > int idx; > long r; > + u16 rc, rrc; > > vcpu_load(vcpu); > > @@ -4716,14 +4717,33 @@ long kvm_arch_vcpu_ioctl(struct file *filp, > case KVM_S390_CLEAR_RESET: > r = 0; > kvm_arch_vcpu_ioctl_clear_reset(vcpu); > + if (kvm_s390_pv_handle_cpu(vcpu)) { _protected checks please. (if not already converted in your tree :) ) -- Thanks, David / dhildenb