Message ID | 20190403141627.11664-6-steven.price@arm.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | Convert x86 & arm64 to use generic page walk | expand |
On Wed, Apr 03, 2019 at 03:16:12PM +0100, Steven Price wrote: > Since pmd_large() is now always available, pmd_is_leaf() is redundant. > Replace all uses with calls to pmd_large(). NAK. I don't want to do this, because pmd_is_leaf() is purely about the guest page tables (the "partition-scoped" radix tree which specifies the guest physical to host physical translation), not about anything to do with the Linux process page tables. The guest page tables have the same format as the Linux process page tables, but they are managed separately. If it makes things clearer, I could rename it to "guest_pmd_is_leaf()" or something similar. Paul.
On 29/04/2019 03:05, Paul Mackerras wrote: > On Wed, Apr 03, 2019 at 03:16:12PM +0100, Steven Price wrote: >> Since pmd_large() is now always available, pmd_is_leaf() is redundant. >> Replace all uses with calls to pmd_large(). > > NAK. I don't want to do this, because pmd_is_leaf() is purely about > the guest page tables (the "partition-scoped" radix tree which > specifies the guest physical to host physical translation), not about > anything to do with the Linux process page tables. The guest page > tables have the same format as the Linux process page tables, but they > are managed separately. Fair enough, I'll drop this patch in the next posting. > If it makes things clearer, I could rename it to "guest_pmd_is_leaf()" > or something similar. I'll leave that decision up to you - it might prevent similar confusion in the future. Steve
diff --git a/arch/powerpc/kvm/book3s_64_mmu_radix.c b/arch/powerpc/kvm/book3s_64_mmu_radix.c index f55ef071883f..1b57b4e3f819 100644 --- a/arch/powerpc/kvm/book3s_64_mmu_radix.c +++ b/arch/powerpc/kvm/book3s_64_mmu_radix.c @@ -363,12 +363,6 @@ static void kvmppc_pte_free(pte_t *ptep) kmem_cache_free(kvm_pte_cache, ptep); } -/* Like pmd_huge() and pmd_large(), but works regardless of config options */ -static inline int pmd_is_leaf(pmd_t pmd) -{ - return !!(pmd_val(pmd) & _PAGE_PTE); -} - static pmd_t *kvmppc_pmd_alloc(void) { return kmem_cache_alloc(kvm_pmd_cache, GFP_KERNEL); @@ -460,7 +454,7 @@ static void kvmppc_unmap_free_pmd(struct kvm *kvm, pmd_t *pmd, bool full, for (im = 0; im < PTRS_PER_PMD; ++im, ++p) { if (!pmd_present(*p)) continue; - if (pmd_is_leaf(*p)) { + if (pmd_large(*p)) { if (full) { pmd_clear(p); } else { @@ -593,7 +587,7 @@ int kvmppc_create_pte(struct kvm *kvm, pgd_t *pgtable, pte_t pte, else if (level <= 1) new_pmd = kvmppc_pmd_alloc(); - if (level == 0 && !(pmd && pmd_present(*pmd) && !pmd_is_leaf(*pmd))) + if (level == 0 && !(pmd && pmd_present(*pmd) && !pmd_large(*pmd))) new_ptep = kvmppc_pte_alloc(); /* Check if we might have been invalidated; let the guest retry if so */ @@ -662,7 +656,7 @@ int kvmppc_create_pte(struct kvm *kvm, pgd_t *pgtable, pte_t pte, new_pmd = NULL; } pmd = pmd_offset(pud, gpa); - if (pmd_is_leaf(*pmd)) { + if (pmd_large(*pmd)) { unsigned long lgpa = gpa & PMD_MASK; /* Check if we raced and someone else has set the same thing */
Since pmd_large() is now always available, pmd_is_leaf() is redundant. Replace all uses with calls to pmd_large(). CC: Benjamin Herrenschmidt <benh@kernel.crashing.org> CC: Michael Ellerman <mpe@ellerman.id.au> CC: Paul Mackerras <paulus@ozlabs.org> CC: kvm-ppc@vger.kernel.org CC: linuxppc-dev@lists.ozlabs.org Signed-off-by: Steven Price <steven.price@arm.com> --- arch/powerpc/kvm/book3s_64_mmu_radix.c | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-)