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>
This commit is contained in:
committed by
Linus Torvalds
parent
bf88c8c83e
commit
451ea25da7
@ -557,7 +557,7 @@ static void __free_pages_ok(struct page *page, unsigned int order)
|
||||
unsigned long flags;
|
||||
int i;
|
||||
int bad = 0;
|
||||
int wasMlocked = TestClearPageMlocked(page);
|
||||
int wasMlocked = __TestClearPageMlocked(page);
|
||||
|
||||
kmemcheck_free_shadow(page, order);
|
||||
|
||||
@ -1026,7 +1026,7 @@ static void free_hot_cold_page(struct page *page, int cold)
|
||||
struct zone *zone = page_zone(page);
|
||||
struct per_cpu_pages *pcp;
|
||||
unsigned long flags;
|
||||
int wasMlocked = TestClearPageMlocked(page);
|
||||
int wasMlocked = __TestClearPageMlocked(page);
|
||||
|
||||
kmemcheck_free_shadow(page, 0);
|
||||
|
||||
|
Reference in New Issue
Block a user