mm: optimize put_mems_allowed() usage
Since put_mems_allowed() is strictly optional, its a seqcount retry, we don't need to evaluate the function if the allocation was in fact successful, saving a smp_rmb some loads and comparisons on some relative fast-paths. Since the naming, get/put_mems_allowed() does suggest a mandatory pairing, rename the interface, as suggested by Mel, to resemble the seqcount interface. This gives us: read_mems_allowed_begin() and read_mems_allowed_retry(), where it is important to note that the return value of the latter call is inverted from its previous incarnation. Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl> Signed-off-by: Mel Gorman <mgorman@suse.de> 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
91ca918648
commit
d26914d117
@@ -2739,7 +2739,7 @@ __alloc_pages_nodemask(gfp_t gfp_mask, unsigned int order,
|
||||
return NULL;
|
||||
|
||||
retry_cpuset:
|
||||
cpuset_mems_cookie = get_mems_allowed();
|
||||
cpuset_mems_cookie = read_mems_allowed_begin();
|
||||
|
||||
/* The preferred zone is used for statistics later */
|
||||
first_zones_zonelist(zonelist, high_zoneidx,
|
||||
@@ -2777,7 +2777,7 @@ out:
|
||||
* the mask is being updated. If a page allocation is about to fail,
|
||||
* check if the cpuset changed during allocation and if so, retry.
|
||||
*/
|
||||
if (unlikely(!put_mems_allowed(cpuset_mems_cookie) && !page))
|
||||
if (unlikely(!page && read_mems_allowed_retry(cpuset_mems_cookie)))
|
||||
goto retry_cpuset;
|
||||
|
||||
memcg_kmem_commit_charge(page, memcg, order);
|
||||
@@ -3045,9 +3045,9 @@ bool skip_free_areas_node(unsigned int flags, int nid)
|
||||
goto out;
|
||||
|
||||
do {
|
||||
cpuset_mems_cookie = get_mems_allowed();
|
||||
cpuset_mems_cookie = read_mems_allowed_begin();
|
||||
ret = !node_isset(nid, cpuset_current_mems_allowed);
|
||||
} while (!put_mems_allowed(cpuset_mems_cookie));
|
||||
} while (read_mems_allowed_retry(cpuset_mems_cookie));
|
||||
out:
|
||||
return ret;
|
||||
}
|
||||
|
Reference in New Issue
Block a user