summaryrefslogtreecommitdiffstats
path: root/mm
diff options
context:
space:
mode:
authorKirill A. Shutemov <kirill.shutemov@linux.intel.com>2017-02-24 17:58:10 -0500
committerLinus Torvalds <torvalds@linux-foundation.org>2017-02-24 20:46:55 -0500
commit6a328a626f98bb856551e506cabc7c8b969aafa3 (patch)
treedeb7ddcd0228acd7f03c88b64cdc4ec46b8077ce /mm
parent14fa2daa15887f9246cfedc345e83e8d24cb9058 (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.c30
-rw-r--r--mm/rmap.c26
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 */
199int 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}
diff --git a/mm/rmap.c b/mm/rmap.c
index 11668fb881d8..80525820aada 100644
--- a/mm/rmap.c
+++ b/mm/rmap.c
@@ -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 */
768int 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