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@xxxxxxxxxxxxx> > --- > 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@xxxxxxxxxxxxx> > +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) { >