On 4/26/19 8:54 AM, Paul Mackerras wrote: > This adds code to ensure that after a XIVE or XICS-on-XIVE KVM device > is closed, KVM will not try to enable or disable any of the escalation > interrupts for the VCPUs. Yes. This is a required cleanup. Reviewed-by: Cédric Le Goater <clg@xxxxxxxx> Thanks, C. > We don't have to worry about races between > clearing the pointers and use of the pointers by the XIVE context > push/pull code, because the callers hold the vcpu->mutex, which is > also taken by the KVM_RUN code. Therefore the vcpu cannot be entering > or exiting the guest concurrently. > > Signed-off-by: Paul Mackerras <paulus@xxxxxxxxxx> > --- > arch/powerpc/kvm/book3s_xive.c | 15 +++++++++++++++ > 1 file changed, 15 insertions(+) > > diff --git a/arch/powerpc/kvm/book3s_xive.c b/arch/powerpc/kvm/book3s_xive.c > index 4280cd8..4953957 100644 > --- a/arch/powerpc/kvm/book3s_xive.c > +++ b/arch/powerpc/kvm/book3s_xive.c > @@ -1096,6 +1096,21 @@ void kvmppc_xive_disable_vcpu_interrupts(struct kvm_vcpu *vcpu) > arch_spin_unlock(&sb->lock); > } > } > + > + /* Disable vcpu's escalation interrupt */ > + if (vcpu->arch.xive_esc_on) { > + __raw_readq((void __iomem *)(vcpu->arch.xive_esc_vaddr + > + XIVE_ESB_SET_PQ_01)); > + vcpu->arch.xive_esc_on = false; > + } > + > + /* > + * Clear pointers to escalation interrupt ESB. > + * This is safe because the vcpu->mutex is held, preventing > + * any other CPU from concurrently executing a KVM_RUN ioctl. > + */ > + vcpu->arch.xive_esc_vaddr = 0; > + vcpu->arch.xive_esc_raddr = 0; > } > > void kvmppc_xive_cleanup_vcpu(struct kvm_vcpu *vcpu) >