mm/hmm: don't abuse pte_index() in hmm_vma_handle_pmd
authorChristoph Hellwig <hch@lst.de>
Tue, 6 Aug 2019 16:05:47 +0000 (19:05 +0300)
committerJason Gunthorpe <jgg@mellanox.com>
Wed, 7 Aug 2019 17:58:06 +0000 (14:58 -0300)
pte_index is an internal arch helper in various architectures, without
consistent semantics.  Open code that calculation of a PMD index based on
the virtual address instead.

Link: https://lore.kernel.org/r/20190806160554.14046-10-hch@lst.de
Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Jason Gunthorpe <jgg@mellanox.com>
Signed-off-by: Jason Gunthorpe <jgg@mellanox.com>
mm/hmm.c

index 4807f4b..8d56a43 100644 (file)
--- a/mm/hmm.c
+++ b/mm/hmm.c
@@ -486,7 +486,7 @@ static int hmm_vma_handle_pmd(struct mm_walk *walk,
        if (pmd_protnone(pmd) || fault || write_fault)
                return hmm_vma_walk_hole_(addr, end, fault, write_fault, walk);
 
-       pfn = pmd_pfn(pmd) + pte_index(addr);
+       pfn = pmd_pfn(pmd) + ((addr & ~PMD_MASK) >> PAGE_SHIFT);
        for (i = 0; addr < end; addr += PAGE_SIZE, i++, pfn++) {
                if (pmd_devmap(pmd)) {
                        hmm_vma_walk->pgmap = get_dev_pagemap(pfn,