|
@@ -111,12 +111,8 @@ bool page_vma_mapped_walk(struct page_vma_mapped_walk *pvmw)
|
|
if (pvmw->pmd && !pvmw->pte)
|
|
if (pvmw->pmd && !pvmw->pte)
|
|
return not_found(pvmw);
|
|
return not_found(pvmw);
|
|
|
|
|
|
- /* Only for THP, seek to next pte entry makes sense */
|
|
|
|
- if (pvmw->pte) {
|
|
|
|
- if (!PageTransHuge(pvmw->page) || PageHuge(pvmw->page))
|
|
|
|
- return not_found(pvmw);
|
|
|
|
|
|
+ if (pvmw->pte)
|
|
goto next_pte;
|
|
goto next_pte;
|
|
- }
|
|
|
|
|
|
|
|
if (unlikely(PageHuge(pvmw->page))) {
|
|
if (unlikely(PageHuge(pvmw->page))) {
|
|
/* when pud is not present, pte will be NULL */
|
|
/* when pud is not present, pte will be NULL */
|
|
@@ -165,9 +161,14 @@ restart:
|
|
while (1) {
|
|
while (1) {
|
|
if (check_pte(pvmw))
|
|
if (check_pte(pvmw))
|
|
return true;
|
|
return true;
|
|
-next_pte: do {
|
|
|
|
|
|
+next_pte:
|
|
|
|
+ /* Seek to next pte only makes sense for THP */
|
|
|
|
+ if (!PageTransHuge(pvmw->page) || PageHuge(pvmw->page))
|
|
|
|
+ return not_found(pvmw);
|
|
|
|
+ do {
|
|
pvmw->address += PAGE_SIZE;
|
|
pvmw->address += PAGE_SIZE;
|
|
- if (pvmw->address >=
|
|
|
|
|
|
+ if (pvmw->address >= pvmw->vma->vm_end ||
|
|
|
|
+ pvmw->address >=
|
|
__vma_address(pvmw->page, pvmw->vma) +
|
|
__vma_address(pvmw->page, pvmw->vma) +
|
|
hpage_nr_pages(pvmw->page) * PAGE_SIZE)
|
|
hpage_nr_pages(pvmw->page) * PAGE_SIZE)
|
|
return not_found(pvmw);
|
|
return not_found(pvmw);
|