Message ID | 20220204155349.63238-9-imbrenda@linux.ibm.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | KVM: s390: pv: implement lazy destroy for reboot | expand |
On 2/4/22 16:53, Claudio Imbrenda wrote: > The functions kvm_s390_cpus_from_pv needs to be called from pv.c, so > make it global. KVM: s390: pv: Add kvm_s390_cpus_from_pv to kvm-s390.h and provide documentation Future changes make it necessary to call this function from pv.c. While we're add it let's properly document kvm_s390_cpus_from_pv() and kvm_s390_cpus_to_pv(). Also could you swap patches 8 and 9 so this one is closer to patch #10? Reviewed-by: Janosch Frank <frankja@linux.ibm.com> > > Take the opportunity to add documentation. > > Signed-off-by: Claudio Imbrenda <imbrenda@linux.ibm.com> > --- > arch/s390/kvm/kvm-s390.c | 26 +++++++++++++++++++++++++- > arch/s390/kvm/kvm-s390.h | 1 + > 2 files changed, 26 insertions(+), 1 deletion(-) > > diff --git a/arch/s390/kvm/kvm-s390.c b/arch/s390/kvm/kvm-s390.c > index 1a788f45d691..0fc8d1aec396 100644 > --- a/arch/s390/kvm/kvm-s390.c > +++ b/arch/s390/kvm/kvm-s390.c > @@ -2175,7 +2175,20 @@ static int kvm_s390_set_cmma_bits(struct kvm *kvm, > return r; > } > > -static int kvm_s390_cpus_from_pv(struct kvm *kvm, u16 *rcp, u16 *rrcp) > +/** > + * kvm_s390_cpus_from_pv - Convert all protected vCPUs in a protected VM to > + * non protected. > + * @kvm the VM whose protected vCPUs are to be converted > + * @rcp return value for the RC field of the UVC (in case of error) > + * @rrcp return value for the RRC field of the UVC (in case of error) > + * > + * Does not stop in case of error, tries to convert as many > + * CPUs as possible. In case of error, the RC and RRC of the last error are > + * returned. > + * > + * Return: 0 in case of success, otherwise -EIO > + */ > +int kvm_s390_cpus_from_pv(struct kvm *kvm, u16 *rcp, u16 *rrcp) > { > struct kvm_vcpu *vcpu; > u16 rc, rrc; > @@ -2202,6 +2215,17 @@ static int kvm_s390_cpus_from_pv(struct kvm *kvm, u16 *rcp, u16 *rrcp) > return ret; > } > > +/** > + * kvm_s390_cpus_to_pv - Convert all non-protected vCPUs in a protected VM > + * to protected. > + * @kvm the VM whose protected vCPUs are to be converted > + * @rcp return value for the RC field of the UVC (in case of error) > + * @rrcp return value for the RRC field of the UVC (in case of error) > + * > + * Tries to undo the conversion in case of error. > + * > + * Return: 0 in case of success, otherwise -EIO > + */ > static int kvm_s390_cpus_to_pv(struct kvm *kvm, u16 *rc, u16 *rrc) > { > unsigned long i; > diff --git a/arch/s390/kvm/kvm-s390.h b/arch/s390/kvm/kvm-s390.h > index 098831e815e6..9276d910631b 100644 > --- a/arch/s390/kvm/kvm-s390.h > +++ b/arch/s390/kvm/kvm-s390.h > @@ -365,6 +365,7 @@ int kvm_s390_vcpu_setup_cmma(struct kvm_vcpu *vcpu); > void kvm_s390_vcpu_unsetup_cmma(struct kvm_vcpu *vcpu); > void kvm_s390_set_cpu_timer(struct kvm_vcpu *vcpu, __u64 cputm); > __u64 kvm_s390_get_cpu_timer(struct kvm_vcpu *vcpu); > +int kvm_s390_cpus_from_pv(struct kvm *kvm, u16 *rcp, u16 *rrcp); > > /* implemented in diag.c */ > int kvm_s390_handle_diag(struct kvm_vcpu *vcpu); >
diff --git a/arch/s390/kvm/kvm-s390.c b/arch/s390/kvm/kvm-s390.c index 1a788f45d691..0fc8d1aec396 100644 --- a/arch/s390/kvm/kvm-s390.c +++ b/arch/s390/kvm/kvm-s390.c @@ -2175,7 +2175,20 @@ static int kvm_s390_set_cmma_bits(struct kvm *kvm, return r; } -static int kvm_s390_cpus_from_pv(struct kvm *kvm, u16 *rcp, u16 *rrcp) +/** + * kvm_s390_cpus_from_pv - Convert all protected vCPUs in a protected VM to + * non protected. + * @kvm the VM whose protected vCPUs are to be converted + * @rcp return value for the RC field of the UVC (in case of error) + * @rrcp return value for the RRC field of the UVC (in case of error) + * + * Does not stop in case of error, tries to convert as many + * CPUs as possible. In case of error, the RC and RRC of the last error are + * returned. + * + * Return: 0 in case of success, otherwise -EIO + */ +int kvm_s390_cpus_from_pv(struct kvm *kvm, u16 *rcp, u16 *rrcp) { struct kvm_vcpu *vcpu; u16 rc, rrc; @@ -2202,6 +2215,17 @@ static int kvm_s390_cpus_from_pv(struct kvm *kvm, u16 *rcp, u16 *rrcp) return ret; } +/** + * kvm_s390_cpus_to_pv - Convert all non-protected vCPUs in a protected VM + * to protected. + * @kvm the VM whose protected vCPUs are to be converted + * @rcp return value for the RC field of the UVC (in case of error) + * @rrcp return value for the RRC field of the UVC (in case of error) + * + * Tries to undo the conversion in case of error. + * + * Return: 0 in case of success, otherwise -EIO + */ static int kvm_s390_cpus_to_pv(struct kvm *kvm, u16 *rc, u16 *rrc) { unsigned long i; diff --git a/arch/s390/kvm/kvm-s390.h b/arch/s390/kvm/kvm-s390.h index 098831e815e6..9276d910631b 100644 --- a/arch/s390/kvm/kvm-s390.h +++ b/arch/s390/kvm/kvm-s390.h @@ -365,6 +365,7 @@ int kvm_s390_vcpu_setup_cmma(struct kvm_vcpu *vcpu); void kvm_s390_vcpu_unsetup_cmma(struct kvm_vcpu *vcpu); void kvm_s390_set_cpu_timer(struct kvm_vcpu *vcpu, __u64 cputm); __u64 kvm_s390_get_cpu_timer(struct kvm_vcpu *vcpu); +int kvm_s390_cpus_from_pv(struct kvm *kvm, u16 *rcp, u16 *rrcp); /* implemented in diag.c */ int kvm_s390_handle_diag(struct kvm_vcpu *vcpu);
The functions kvm_s390_cpus_from_pv needs to be called from pv.c, so make it global. Take the opportunity to add documentation. Signed-off-by: Claudio Imbrenda <imbrenda@linux.ibm.com> --- arch/s390/kvm/kvm-s390.c | 26 +++++++++++++++++++++++++- arch/s390/kvm/kvm-s390.h | 1 + 2 files changed, 26 insertions(+), 1 deletion(-)