Message ID | 20210517200758.22593-11-imbrenda@linux.ibm.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | KVM: s390: pv: implement lazy destroy | expand |
On 5/17/21 10:07 PM, Claudio Imbrenda wrote: > Add the module parameter "lazy_destroy", to allow the lazy destroy > mechanism to be switched off. This might be useful for debugging > purposes. > > The parameter is enabled by default. > > Signed-off-by: Claudio Imbrenda <imbrenda@linux.ibm.com> > --- > arch/s390/kvm/pv.c | 13 +++++++++++++ > 1 file changed, 13 insertions(+) > > diff --git a/arch/s390/kvm/pv.c b/arch/s390/kvm/pv.c > index 4333d3e54ef0..00c14406205f 100644 > --- a/arch/s390/kvm/pv.c > +++ b/arch/s390/kvm/pv.c > @@ -26,6 +26,10 @@ struct deferred_priv { > unsigned long real; > }; > > +static int lazy_destroy = 1; > +module_param(lazy_destroy, int, 0444); I'm pondering if we want to make that writable or not. Reviewed-by: Janosch Frank <frankja@linux.ibm.com> > +MODULE_PARM_DESC(lazy_destroy, "Deferred destroy for protected guests"); > + > int kvm_s390_pv_destroy_cpu(struct kvm_vcpu *vcpu, u16 *rc, u16 *rrc) > { > int cc = 0; > @@ -348,6 +352,9 @@ int kvm_s390_pv_deinit_vm_deferred(struct kvm *kvm, u16 *rc, u16 *rrc) > { > struct deferred_priv *priv; > > + if (!lazy_destroy) > + kvm_s390_pv_deinit_vm_now(kvm, rc, rrc); > + > priv = kmalloc(sizeof(*priv), GFP_KERNEL | __GFP_ZERO); > if (!priv) > return kvm_s390_pv_deinit_vm_now(kvm, rc, rrc); > @@ -396,6 +403,12 @@ int kvm_s390_pv_init_vm(struct kvm *kvm, u16 *rc, u16 *rrc) > /* Outputs */ > kvm->arch.pv.handle = uvcb.guest_handle; > > + if (!lazy_destroy) { > + mmap_write_lock(kvm->mm); > + kvm->mm->context.pv_sync_destroy = 1; > + mmap_write_unlock(kvm->mm); > + } > + > atomic_inc(&kvm->mm->context.is_protected); > if (cc) { > if (uvcb.header.rc & UVC_RC_NEED_DESTROY) { >
diff --git a/arch/s390/kvm/pv.c b/arch/s390/kvm/pv.c index 4333d3e54ef0..00c14406205f 100644 --- a/arch/s390/kvm/pv.c +++ b/arch/s390/kvm/pv.c @@ -26,6 +26,10 @@ struct deferred_priv { unsigned long real; }; +static int lazy_destroy = 1; +module_param(lazy_destroy, int, 0444); +MODULE_PARM_DESC(lazy_destroy, "Deferred destroy for protected guests"); + int kvm_s390_pv_destroy_cpu(struct kvm_vcpu *vcpu, u16 *rc, u16 *rrc) { int cc = 0; @@ -348,6 +352,9 @@ int kvm_s390_pv_deinit_vm_deferred(struct kvm *kvm, u16 *rc, u16 *rrc) { struct deferred_priv *priv; + if (!lazy_destroy) + kvm_s390_pv_deinit_vm_now(kvm, rc, rrc); + priv = kmalloc(sizeof(*priv), GFP_KERNEL | __GFP_ZERO); if (!priv) return kvm_s390_pv_deinit_vm_now(kvm, rc, rrc); @@ -396,6 +403,12 @@ int kvm_s390_pv_init_vm(struct kvm *kvm, u16 *rc, u16 *rrc) /* Outputs */ kvm->arch.pv.handle = uvcb.guest_handle; + if (!lazy_destroy) { + mmap_write_lock(kvm->mm); + kvm->mm->context.pv_sync_destroy = 1; + mmap_write_unlock(kvm->mm); + } + atomic_inc(&kvm->mm->context.is_protected); if (cc) { if (uvcb.header.rc & UVC_RC_NEED_DESTROY) {
Add the module parameter "lazy_destroy", to allow the lazy destroy mechanism to be switched off. This might be useful for debugging purposes. The parameter is enabled by default. Signed-off-by: Claudio Imbrenda <imbrenda@linux.ibm.com> --- arch/s390/kvm/pv.c | 13 +++++++++++++ 1 file changed, 13 insertions(+)