|
@@ -3656,15 +3656,17 @@ static int kvmppc_hv_setup_htab_rma(struct kvm_vcpu *vcpu)
|
|
goto up_out;
|
|
goto up_out;
|
|
|
|
|
|
psize = vma_kernel_pagesize(vma);
|
|
psize = vma_kernel_pagesize(vma);
|
|
- porder = __ilog2(psize);
|
|
|
|
|
|
|
|
up_read(¤t->mm->mmap_sem);
|
|
up_read(¤t->mm->mmap_sem);
|
|
|
|
|
|
/* We can handle 4k, 64k or 16M pages in the VRMA */
|
|
/* We can handle 4k, 64k or 16M pages in the VRMA */
|
|
- err = -EINVAL;
|
|
|
|
- if (!(psize == 0x1000 || psize == 0x10000 ||
|
|
|
|
- psize == 0x1000000))
|
|
|
|
- goto out_srcu;
|
|
|
|
|
|
+ if (psize >= 0x1000000)
|
|
|
|
+ psize = 0x1000000;
|
|
|
|
+ else if (psize >= 0x10000)
|
|
|
|
+ psize = 0x10000;
|
|
|
|
+ else
|
|
|
|
+ psize = 0x1000;
|
|
|
|
+ porder = __ilog2(psize);
|
|
|
|
|
|
senc = slb_pgsize_encoding(psize);
|
|
senc = slb_pgsize_encoding(psize);
|
|
kvm->arch.vrma_slb_v = senc | SLB_VSID_B_1T |
|
|
kvm->arch.vrma_slb_v = senc | SLB_VSID_B_1T |
|