diff options
author | Kirill A. Shutemov <kirill.shutemov@linux.intel.com> | 2017-02-24 17:58:10 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2017-02-24 20:46:55 -0500 |
commit | 6a328a626f98bb856551e506cabc7c8b969aafa3 (patch) | |
tree | deb7ddcd0228acd7f03c88b64cdc4ec46b8077ce /mm | |
parent | 14fa2daa15887f9246cfedc345e83e8d24cb9058 (diff) |
mm: convert page_mapped_in_vma() to use page_vma_mapped_walk()
For consistency, it worth converting all page_check_address() to
page_vma_mapped_walk(), so we could drop the former.
Link: http://lkml.kernel.org/r/20170129173858.45174-11-kirill.shutemov@linux.intel.com
Signed-off-by: Kirill A. Shutemov <kirill.shutemov@linux.intel.com>
Acked-by: Hillf Danton <hillf.zj@alibaba-inc.com>
Cc: Andrea Arcangeli <aarcange@redhat.com>
Cc: Hugh Dickins <hughd@google.com>
Cc: Johannes Weiner <hannes@cmpxchg.org>
Cc: Oleg Nesterov <oleg@redhat.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Rik van Riel <riel@redhat.com>
Cc: Srikar Dronamraju <srikar@linux.vnet.ibm.com>
Cc: Vladimir Davydov <vdavydov.dev@gmail.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'mm')
-rw-r--r-- | mm/page_vma_mapped.c | 30 | ||||
-rw-r--r-- | mm/rmap.c | 26 |
2 files changed, 30 insertions, 26 deletions
diff --git a/mm/page_vma_mapped.c b/mm/page_vma_mapped.c index dc1a54826cf2..a23001a22c15 100644 --- a/mm/page_vma_mapped.c +++ b/mm/page_vma_mapped.c | |||
@@ -186,3 +186,33 @@ next_pte: do { | |||
186 | } | 186 | } |
187 | } | 187 | } |
188 | } | 188 | } |
189 | |||
190 | /** | ||
191 | * page_mapped_in_vma - check whether a page is really mapped in a VMA | ||
192 | * @page: the page to test | ||
193 | * @vma: the VMA to test | ||
194 | * | ||
195 | * Returns 1 if the page is mapped into the page tables of the VMA, 0 | ||
196 | * if the page is not mapped into the page tables of this VMA. Only | ||
197 | * valid for normal file or anonymous VMAs. | ||
198 | */ | ||
199 | int page_mapped_in_vma(struct page *page, struct vm_area_struct *vma) | ||
200 | { | ||
201 | struct page_vma_mapped_walk pvmw = { | ||
202 | .page = page, | ||
203 | .vma = vma, | ||
204 | .flags = PVMW_SYNC, | ||
205 | }; | ||
206 | unsigned long start, end; | ||
207 | |||
208 | start = __vma_address(page, vma); | ||
209 | end = start + PAGE_SIZE * (hpage_nr_pages(page) - 1); | ||
210 | |||
211 | if (unlikely(end < vma->vm_start || start >= vma->vm_end)) | ||
212 | return 0; | ||
213 | pvmw.address = max(start, vma->vm_start); | ||
214 | if (!page_vma_mapped_walk(&pvmw)) | ||
215 | return 0; | ||
216 | page_vma_mapped_walk_done(&pvmw); | ||
217 | return 1; | ||
218 | } | ||
@@ -756,32 +756,6 @@ check: | |||
756 | return NULL; | 756 | return NULL; |
757 | } | 757 | } |
758 | 758 | ||
759 | /** | ||
760 | * page_mapped_in_vma - check whether a page is really mapped in a VMA | ||
761 | * @page: the page to test | ||
762 | * @vma: the VMA to test | ||
763 | * | ||
764 | * Returns 1 if the page is mapped into the page tables of the VMA, 0 | ||
765 | * if the page is not mapped into the page tables of this VMA. Only | ||
766 | * valid for normal file or anonymous VMAs. | ||
767 | */ | ||
768 | int page_mapped_in_vma(struct page *page, struct vm_area_struct *vma) | ||
769 | { | ||
770 | unsigned long address; | ||
771 | pte_t *pte; | ||
772 | spinlock_t *ptl; | ||
773 | |||
774 | address = __vma_address(page, vma); | ||
775 | if (unlikely(address < vma->vm_start || address >= vma->vm_end)) | ||
776 | return 0; | ||
777 | pte = page_check_address(page, vma->vm_mm, address, &ptl, 1); | ||
778 | if (!pte) /* the page is not in this mm */ | ||
779 | return 0; | ||
780 | pte_unmap_unlock(pte, ptl); | ||
781 | |||
782 | return 1; | ||
783 | } | ||
784 | |||
785 | #ifdef CONFIG_TRANSPARENT_HUGEPAGE | 759 | #ifdef CONFIG_TRANSPARENT_HUGEPAGE |
786 | /* | 760 | /* |
787 | * Check that @page is mapped at @address into @mm. In contrast to | 761 | * Check that @page is mapped at @address into @mm. In contrast to |