Message ID | 1537524123-9578-16-git-send-email-paulus@ozlabs.org (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | KVM: PPC: Book3S HV: Nested HV virtualization | expand |
On Fri, Sep 21, 2018 at 08:01:46PM +1000, Paul Mackerras wrote: > From: Suraj Jitindar Singh <sjitindarsingh@gmail.com> > > When destroying a VM we return the LPID to the pool, however we never > zero the partition table entry. This is instead done when we reallocate > the LPID. > > Zero the partition table entry on VM teardown before returning the LPID > to the pool. This means if we were running as a nested hypervisor the > real hypervisor could use this to determine when it can free resources. > > Signed-off-by: Suraj Jitindar Singh <sjitindarsingh@gmail.com> > Signed-off-by: Paul Mackerras <paulus@ozlabs.org> Reviewed-by: David Gibson <david@gibson.dropbear.id.au> > --- > arch/powerpc/kvm/book3s_hv.c | 8 +++++++- > 1 file changed, 7 insertions(+), 1 deletion(-) > > diff --git a/arch/powerpc/kvm/book3s_hv.c b/arch/powerpc/kvm/book3s_hv.c > index be8c863..82d6668 100644 > --- a/arch/powerpc/kvm/book3s_hv.c > +++ b/arch/powerpc/kvm/book3s_hv.c > @@ -4499,13 +4499,19 @@ static void kvmppc_core_destroy_vm_hv(struct kvm *kvm) > > kvmppc_free_vcores(kvm); > > - kvmppc_free_lpid(kvm->arch.lpid); > > if (kvm_is_radix(kvm)) > kvmppc_free_radix(kvm); > else > kvmppc_free_hpt(&kvm->arch.hpt); > > + /* Perform global invalidation and return lpid to the pool */ > + if (cpu_has_feature(CPU_FTR_ARCH_300)) { > + kvm->arch.process_table = 0; > + kvmppc_setup_partition_table(kvm); > + } > + kvmppc_free_lpid(kvm->arch.lpid); > + > kvmppc_free_pimap(kvm); > } >
diff --git a/arch/powerpc/kvm/book3s_hv.c b/arch/powerpc/kvm/book3s_hv.c index be8c863..82d6668 100644 --- a/arch/powerpc/kvm/book3s_hv.c +++ b/arch/powerpc/kvm/book3s_hv.c @@ -4499,13 +4499,19 @@ static void kvmppc_core_destroy_vm_hv(struct kvm *kvm) kvmppc_free_vcores(kvm); - kvmppc_free_lpid(kvm->arch.lpid); if (kvm_is_radix(kvm)) kvmppc_free_radix(kvm); else kvmppc_free_hpt(&kvm->arch.hpt); + /* Perform global invalidation and return lpid to the pool */ + if (cpu_has_feature(CPU_FTR_ARCH_300)) { + kvm->arch.process_table = 0; + kvmppc_setup_partition_table(kvm); + } + kvmppc_free_lpid(kvm->arch.lpid); + kvmppc_free_pimap(kvm); }