projects
/
platform
/
adaptation
/
renesas_rcar
/
renesas_kernel.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
mm: page_alloc: use word-based accesses for get/set pageblock bitmaps
[platform/adaptation/renesas_rcar/renesas_kernel.git]
/
mm
/
rmap.c
diff --git
a/mm/rmap.c
b/mm/rmap.c
index
962e2a1
..
5d91bb7
100644
(file)
--- a/
mm/rmap.c
+++ b/
mm/rmap.c
@@
-848,9
+848,9
@@
out:
static bool invalid_mkclean_vma(struct vm_area_struct *vma, void *arg)
{
if (vma->vm_flags & VM_SHARED)
static bool invalid_mkclean_vma(struct vm_area_struct *vma, void *arg)
{
if (vma->vm_flags & VM_SHARED)
- return
0
;
+ return
false
;
- return
1
;
+ return
true
;
}
int page_mkclean(struct page *page)
}
int page_mkclean(struct page *page)
@@
-894,9
+894,9
@@
void page_move_anon_rmap(struct page *page,
{
struct anon_vma *anon_vma = vma->anon_vma;
{
struct anon_vma *anon_vma = vma->anon_vma;
- VM_BUG_ON
(!PageLocked(page)
);
+ VM_BUG_ON
_PAGE(!PageLocked(page), page
);
VM_BUG_ON(!anon_vma);
VM_BUG_ON(!anon_vma);
- VM_BUG_ON
(page->index != linear_page_index(vma, address)
);
+ VM_BUG_ON
_PAGE(page->index != linear_page_index(vma, address), page
);
anon_vma = (void *) anon_vma + PAGE_MAPPING_ANON;
page->mapping = (struct address_space *) anon_vma;
anon_vma = (void *) anon_vma + PAGE_MAPPING_ANON;
page->mapping = (struct address_space *) anon_vma;
@@
-995,7
+995,7
@@
void do_page_add_anon_rmap(struct page *page,
if (unlikely(PageKsm(page)))
return;
if (unlikely(PageKsm(page)))
return;
- VM_BUG_ON
(!PageLocked(page)
);
+ VM_BUG_ON
_PAGE(!PageLocked(page), page
);
/* address might be in next vma when migration races vma_adjust */
if (first)
__page_set_anon_rmap(page, vma, address, exclusive);
/* address might be in next vma when migration races vma_adjust */
if (first)
__page_set_anon_rmap(page, vma, address, exclusive);
@@
-1322,9
+1322,19
@@
static int try_to_unmap_cluster(unsigned long cursor, unsigned int *mapcount,
BUG_ON(!page || PageAnon(page));
if (locked_vma) {
BUG_ON(!page || PageAnon(page));
if (locked_vma) {
- mlock_vma_page(page); /* no-op if already mlocked */
- if (page == check_page)
+ if (page == check_page) {
+ /* we know we have check_page locked */
+ mlock_vma_page(page);
ret = SWAP_MLOCK;
ret = SWAP_MLOCK;
+ } else if (trylock_page(page)) {
+ /*
+ * If we can lock the page, perform mlock.
+ * Otherwise leave the page alone, it will be
+ * eventually encountered again later.
+ */
+ mlock_vma_page(page);
+ unlock_page(page);
+ }
continue; /* don't unmap */
}
continue; /* don't unmap */
}
@@
-1360,8
+1370,9
@@
static int try_to_unmap_cluster(unsigned long cursor, unsigned int *mapcount,
}
static int try_to_unmap_nonlinear(struct page *page,
}
static int try_to_unmap_nonlinear(struct page *page,
- struct address_space *mapping,
struct vm_area_struct *vma
)
+ struct address_space *mapping,
void *arg
)
{
{
+ struct vm_area_struct *vma;
int ret = SWAP_AGAIN;
unsigned long cursor;
unsigned long max_nl_cursor = 0;
int ret = SWAP_AGAIN;
unsigned long cursor;
unsigned long max_nl_cursor = 0;
@@
-1481,7
+1492,7
@@
int try_to_unmap(struct page *page, enum ttu_flags flags)
.anon_lock = page_lock_anon_vma_read,
};
.anon_lock = page_lock_anon_vma_read,
};
- VM_BUG_ON
(!PageHuge(page) && PageTransHuge(page)
);
+ VM_BUG_ON
_PAGE(!PageHuge(page) && PageTransHuge(page), page
);
/*
* During exec, a temporary VMA is setup and later moved.
/*
* During exec, a temporary VMA is setup and later moved.
@@
-1533,7
+1544,7
@@
int try_to_munlock(struct page *page)
};
};
- VM_BUG_ON
(!PageLocked(page) || PageLRU(page)
);
+ VM_BUG_ON
_PAGE(!PageLocked(page) || PageLRU(page), page
);
ret = rmap_walk(page, &rwc);
return ret;
ret = rmap_walk(page, &rwc);
return ret;
@@
-1543,10
+1554,9
@@
void __put_anon_vma(struct anon_vma *anon_vma)
{
struct anon_vma *root = anon_vma->root;
{
struct anon_vma *root = anon_vma->root;
+ anon_vma_free(anon_vma);
if (root != anon_vma && atomic_dec_and_test(&root->refcount))
anon_vma_free(root);
if (root != anon_vma && atomic_dec_and_test(&root->refcount))
anon_vma_free(root);
-
- anon_vma_free(anon_vma);
}
static struct anon_vma *rmap_walk_anon_lock(struct page *page,
}
static struct anon_vma *rmap_walk_anon_lock(struct page *page,
@@
-1663,7
+1673,7
@@
static int rmap_walk_file(struct page *page, struct rmap_walk_control *rwc)
if (list_empty(&mapping->i_mmap_nonlinear))
goto done;
if (list_empty(&mapping->i_mmap_nonlinear))
goto done;
- ret = rwc->file_nonlinear(page, mapping,
vma
);
+ ret = rwc->file_nonlinear(page, mapping,
rwc->arg
);
done:
mutex_unlock(&mapping->i_mmap_mutex);
done:
mutex_unlock(&mapping->i_mmap_mutex);