[PATCH v3 2/2] mm/mm_init: simplify ZONE_MOVABLE branch in zone_spanned_pages_in_node()

Sang-Heon Jeon <[email protected]>
Newsgroups org.kernel.vger.linux-kernel,org.kvack.linux-mm
Message-ID <[email protected]>
*zone_start_pfn and *zone_end_pfn are first assigned
clamp(node_start_pfn, zone_low, zone_high) and clamp(node_end_pfn,
zone_low, zone_high).

If movable_pfn != 0, the branches adjust them as follows.

1. If zone_type == ZONE_MOVABLE, *zone_start_pfn = movable_pfn, which
   can be outside the node, and *zone_end_pfn =
   min(node_end_pfn, ...), which is at most node_end_pfn.

2. Else If *zone_start_pfn < movable_pfn < *zone_end_pfn,
   *zone_end_pfn = movable_pfn.

3. Else If *zone_start_pfn >= movable_pfn, *zone_start_pfn =
   *zone_end_pfn.

4. Else *zone_start_pfn < movable_pfn && *zone_end_pfn <= movable_pfn,
   and nothing is assigned.

If node_end_pfn < zone_low or node_start_pfn > zone_high,
*zone_start_pfn and *zone_end_pfn are both zone_low or both
zone_high, outside the node.

Then case 2 cannot apply, in case 3 *zone_start_pfn = *zone_end_pfn,
which is that same pfn, and in case 4 nothing is assigned. So the
check against node_start_pfn and node_end_pfn returns 0 early.

Otherwise node_start_pfn <= *zone_start_pfn <= *zone_end_pfn <=
node_end_pfn.

Then in case 2 *zone_end_pfn = movable_pfn, in case 3
*zone_start_pfn = *zone_end_pfn, and in case 4 nothing is assigned.
So *zone_start_pfn and *zone_end_pfn stay within the node, the check
does not return 0, and min(*zone_end_pfn, node_end_pfn) and
max(*zone_start_pfn, node_start_pfn) change nothing.

So the check, min(*zone_end_pfn, node_end_pfn), and
max(*zone_start_pfn, node_start_pfn) only have an effect in case 1.

Also, cases 2 and 4 both have *zone_start_pfn < movable_pfn, and
min(*zone_end_pfn, movable_pfn) is movable_pfn in case 2 and
*zone_end_pfn in case 4. So the two cases can be merged into one
branch and case 3 becomes its else.

So remove *zone_end_pfn = min(*zone_end_pfn, node_end_pfn), move the
check and *zone_start_pfn = max(*zone_start_pfn, node_start_pfn)
inside the ZONE_MOVABLE branch, and merge cases 2 and 4 with
*zone_end_pfn = min(*zone_end_pfn, movable_pfn).

No functional change.

Signed-off-by: Sang-Heon Jeon <[email protected]>
---
 mm/mm_init.c | 27 +++++++++++++--------------
 1 file changed, 13 insertions(+), 14 deletions(-)

diff --git a/mm/mm_init.c b/mm/mm_init.c
index df67d4e6f646..ab445111a846 100644
--- a/mm/mm_init.c
+++ b/mm/mm_init.c
@@ -1208,25 +1208,24 @@ static unsigned long __init zone_spanned_pages_in_node(int nid,
 		*zone_end_pfn = min(node_end_pfn,
 			arch_zone_highest_possible_pfn[movable_zone]);
 
-	/* Adjust for ZONE_MOVABLE starting within this range */
-	} else if (*zone_start_pfn < movable_pfn &&
-		   *zone_end_pfn > movable_pfn) {
-		*zone_end_pfn = movable_pfn;
+		/* Check that this node has pages within the zone's required range */
+		if (*zone_end_pfn < node_start_pfn ||
+		    *zone_start_pfn > node_end_pfn)
+			return 0;
 
-	/* Check if this whole range is within ZONE_MOVABLE */
-	} else if (*zone_start_pfn >= movable_pfn) {
+		/* Move the zone start inside the node if necessary */
+		*zone_start_pfn = max(*zone_start_pfn, node_start_pfn);
+
+	/* This range starts below ZONE_MOVABLE */
+	} else if (*zone_start_pfn < movable_pfn) {
+		*zone_end_pfn = min(*zone_end_pfn, movable_pfn);
+
+	/* This whole range is within ZONE_MOVABLE */
+	} else {
 		*zone_start_pfn = *zone_end_pfn;
 	}
 
 out:
-	/* Check that this node has pages within the zone's required range */
-	if (*zone_end_pfn < node_start_pfn || *zone_start_pfn > node_end_pfn)
-		return 0;
-
-	/* Move the zone boundaries inside the node if necessary */
-	*zone_end_pfn = min(*zone_end_pfn, node_end_pfn);
-	*zone_start_pfn = max(*zone_start_pfn, node_start_pfn);
-
 	/* Return the spanned pages */
 	return *zone_end_pfn - *zone_start_pfn;
 }
-- 
2.43.0
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.