Message ID | 1365055083-31956-13-git-send-email-aneesh.kumar@linux.vnet.ibm.com (mailing list archive) |
---|---|
State | Changes Requested, archived |
Delegated to: | Michael Ellerman |
Headers | show |
On Thu, Apr 04, 2013 at 11:27:50AM +0530, Aneesh Kumar K.V wrote:
> From: "Aneesh Kumar K.V" <aneesh.kumar@linux.vnet.ibm.com>
Surely this can't be correct until the KVM H_ENTER implementation is
updated to cope with the MPSS page sizes.
David Gibson <dwg@au1.ibm.com> writes: > On Thu, Apr 04, 2013 at 11:27:50AM +0530, Aneesh Kumar K.V wrote: >> From: "Aneesh Kumar K.V" <aneesh.kumar@linux.vnet.ibm.com> > > Surely this can't be correct until the KVM H_ENTER implementation is > updated to cope with the MPSS page sizes. Why ? We are returning info regarding penc values for different combination. I would guess qemu to only use info related to base page size. Rest it can ignore right ?. Obviously i haven't tested this part. So let me know if I should drop this ? -aneesh
On Thu, Apr 11, 2013 at 10:41:57AM +0530, Aneesh Kumar K.V wrote: > David Gibson <dwg@au1.ibm.com> writes: > > > On Thu, Apr 04, 2013 at 11:27:50AM +0530, Aneesh Kumar K.V wrote: > >> From: "Aneesh Kumar K.V" <aneesh.kumar@linux.vnet.ibm.com> > > > > Surely this can't be correct until the KVM H_ENTER implementation is > > updated to cope with the MPSS page sizes. > > Why ? We are returning info regarding penc values for different > combination. I would guess qemu to only use info related to base page > size. Rest it can ignore right ?. Obviously i haven't tested this > part. So let me know if I should drop this ? The guest can't actually use those encodings unless the host's H_ENTER allows it to, though, so this patch should be moved after extended that KVM support.
diff --git a/arch/powerpc/kvm/book3s_hv.c b/arch/powerpc/kvm/book3s_hv.c index 48f6d99..f472414 100644 --- a/arch/powerpc/kvm/book3s_hv.c +++ b/arch/powerpc/kvm/book3s_hv.c @@ -1508,14 +1508,24 @@ long kvm_vm_ioctl_allocate_rma(struct kvm *kvm, struct kvm_allocate_rma *ret) static void kvmppc_add_seg_page_size(struct kvm_ppc_one_seg_page_size **sps, int linux_psize) { + int i, index = 0; struct mmu_psize_def *def = &mmu_psize_defs[linux_psize]; if (!def->shift) return; (*sps)->page_shift = def->shift; (*sps)->slb_enc = def->sllp; - (*sps)->enc[0].page_shift = def->shift; - (*sps)->enc[0].pte_enc = def->penc[linux_psize]; + for (i = 0; i < MMU_PAGE_COUNT; i++) { + if (def->penc[i] != -1) { + if (index >= KVM_PPC_PAGE_SIZES_MAX_SZ) { + WARN_ON(1); + break; + } + (*sps)->enc[index].page_shift = mmu_psize_defs[i].shift; + (*sps)->enc[index].pte_enc = def->penc[i]; + index++; + } + } (*sps)++; }