ARM: Avoid evaluating page_address() multiple times
authorRussell King <rmk+kernel@arm.linux.org.uk>
Sun, 25 Oct 2009 11:25:50 +0000 (11:25 +0000)
committerRussell King <rmk+kernel@arm.linux.org.uk>
Tue, 1 Dec 2009 18:20:07 +0000 (18:20 +0000)
page_address() is a function call rather than a macro, and so:

if (page_address(page))
do_something(page_address(page));

results in two calls to this function.  This is unnecessary; remove
the duplication.

Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
arch/arm/mm/flush.c

index a480f16..43474d8 100644 (file)
@@ -111,6 +111,8 @@ void flush_ptrace_access(struct vm_area_struct *vma, struct page *page,
 
 void __flush_dcache_page(struct address_space *mapping, struct page *page)
 {
+       void *addr = page_address(page);
+
        /*
         * Writeback any data associated with the kernel mapping of this
         * page.  This ensures that data in the physical page is mutually
@@ -121,9 +123,9 @@ void __flush_dcache_page(struct address_space *mapping, struct page *page)
         * kmap_atomic() doesn't set the page virtual address, and
         * kunmap_atomic() takes care of cache flushing already.
         */
-       if (page_address(page))
+       if (addr)
 #endif
-               __cpuc_flush_dcache_page(page_address(page));
+               __cpuc_flush_dcache_page(addr);
 
        /*
         * If this is a page cache page, and we have an aliasing VIPT cache,