mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-06-21 06:01:23 +00:00
[PATCH] mm: micro-optimise rmap
Microoptimise page_add_anon_rmap. Although these expressions are used only in the taken branch of the if() statement, the compiler can't reorder them inside because atomic_inc_and_test is a barrier. Signed-off-by: Nick Piggin <npiggin@suse.de> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
This commit is contained in:
parent
c3dce2d89c
commit
2822c1aa57
1 changed files with 11 additions and 10 deletions
15
mm/rmap.c
15
mm/rmap.c
|
@ -439,22 +439,23 @@ int page_referenced(struct page *page, int is_locked, int ignore_token)
|
||||||
void page_add_anon_rmap(struct page *page,
|
void page_add_anon_rmap(struct page *page,
|
||||||
struct vm_area_struct *vma, unsigned long address)
|
struct vm_area_struct *vma, unsigned long address)
|
||||||
{
|
{
|
||||||
struct anon_vma *anon_vma = vma->anon_vma;
|
|
||||||
pgoff_t index;
|
|
||||||
|
|
||||||
BUG_ON(PageReserved(page));
|
BUG_ON(PageReserved(page));
|
||||||
BUG_ON(!anon_vma);
|
|
||||||
|
|
||||||
inc_mm_counter(vma->vm_mm, anon_rss);
|
inc_mm_counter(vma->vm_mm, anon_rss);
|
||||||
|
|
||||||
|
if (atomic_inc_and_test(&page->_mapcount)) {
|
||||||
|
struct anon_vma *anon_vma = vma->anon_vma;
|
||||||
|
pgoff_t index;
|
||||||
|
|
||||||
|
BUG_ON(!anon_vma);
|
||||||
anon_vma = (void *) anon_vma + PAGE_MAPPING_ANON;
|
anon_vma = (void *) anon_vma + PAGE_MAPPING_ANON;
|
||||||
|
page->mapping = (struct address_space *) anon_vma;
|
||||||
|
|
||||||
index = (address - vma->vm_start) >> PAGE_SHIFT;
|
index = (address - vma->vm_start) >> PAGE_SHIFT;
|
||||||
index += vma->vm_pgoff;
|
index += vma->vm_pgoff;
|
||||||
index >>= PAGE_CACHE_SHIFT - PAGE_SHIFT;
|
index >>= PAGE_CACHE_SHIFT - PAGE_SHIFT;
|
||||||
|
|
||||||
if (atomic_inc_and_test(&page->_mapcount)) {
|
|
||||||
page->index = index;
|
page->index = index;
|
||||||
page->mapping = (struct address_space *) anon_vma;
|
|
||||||
inc_page_state(nr_mapped);
|
inc_page_state(nr_mapped);
|
||||||
}
|
}
|
||||||
/* else checking page index and mapping is racy */
|
/* else checking page index and mapping is racy */
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue