Message ID | 20200224114107.4646-30-borntraeger@de.ibm.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | KVM: s390: Add support for protected VMs | expand |
On 24.02.20 12:41, Christian Borntraeger wrote: > From: Janosch Frank <frankja@linux.ibm.com> > > Code 5 for the set cpu state UV call tells the UV to load a PSW from > the SE header (first IPL) or from guest location 0x0 (diag 308 subcode > 0/1). Also it sets the cpu into operating state afterwards, so we can > start it. > > Signed-off-by: Janosch Frank <frankja@linux.ibm.com> > Reviewed-by: Thomas Huth <thuth@redhat.com> > Reviewed-by: Cornelia Huck <cohuck@redhat.com> > [borntraeger@de.ibm.com: patch merging, splitting, fixing] > Signed-off-by: Christian Borntraeger <borntraeger@de.ibm.com> > --- > arch/s390/include/asm/uv.h | 1 + > arch/s390/kvm/kvm-s390.c | 6 ++++++ > 2 files changed, 7 insertions(+) > > diff --git a/arch/s390/include/asm/uv.h b/arch/s390/include/asm/uv.h > index 99e1a14ef909..4945e44e1528 100644 > --- a/arch/s390/include/asm/uv.h > +++ b/arch/s390/include/asm/uv.h > @@ -169,6 +169,7 @@ struct uv_cb_unp { > #define PV_CPU_STATE_OPR 1 > #define PV_CPU_STATE_STP 2 > #define PV_CPU_STATE_CHKSTP 3 > +#define PV_CPU_STATE_OPR_LOAD 5 > > struct uv_cb_cpu_set_state { > struct uv_cb_header header; > diff --git a/arch/s390/kvm/kvm-s390.c b/arch/s390/kvm/kvm-s390.c > index f10cce6fc5e0..9c0ab66128fd 100644 > --- a/arch/s390/kvm/kvm-s390.c > +++ b/arch/s390/kvm/kvm-s390.c > @@ -3728,6 +3728,12 @@ int kvm_arch_vcpu_ioctl_set_mpstate(struct kvm_vcpu *vcpu, > rc = kvm_s390_vcpu_start(vcpu); > break; > case KVM_MP_STATE_LOAD: > + if (!kvm_s390_pv_cpu_is_protected(vcpu)) { > + rc = -ENXIO; > + break; > + } > + rc = kvm_s390_pv_set_cpu_state(vcpu, PV_CPU_STATE_OPR_LOAD); > + break; > case KVM_MP_STATE_CHECK_STOP: > /* fall through - CHECK_STOP and LOAD are not supported yet */ > default: > Fits in nicely :) Reviewed-by: David Hildenbrand <david@redhat.com>
On 24.02.20 20:08, David Hildenbrand wrote: > On 24.02.20 12:41, Christian Borntraeger wrote: >> From: Janosch Frank <frankja@linux.ibm.com> >> >> Code 5 for the set cpu state UV call tells the UV to load a PSW from >> the SE header (first IPL) or from guest location 0x0 (diag 308 subcode >> 0/1). Also it sets the cpu into operating state afterwards, so we can >> start it. >> >> Signed-off-by: Janosch Frank <frankja@linux.ibm.com> >> Reviewed-by: Thomas Huth <thuth@redhat.com> >> Reviewed-by: Cornelia Huck <cohuck@redhat.com> >> [borntraeger@de.ibm.com: patch merging, splitting, fixing] >> Signed-off-by: Christian Borntraeger <borntraeger@de.ibm.com> >> --- >> arch/s390/include/asm/uv.h | 1 + >> arch/s390/kvm/kvm-s390.c | 6 ++++++ >> 2 files changed, 7 insertions(+) >> >> diff --git a/arch/s390/include/asm/uv.h b/arch/s390/include/asm/uv.h >> index 99e1a14ef909..4945e44e1528 100644 >> --- a/arch/s390/include/asm/uv.h >> +++ b/arch/s390/include/asm/uv.h >> @@ -169,6 +169,7 @@ struct uv_cb_unp { >> #define PV_CPU_STATE_OPR 1 >> #define PV_CPU_STATE_STP 2 >> #define PV_CPU_STATE_CHKSTP 3 >> +#define PV_CPU_STATE_OPR_LOAD 5 >> >> struct uv_cb_cpu_set_state { >> struct uv_cb_header header; >> diff --git a/arch/s390/kvm/kvm-s390.c b/arch/s390/kvm/kvm-s390.c >> index f10cce6fc5e0..9c0ab66128fd 100644 >> --- a/arch/s390/kvm/kvm-s390.c >> +++ b/arch/s390/kvm/kvm-s390.c >> @@ -3728,6 +3728,12 @@ int kvm_arch_vcpu_ioctl_set_mpstate(struct kvm_vcpu *vcpu, >> rc = kvm_s390_vcpu_start(vcpu); >> break; >> case KVM_MP_STATE_LOAD: >> + if (!kvm_s390_pv_cpu_is_protected(vcpu)) { >> + rc = -ENXIO; >> + break; >> + } >> + rc = kvm_s390_pv_set_cpu_state(vcpu, PV_CPU_STATE_OPR_LOAD); >> + break; >> case KVM_MP_STATE_CHECK_STOP: >> /* fall through - CHECK_STOP and LOAD are not supported yet */ >> default: >> > > Fits in nicely :) > > Reviewed-by: David Hildenbrand <david@redhat.com> Thanks. FWIW, I will drop Thomas and Conny RB as this was for the older version. >
On Tue, 25 Feb 2020 08:53:01 +0100 Christian Borntraeger <borntraeger@de.ibm.com> wrote: > On 24.02.20 20:08, David Hildenbrand wrote: > > On 24.02.20 12:41, Christian Borntraeger wrote: > >> From: Janosch Frank <frankja@linux.ibm.com> > >> > >> Code 5 for the set cpu state UV call tells the UV to load a PSW from > >> the SE header (first IPL) or from guest location 0x0 (diag 308 subcode > >> 0/1). Also it sets the cpu into operating state afterwards, so we can > >> start it. > >> > >> Signed-off-by: Janosch Frank <frankja@linux.ibm.com> > >> Reviewed-by: Thomas Huth <thuth@redhat.com> > >> Reviewed-by: Cornelia Huck <cohuck@redhat.com> > >> [borntraeger@de.ibm.com: patch merging, splitting, fixing] > >> Signed-off-by: Christian Borntraeger <borntraeger@de.ibm.com> > >> --- > >> arch/s390/include/asm/uv.h | 1 + > >> arch/s390/kvm/kvm-s390.c | 6 ++++++ > >> 2 files changed, 7 insertions(+) > >> > >> diff --git a/arch/s390/include/asm/uv.h b/arch/s390/include/asm/uv.h > >> index 99e1a14ef909..4945e44e1528 100644 > >> --- a/arch/s390/include/asm/uv.h > >> +++ b/arch/s390/include/asm/uv.h > >> @@ -169,6 +169,7 @@ struct uv_cb_unp { > >> #define PV_CPU_STATE_OPR 1 > >> #define PV_CPU_STATE_STP 2 > >> #define PV_CPU_STATE_CHKSTP 3 > >> +#define PV_CPU_STATE_OPR_LOAD 5 > >> > >> struct uv_cb_cpu_set_state { > >> struct uv_cb_header header; > >> diff --git a/arch/s390/kvm/kvm-s390.c b/arch/s390/kvm/kvm-s390.c > >> index f10cce6fc5e0..9c0ab66128fd 100644 > >> --- a/arch/s390/kvm/kvm-s390.c > >> +++ b/arch/s390/kvm/kvm-s390.c > >> @@ -3728,6 +3728,12 @@ int kvm_arch_vcpu_ioctl_set_mpstate(struct kvm_vcpu *vcpu, > >> rc = kvm_s390_vcpu_start(vcpu); > >> break; > >> case KVM_MP_STATE_LOAD: > >> + if (!kvm_s390_pv_cpu_is_protected(vcpu)) { > >> + rc = -ENXIO; > >> + break; > >> + } > >> + rc = kvm_s390_pv_set_cpu_state(vcpu, PV_CPU_STATE_OPR_LOAD); > >> + break; > >> case KVM_MP_STATE_CHECK_STOP: > >> /* fall through - CHECK_STOP and LOAD are not supported yet */ > >> default: > >> > > > > Fits in nicely :) > > > > Reviewed-by: David Hildenbrand <david@redhat.com> > > Thanks. FWIW, I will drop Thomas and Conny RB as this was for the older version. You can have mine back: Reviewed-by: Cornelia Huck <cohuck@redhat.com>
diff --git a/arch/s390/include/asm/uv.h b/arch/s390/include/asm/uv.h index 99e1a14ef909..4945e44e1528 100644 --- a/arch/s390/include/asm/uv.h +++ b/arch/s390/include/asm/uv.h @@ -169,6 +169,7 @@ struct uv_cb_unp { #define PV_CPU_STATE_OPR 1 #define PV_CPU_STATE_STP 2 #define PV_CPU_STATE_CHKSTP 3 +#define PV_CPU_STATE_OPR_LOAD 5 struct uv_cb_cpu_set_state { struct uv_cb_header header; diff --git a/arch/s390/kvm/kvm-s390.c b/arch/s390/kvm/kvm-s390.c index f10cce6fc5e0..9c0ab66128fd 100644 --- a/arch/s390/kvm/kvm-s390.c +++ b/arch/s390/kvm/kvm-s390.c @@ -3728,6 +3728,12 @@ int kvm_arch_vcpu_ioctl_set_mpstate(struct kvm_vcpu *vcpu, rc = kvm_s390_vcpu_start(vcpu); break; case KVM_MP_STATE_LOAD: + if (!kvm_s390_pv_cpu_is_protected(vcpu)) { + rc = -ENXIO; + break; + } + rc = kvm_s390_pv_set_cpu_state(vcpu, PV_CPU_STATE_OPR_LOAD); + break; case KVM_MP_STATE_CHECK_STOP: /* fall through - CHECK_STOP and LOAD are not supported yet */ default: