projects
/
powerpc.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
libata: irq-pio build fixes
[powerpc.git]
/
mm
/
hugetlb.c
diff --git
a/mm/hugetlb.c
b/mm/hugetlb.c
index
b21d78c
..
5087077
100644
(file)
--- a/
mm/hugetlb.c
+++ b/
mm/hugetlb.c
@@
-85,7
+85,7
@@
void free_huge_page(struct page *page)
BUG_ON(page_count(page));
INIT_LIST_HEAD(&page->lru);
BUG_ON(page_count(page));
INIT_LIST_HEAD(&page->lru);
- page[1].
mapping = NULL;
+ page[1].
lru.next = NULL; /* reset dtor */
spin_lock(&hugetlb_lock);
enqueue_huge_page(page);
spin_lock(&hugetlb_lock);
enqueue_huge_page(page);
@@
-105,9
+105,9
@@
struct page *alloc_huge_page(struct vm_area_struct *vma, unsigned long addr)
}
spin_unlock(&hugetlb_lock);
set_page_count(page, 1);
}
spin_unlock(&hugetlb_lock);
set_page_count(page, 1);
- page[1].
mapping = (void *)free_huge_page;
+ page[1].
lru.next = (void *)free_huge_page; /* set dtor */
for (i = 0; i < (HPAGE_SIZE/PAGE_SIZE); ++i)
for (i = 0; i < (HPAGE_SIZE/PAGE_SIZE); ++i)
- clear_
highpage(&page[i]
);
+ clear_
user_highpage(&page[i], addr
);
return page;
}
return page;
}
@@
-391,12
+391,7
@@
static int hugetlb_cow(struct mm_struct *mm, struct vm_area_struct *vma,
if (!new_page) {
page_cache_release(old_page);
if (!new_page) {
page_cache_release(old_page);
-
- /* Logically this is OOM, not a SIGBUS, but an OOM
- * could cause the kernel to go killing other
- * processes which won't help the hugepage situation
- * at all (?) */
- return VM_FAULT_SIGBUS;
+ return VM_FAULT_OOM;
}
spin_unlock(&mm->page_table_lock);
}
spin_unlock(&mm->page_table_lock);
@@
-444,6
+439,7
@@
retry:
page = alloc_huge_page(vma, address);
if (!page) {
hugetlb_put_quota(mapping);
page = alloc_huge_page(vma, address);
if (!page) {
hugetlb_put_quota(mapping);
+ ret = VM_FAULT_OOM;
goto out;
}
goto out;
}