diff options
author | Johannes Weiner <hannes@cmpxchg.org> | 2009-09-21 20:01:48 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2009-09-22 10:17:30 -0400 |
commit | 451ea25da71590361c71bf3044c55b870a887d53 (patch) | |
tree | e2e9de6e7c1fb4f79c0413a3c4d401ec9263b722 /mm/page_alloc.c | |
parent | bf88c8c83e4425d17e29daa5354ffb1f8ba7b225 (diff) |
mm: perform non-atomic test-clear of PG_mlocked on free
By the time PG_mlocked is cleared in the page freeing path, nobody else is
looking at our page->flags anymore.
It is thus safe to make the test-and-clear non-atomic and thereby removing
an unnecessary and expensive operation from a hotpath.
Signed-off-by: Johannes Weiner <hannes@cmpxchg.org>
Reviewed-by: Christoph Lameter <cl@linux-foundation.org>
Reviewed-by: KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>
Cc: Christoph Lameter <cl@linux-foundation.org>
Cc: Mel Gorman <mel@csn.ul.ie>
Cc: Nick Piggin <nickpiggin@yahoo.com.au>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'mm/page_alloc.c')
-rw-r--r-- | mm/page_alloc.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/mm/page_alloc.c b/mm/page_alloc.c index 81926c7ef6f0..9242d13f4ff3 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c | |||
@@ -557,7 +557,7 @@ static void __free_pages_ok(struct page *page, unsigned int order) | |||
557 | unsigned long flags; | 557 | unsigned long flags; |
558 | int i; | 558 | int i; |
559 | int bad = 0; | 559 | int bad = 0; |
560 | int wasMlocked = TestClearPageMlocked(page); | 560 | int wasMlocked = __TestClearPageMlocked(page); |
561 | 561 | ||
562 | kmemcheck_free_shadow(page, order); | 562 | kmemcheck_free_shadow(page, order); |
563 | 563 | ||
@@ -1026,7 +1026,7 @@ static void free_hot_cold_page(struct page *page, int cold) | |||
1026 | struct zone *zone = page_zone(page); | 1026 | struct zone *zone = page_zone(page); |
1027 | struct per_cpu_pages *pcp; | 1027 | struct per_cpu_pages *pcp; |
1028 | unsigned long flags; | 1028 | unsigned long flags; |
1029 | int wasMlocked = TestClearPageMlocked(page); | 1029 | int wasMlocked = __TestClearPageMlocked(page); |
1030 | 1030 | ||
1031 | kmemcheck_free_shadow(page, 0); | 1031 | kmemcheck_free_shadow(page, 0); |
1032 | 1032 | ||