KVM: PPC: Book3S HV: Disable HPT resizing on POWER9 for now
authorPaul Mackerras <paulus@ozlabs.org>
Fri, 17 Feb 2017 21:30:44 +0000 (08:30 +1100)
committerPaul Mackerras <paulus@ozlabs.org>
Sat, 18 Feb 2017 03:22:47 +0000 (14:22 +1100)
The new HPT resizing code added in commit b5baa6877315 ("KVM: PPC:
Book3S HV: KVM-HV HPT resizing implementation", 2016-12-20) doesn't
have code to handle the new HPTE format which POWER9 uses.  Thus it
would be best not to advertise it to userspace on POWER9 systems
until it works properly.

Also, since resize_hpt_rehash_hpte() contains BUG_ON() calls that
could be hit on POWER9, let's prevent it from being called on POWER9
for now.

Acked-by: David Gibson <david@gibson.dropbear.id.au>
Signed-off-by: Paul Mackerras <paulus@ozlabs.org>
arch/powerpc/kvm/book3s_64_mmu_hv.c
arch/powerpc/kvm/powerpc.c

index b68b342dd01f41a22f62fdc7a1247bc1cfe34003..f3158fb16de34b69acdb593ce39de7d88437e094 100644 (file)
@@ -1370,6 +1370,12 @@ static int resize_hpt_rehash(struct kvm_resize_hpt *resize)
        unsigned  long i;
        int rc;
 
+       /*
+        * resize_hpt_rehash_hpte() doesn't handle the new-format HPTEs
+        * that POWER9 uses, and could well hit a BUG_ON on POWER9.
+        */
+       if (cpu_has_feature(CPU_FTR_ARCH_300))
+               return -EIO;
        for (i = 0; i < kvmppc_hpt_npte(&kvm->arch.hpt); i++) {
                rc = resize_hpt_rehash_hpte(resize, i);
                if (rc != 0)
index 2b3e4e620078252c087f2f1dc88d7490580a248e..fcb253ba51e5331db17732609b2393f70b5ace33 100644 (file)
@@ -613,7 +613,8 @@ int kvm_vm_ioctl_check_extension(struct kvm *kvm, long ext)
                r = 1;
                break;
        case KVM_CAP_SPAPR_RESIZE_HPT:
-               r = !!hv_enabled;
+               /* Disable this on POWER9 until code handles new HPTE format */
+               r = !!hv_enabled && !cpu_has_feature(CPU_FTR_ARCH_300);
                break;
 #endif
        case KVM_CAP_PPC_HTM: