diff options
author | Kirill A. Shutemov <kirill.shutemov@linux.intel.com> | 2015-04-15 19:14:53 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2015-04-15 19:35:19 -0400 |
commit | e39155ea11eac6da056b04669d7c9fc612e2065a (patch) | |
tree | d7a23caf03ac668c502b620303b170f721f56ef5 /mm | |
parent | 99e8ea6cd2210cf2271f922384b483cd83f0f8f3 (diff) |
mm: uninline and cleanup page-mapping related helpers
Most-used page->mapping helper -- page_mapping() -- has already uninlined.
Let's uninline also page_rmapping() and page_anon_vma(). It saves us
depending on configuration around 400 bytes in text:
text data bss dec hex filename
660318 99254 410000 1169572 11d8a4 mm/built-in.o-before
659854 99254 410000 1169108 11d6d4 mm/built-in.o
I also tried to make code a bit more clean.
[akpm@linux-foundation.org: coding-style fixes]
Signed-off-by: Kirill A. Shutemov <kirill.shutemov@linux.intel.com>
Cc: Christoph Lameter <cl@linux.com>
Cc: Konstantin Khlebnikov <koct9i@gmail.com>
Cc: Rik van Riel <riel@redhat.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/util.c | 41 |
1 files changed, 36 insertions, 5 deletions
@@ -325,9 +325,37 @@ void kvfree(const void *addr) | |||
325 | } | 325 | } |
326 | EXPORT_SYMBOL(kvfree); | 326 | EXPORT_SYMBOL(kvfree); |
327 | 327 | ||
328 | static inline void *__page_rmapping(struct page *page) | ||
329 | { | ||
330 | unsigned long mapping; | ||
331 | |||
332 | mapping = (unsigned long)page->mapping; | ||
333 | mapping &= ~PAGE_MAPPING_FLAGS; | ||
334 | |||
335 | return (void *)mapping; | ||
336 | } | ||
337 | |||
338 | /* Neutral page->mapping pointer to address_space or anon_vma or other */ | ||
339 | void *page_rmapping(struct page *page) | ||
340 | { | ||
341 | page = compound_head(page); | ||
342 | return __page_rmapping(page); | ||
343 | } | ||
344 | |||
345 | struct anon_vma *page_anon_vma(struct page *page) | ||
346 | { | ||
347 | unsigned long mapping; | ||
348 | |||
349 | page = compound_head(page); | ||
350 | mapping = (unsigned long)page->mapping; | ||
351 | if ((mapping & PAGE_MAPPING_FLAGS) != PAGE_MAPPING_ANON) | ||
352 | return NULL; | ||
353 | return __page_rmapping(page); | ||
354 | } | ||
355 | |||
328 | struct address_space *page_mapping(struct page *page) | 356 | struct address_space *page_mapping(struct page *page) |
329 | { | 357 | { |
330 | struct address_space *mapping = page->mapping; | 358 | unsigned long mapping; |
331 | 359 | ||
332 | /* This happens if someone calls flush_dcache_page on slab page */ | 360 | /* This happens if someone calls flush_dcache_page on slab page */ |
333 | if (unlikely(PageSlab(page))) | 361 | if (unlikely(PageSlab(page))) |
@@ -337,10 +365,13 @@ struct address_space *page_mapping(struct page *page) | |||
337 | swp_entry_t entry; | 365 | swp_entry_t entry; |
338 | 366 | ||
339 | entry.val = page_private(page); | 367 | entry.val = page_private(page); |
340 | mapping = swap_address_space(entry); | 368 | return swap_address_space(entry); |
341 | } else if ((unsigned long)mapping & PAGE_MAPPING_ANON) | 369 | } |
342 | mapping = NULL; | 370 | |
343 | return mapping; | 371 | mapping = (unsigned long)page->mapping; |
372 | if (mapping & PAGE_MAPPING_FLAGS) | ||
373 | return NULL; | ||
374 | return page->mapping; | ||
344 | } | 375 | } |
345 | 376 | ||
346 | int overcommit_ratio_handler(struct ctl_table *table, int write, | 377 | int overcommit_ratio_handler(struct ctl_table *table, int write, |