|
@@ -888,36 +888,36 @@ int do_migrate_pages(struct mm_struct *mm,
|
|
|
if (err)
|
|
|
goto out;
|
|
|
|
|
|
-/*
|
|
|
- * Find a 'source' bit set in 'tmp' whose corresponding 'dest'
|
|
|
- * bit in 'to' is not also set in 'tmp'. Clear the found 'source'
|
|
|
- * bit in 'tmp', and return that <source, dest> pair for migration.
|
|
|
- * The pair of nodemasks 'to' and 'from' define the map.
|
|
|
- *
|
|
|
- * If no pair of bits is found that way, fallback to picking some
|
|
|
- * pair of 'source' and 'dest' bits that are not the same. If the
|
|
|
- * 'source' and 'dest' bits are the same, this represents a node
|
|
|
- * that will be migrating to itself, so no pages need move.
|
|
|
- *
|
|
|
- * If no bits are left in 'tmp', or if all remaining bits left
|
|
|
- * in 'tmp' correspond to the same bit in 'to', return false
|
|
|
- * (nothing left to migrate).
|
|
|
- *
|
|
|
- * This lets us pick a pair of nodes to migrate between, such that
|
|
|
- * if possible the dest node is not already occupied by some other
|
|
|
- * source node, minimizing the risk of overloading the memory on a
|
|
|
- * node that would happen if we migrated incoming memory to a node
|
|
|
- * before migrating outgoing memory source that same node.
|
|
|
- *
|
|
|
- * A single scan of tmp is sufficient. As we go, we remember the
|
|
|
- * most recent <s, d> pair that moved (s != d). If we find a pair
|
|
|
- * that not only moved, but what's better, moved to an empty slot
|
|
|
- * (d is not set in tmp), then we break out then, with that pair.
|
|
|
- * Otherwise when we finish scannng from_tmp, we at least have the
|
|
|
- * most recent <s, d> pair that moved. If we get all the way through
|
|
|
- * the scan of tmp without finding any node that moved, much less
|
|
|
- * moved to an empty node, then there is nothing left worth migrating.
|
|
|
- */
|
|
|
+ /*
|
|
|
+ * Find a 'source' bit set in 'tmp' whose corresponding 'dest'
|
|
|
+ * bit in 'to' is not also set in 'tmp'. Clear the found 'source'
|
|
|
+ * bit in 'tmp', and return that <source, dest> pair for migration.
|
|
|
+ * The pair of nodemasks 'to' and 'from' define the map.
|
|
|
+ *
|
|
|
+ * If no pair of bits is found that way, fallback to picking some
|
|
|
+ * pair of 'source' and 'dest' bits that are not the same. If the
|
|
|
+ * 'source' and 'dest' bits are the same, this represents a node
|
|
|
+ * that will be migrating to itself, so no pages need move.
|
|
|
+ *
|
|
|
+ * If no bits are left in 'tmp', or if all remaining bits left
|
|
|
+ * in 'tmp' correspond to the same bit in 'to', return false
|
|
|
+ * (nothing left to migrate).
|
|
|
+ *
|
|
|
+ * This lets us pick a pair of nodes to migrate between, such that
|
|
|
+ * if possible the dest node is not already occupied by some other
|
|
|
+ * source node, minimizing the risk of overloading the memory on a
|
|
|
+ * node that would happen if we migrated incoming memory to a node
|
|
|
+ * before migrating outgoing memory source that same node.
|
|
|
+ *
|
|
|
+ * A single scan of tmp is sufficient. As we go, we remember the
|
|
|
+ * most recent <s, d> pair that moved (s != d). If we find a pair
|
|
|
+ * that not only moved, but what's better, moved to an empty slot
|
|
|
+ * (d is not set in tmp), then we break out then, with that pair.
|
|
|
+ * Otherwise when we finish scannng from_tmp, we at least have the
|
|
|
+ * most recent <s, d> pair that moved. If we get all the way through
|
|
|
+ * the scan of tmp without finding any node that moved, much less
|
|
|
+ * moved to an empty node, then there is nothing left worth migrating.
|
|
|
+ */
|
|
|
|
|
|
tmp = *from_nodes;
|
|
|
while (!nodes_empty(tmp)) {
|