diff options
author | David Gibson <david@gibson.dropbear.id.au> | 2006-02-07 15:58:25 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2006-02-07 19:12:31 -0500 |
commit | a2dfef6947139db9b886fce510c4d0c913beb5f0 (patch) | |
tree | 096e9110d897e6b946fdae9e9e17ad5c7832fd8a | |
parent | 488fc08d914f2b07b701c9b9c811437cc1c1c518 (diff) |
[PATCH] Hugepages need clear_user_highpage() not clear_highpage()
When hugepages are newly allocated to a file in mm/hugetlb.c, we clear them
with a call to clear_highpage() on each of the subpages. We should be
using clear_user_highpage(): on powerpc, at least, clear_highpage() doesn't
correctly mark the page as icache dirty so if the page is executed shortly
after it's possible to get strange results.
Signed-off-by: David Gibson <dwg@au1.ibm.com>
Acked-by: William Lee Irwin III <wli@holomorphy.com>
Cc: <stable@kernel.org>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
-rw-r--r-- | mm/hugetlb.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/mm/hugetlb.c b/mm/hugetlb.c index ceb3ebb3c399..3255ca420fc8 100644 --- a/mm/hugetlb.c +++ b/mm/hugetlb.c | |||
@@ -107,7 +107,7 @@ struct page *alloc_huge_page(struct vm_area_struct *vma, unsigned long addr) | |||
107 | set_page_count(page, 1); | 107 | set_page_count(page, 1); |
108 | page[1].mapping = (void *)free_huge_page; | 108 | page[1].mapping = (void *)free_huge_page; |
109 | for (i = 0; i < (HPAGE_SIZE/PAGE_SIZE); ++i) | 109 | for (i = 0; i < (HPAGE_SIZE/PAGE_SIZE); ++i) |
110 | clear_highpage(&page[i]); | 110 | clear_user_highpage(&page[i], addr); |
111 | return page; | 111 | return page; |
112 | } | 112 | } |
113 | 113 | ||