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
Revert "net: validate variable length ll headers"
[pandora-kernel.git]
/
mm
/
page_alloc.c
diff --git
a/mm/page_alloc.c
b/mm/page_alloc.c
index
b5afea2
..
62a7fa2
100644
(file)
--- a/
mm/page_alloc.c
+++ b/
mm/page_alloc.c
@@
-1759,6
+1759,13
@@
void warn_alloc_failed(gfp_t gfp_mask, int order, const char *fmt, ...)
if ((gfp_mask & __GFP_NOWARN) || !__ratelimit(&nopage_rs))
return;
if ((gfp_mask & __GFP_NOWARN) || !__ratelimit(&nopage_rs))
return;
+ /*
+ * Walking all memory to count page types is very expensive and should
+ * be inhibited in non-blockable contexts.
+ */
+ if (!(gfp_mask & __GFP_WAIT))
+ filter |= SHOW_MEM_FILTER_PAGE_COUNT;
+
/*
* This documents exceptions given to allocations in certain
* contexts that are allowed to allocate outside current's set
/*
* This documents exceptions given to allocations in certain
* contexts that are allowed to allocate outside current's set
@@
-2047,7
+2054,7
@@
static inline int
gfp_to_alloc_flags(gfp_t gfp_mask)
{
int alloc_flags = ALLOC_WMARK_MIN | ALLOC_CPUSET;
gfp_to_alloc_flags(gfp_t gfp_mask)
{
int alloc_flags = ALLOC_WMARK_MIN | ALLOC_CPUSET;
- const
gfp_t wait = gfp_mask & __GFP_WAIT
;
+ const
bool atomic = !(gfp_mask & (__GFP_WAIT | __GFP_NO_KSWAPD))
;
/* __GFP_HIGH is assumed to be the same as ALLOC_HIGH to save a branch. */
BUILD_BUG_ON(__GFP_HIGH != (__force gfp_t) ALLOC_HIGH);
/* __GFP_HIGH is assumed to be the same as ALLOC_HIGH to save a branch. */
BUILD_BUG_ON(__GFP_HIGH != (__force gfp_t) ALLOC_HIGH);
@@
-2056,20
+2063,20
@@
gfp_to_alloc_flags(gfp_t gfp_mask)
* The caller may dip into page reserves a bit more if the caller
* cannot run direct reclaim, or if the caller has realtime scheduling
* policy or is asking for __GFP_HIGH memory. GFP_ATOMIC requests will
* The caller may dip into page reserves a bit more if the caller
* cannot run direct reclaim, or if the caller has realtime scheduling
* policy or is asking for __GFP_HIGH memory. GFP_ATOMIC requests will
- * set both ALLOC_HARDER (
!wait
) and ALLOC_HIGH (__GFP_HIGH).
+ * set both ALLOC_HARDER (
atomic == true
) and ALLOC_HIGH (__GFP_HIGH).
*/
alloc_flags |= (__force int) (gfp_mask & __GFP_HIGH);
*/
alloc_flags |= (__force int) (gfp_mask & __GFP_HIGH);
- if (
!wait
) {
+ if (
atomic
) {
/*
/*
- * Not worth trying to allocate harder for
- *
__GFP_NOMEMALLOC even
if it can't schedule.
+ * Not worth trying to allocate harder for
__GFP_NOMEMALLOC even
+ * if it can't schedule.
*/
*/
- if
(!(gfp_mask & __GFP_NOMEMALLOC))
+ if (!(gfp_mask & __GFP_NOMEMALLOC))
alloc_flags |= ALLOC_HARDER;
/*
alloc_flags |= ALLOC_HARDER;
/*
- * Ignore cpuset
if GFP_ATOMIC (!wait) rather than fail alloc.
- *
See also cpuset_zone_allowed() comment in kernel/cpuset.c
.
+ * Ignore cpuset
mems for GFP_ATOMIC rather than fail, see the
+ *
comment for __cpuset_node_allowed_softwall()
.
*/
alloc_flags &= ~ALLOC_CPUSET;
} else if (unlikely(rt_task(current)) && !in_interrupt())
*/
alloc_flags &= ~ALLOC_CPUSET;
} else if (unlikely(rt_task(current)) && !in_interrupt())