KVM: PPC: Book3S HV: Clear partition table entry on vm teardown
authorSuraj Jitindar Singh <sjitindarsingh@gmail.com>
Mon, 8 Oct 2018 05:30:59 +0000 (16:30 +1100)
committerMichael Ellerman <mpe@ellerman.id.au>
Tue, 9 Oct 2018 05:04:27 +0000 (16:04 +1100)
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.

Reviewed-by: David Gibson <david@gibson.dropbear.id.au>
Signed-off-by: Suraj Jitindar Singh <sjitindarsingh@gmail.com>
Signed-off-by: Paul Mackerras <paulus@ozlabs.org>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
arch/powerpc/kvm/book3s_hv.c

index 3d99f4f410f982e58eb43574eaa0e0f037a4476f..8c20a90a68519737677ccf97865850fc57f64064 100644 (file)
@@ -4509,13 +4509,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);
 }