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>
	
	
This commit is contained in:
		
					parent
					
						
							
								99e8ea6cd2
							
						
					
				
			
			
				commit
				
					
						e39155ea11
					
				
			
		
					 3 changed files with 38 additions and 19 deletions
				
			
		|  | @ -950,14 +950,10 @@ void page_address_init(void); | ||||||
| #define page_address_init()  do { } while(0) | #define page_address_init()  do { } while(0) | ||||||
| #endif | #endif | ||||||
| 
 | 
 | ||||||
|  | extern void *page_rmapping(struct page *page); | ||||||
|  | extern struct anon_vma *page_anon_vma(struct page *page); | ||||||
| extern struct address_space *page_mapping(struct page *page); | extern struct address_space *page_mapping(struct page *page); | ||||||
| 
 | 
 | ||||||
| /* Neutral page->mapping pointer to address_space or anon_vma or other */ |  | ||||||
| static inline void *page_rmapping(struct page *page) |  | ||||||
| { |  | ||||||
| 	return (void *)((unsigned long)page->mapping & ~PAGE_MAPPING_FLAGS); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| extern struct address_space *__page_file_mapping(struct page *); | extern struct address_space *__page_file_mapping(struct page *); | ||||||
| 
 | 
 | ||||||
| static inline | static inline | ||||||
|  |  | ||||||
|  | @ -105,14 +105,6 @@ static inline void put_anon_vma(struct anon_vma *anon_vma) | ||||||
| 		__put_anon_vma(anon_vma); | 		__put_anon_vma(anon_vma); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static inline struct anon_vma *page_anon_vma(struct page *page) |  | ||||||
| { |  | ||||||
| 	if (((unsigned long)page->mapping & PAGE_MAPPING_FLAGS) != |  | ||||||
| 					    PAGE_MAPPING_ANON) |  | ||||||
| 		return NULL; |  | ||||||
| 	return page_rmapping(page); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| static inline void vma_lock_anon_vma(struct vm_area_struct *vma) | static inline void vma_lock_anon_vma(struct vm_area_struct *vma) | ||||||
| { | { | ||||||
| 	struct anon_vma *anon_vma = vma->anon_vma; | 	struct anon_vma *anon_vma = vma->anon_vma; | ||||||
|  |  | ||||||
							
								
								
									
										41
									
								
								mm/util.c
									
										
									
									
									
								
							
							
						
						
									
										41
									
								
								mm/util.c
									
										
									
									
									
								
							|  | @ -325,9 +325,37 @@ void kvfree(const void *addr) | ||||||
| } | } | ||||||
| EXPORT_SYMBOL(kvfree); | EXPORT_SYMBOL(kvfree); | ||||||
| 
 | 
 | ||||||
|  | static inline void *__page_rmapping(struct page *page) | ||||||
|  | { | ||||||
|  | 	unsigned long mapping; | ||||||
|  | 
 | ||||||
|  | 	mapping = (unsigned long)page->mapping; | ||||||
|  | 	mapping &= ~PAGE_MAPPING_FLAGS; | ||||||
|  | 
 | ||||||
|  | 	return (void *)mapping; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /* Neutral page->mapping pointer to address_space or anon_vma or other */ | ||||||
|  | void *page_rmapping(struct page *page) | ||||||
|  | { | ||||||
|  | 	page = compound_head(page); | ||||||
|  | 	return __page_rmapping(page); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | struct anon_vma *page_anon_vma(struct page *page) | ||||||
|  | { | ||||||
|  | 	unsigned long mapping; | ||||||
|  | 
 | ||||||
|  | 	page = compound_head(page); | ||||||
|  | 	mapping = (unsigned long)page->mapping; | ||||||
|  | 	if ((mapping & PAGE_MAPPING_FLAGS) != PAGE_MAPPING_ANON) | ||||||
|  | 		return NULL; | ||||||
|  | 	return __page_rmapping(page); | ||||||
|  | } | ||||||
|  | 
 | ||||||
| struct address_space *page_mapping(struct page *page) | struct address_space *page_mapping(struct page *page) | ||||||
| { | { | ||||||
| 	struct address_space *mapping = page->mapping; | 	unsigned long mapping; | ||||||
| 
 | 
 | ||||||
| 	/* This happens if someone calls flush_dcache_page on slab page */ | 	/* This happens if someone calls flush_dcache_page on slab page */ | ||||||
| 	if (unlikely(PageSlab(page))) | 	if (unlikely(PageSlab(page))) | ||||||
|  | @ -337,10 +365,13 @@ struct address_space *page_mapping(struct page *page) | ||||||
| 		swp_entry_t entry; | 		swp_entry_t entry; | ||||||
| 
 | 
 | ||||||
| 		entry.val = page_private(page); | 		entry.val = page_private(page); | ||||||
| 		mapping = swap_address_space(entry); | 		return swap_address_space(entry); | ||||||
| 	} else if ((unsigned long)mapping & PAGE_MAPPING_ANON) | 	} | ||||||
| 		mapping = NULL; | 
 | ||||||
| 	return mapping; | 	mapping = (unsigned long)page->mapping; | ||||||
|  | 	if (mapping & PAGE_MAPPING_FLAGS) | ||||||
|  | 		return NULL; | ||||||
|  | 	return page->mapping; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| int overcommit_ratio_handler(struct ctl_table *table, int write, | int overcommit_ratio_handler(struct ctl_table *table, int write, | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Kirill A. Shutemov
				Kirill A. Shutemov