git.openpandora.org
/
pandora-kernel.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Merge branch 'upstream-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/linvil...
[pandora-kernel.git]
/
mm
/
memory.c
diff --git
a/mm/memory.c
b/mm/memory.c
index
9cf3f34
..
156861f
100644
(file)
--- a/
mm/memory.c
+++ b/
mm/memory.c
@@
-1086,6
+1086,7
@@
int get_user_pages(struct task_struct *tsk, struct mm_struct *mm,
default:
BUG();
}
default:
BUG();
}
+ cond_resched();
}
if (pages) {
pages[i] = page;
}
if (pages) {
pages[i] = page;
@@
-1451,6
+1452,7
@@
static inline void cow_user_page(struct page *dst, struct page *src, unsigned lo
if (__copy_from_user_inatomic(kaddr, uaddr, PAGE_SIZE))
memset(kaddr, 0, PAGE_SIZE);
kunmap_atomic(kaddr, KM_USER0);
if (__copy_from_user_inatomic(kaddr, uaddr, PAGE_SIZE))
memset(kaddr, 0, PAGE_SIZE);
kunmap_atomic(kaddr, KM_USER0);
+ flush_dcache_page(dst);
return;
}
return;
}
@@
-2169,11
+2171,13
@@
retry:
* after the next truncate_count read.
*/
* after the next truncate_count read.
*/
- /* no page was available -- either SIGBUS
or OOM
*/
- if (
new_page == NOPAGE_SIGBUS
)
+ /* no page was available -- either SIGBUS
, OOM or REFAULT
*/
+ if (
unlikely(new_page == NOPAGE_SIGBUS)
)
return VM_FAULT_SIGBUS;
return VM_FAULT_SIGBUS;
-
if (new_page == NOPAGE_OOM
)
+
else if (unlikely(new_page == NOPAGE_OOM)
)
return VM_FAULT_OOM;
return VM_FAULT_OOM;
+ else if (unlikely(new_page == NOPAGE_REFAULT))
+ return VM_FAULT_MINOR;
/*
* Should we do an early C-O-W break?
/*
* Should we do an early C-O-W break?