summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@penguin.transmeta.com>2003-01-14 23:42:14 -0800
committerLinus Torvalds <torvalds@penguin.transmeta.com>2003-01-14 23:42:14 -0800
commitdf53773c69b6bd7afa5312c4e820a1db6e001d35 (patch)
tree46192b32bfe7e752ee6cd7c1df04c3cb7985991d /include
parent71a17fca74e1144e6761b20ed8a019083b0822e8 (diff)
Fix page_address() to not re-evaluate its arguments
multiple times under certain circumstances. This fixes svc_tcp_recvfrom(). Found by Ted Phelps <phelps@dstc.edu.au>
Diffstat (limited to 'include')
-rw-r--r--include/linux/mm.h7
1 files changed, 4 insertions, 3 deletions
diff --git a/include/linux/mm.h b/include/linux/mm.h
index 9d2c7e53fb88..50eb18eb0488 100644
--- a/include/linux/mm.h
+++ b/include/linux/mm.h
@@ -296,9 +296,10 @@ static inline void set_page_zone(struct page *page, unsigned long zone_num)
page->flags |= zone_num << ZONE_SHIFT;
}
-#define lowmem_page_address(page) \
- __va( ( ((page) - page_zone(page)->zone_mem_map) \
- + page_zone(page)->zone_start_pfn) << PAGE_SHIFT)
+static inline void * lowmem_page_address(struct page *page)
+{
+ return __va( ( (page - page_zone(page)->zone_mem_map) + page_zone(page)->zone_start_pfn) << PAGE_SHIFT);
+}
#if defined(CONFIG_HIGHMEM) && !defined(WANT_PAGE_VIRTUAL)
#define HASHED_PAGE_VIRTUAL