Commit a8cc75dd authored by Anshuman Khandual's avatar Anshuman Khandual Committed by Zheng Zengkai
Browse files

mm: Enable Buddy allocation isolation for CDM nodes

ascend inclusion
category: feature
bugzilla: https://gitee.com/openeuler/kernel/issues/I4JMLR


CVE: NA
-------------------

This implements allocation isolation for CDM nodes in buddy allocator by
discarding CDM memory zones all the time except in the cases where the gfp
flag has got __GFP_THISNODE or the nodemask contains CDM nodes in cases
where it is non NULL (explicit allocation request in the kernel or user
process MPOL_BIND policy based requests).

Signed-off-by: default avatarAnshuman Khandual <khandual@linux.vnet.ibm.com>
Signed-off-by: default avatarLijun Fang <fanglijun3@huawei.com>
Reviewed-by: default avatarWeilong Chen <chenweilong@huawei.com>
Signed-off-by: default avatarZheng Zengkai <zhengzengkai@huawei.com>
parent 5f387449
Loading
Loading
Loading
Loading
+15 −0
Original line number Original line Diff line number Diff line
@@ -3812,6 +3812,21 @@ get_page_from_freelist(gfp_t gfp_mask, unsigned int order, int alloc_flags,
		struct page *page;
		struct page *page;
		unsigned long mark;
		unsigned long mark;


		/*
		 * CDM nodes get skipped if the requested gfp flag
		 * does not have __GFP_THISNODE set or the nodemask
		 * does not have any CDM nodes in case the nodemask
		 * is non NULL (explicit allocation requests from
		 * kernel or user process MPOL_BIND policy which has
		 * CDM nodes).
		 */
		if (is_cdm_node(zone->zone_pgdat->node_id)) {
			if (!(gfp_mask & __GFP_THISNODE)) {
				if (!ac->nodemask)
					continue;
			}
		}

		if (cpusets_enabled() &&
		if (cpusets_enabled() &&
			(alloc_flags & ALLOC_CPUSET) &&
			(alloc_flags & ALLOC_CPUSET) &&
			!__cpuset_zone_allowed(zone, gfp_mask))
			!__cpuset_zone_allowed(zone, gfp_mask))