These patches add tests for memblock_alloc_exact_nid_raw(). There are two
sets of tests: range tests and NUMA tests. The range tests use a normal
(i.e., UMA) simulated physical memory and set the nid to NUMA_NO_NODE. The
NUMA tests use a simulated physical memory that is set up with multiple
NUMA nodes. Additionally, most of the NUMA tests set nid != NUMA_NO_NODE.
For the range tests, the TEST_F_EXACT flag is used to run the same set of
range tests used for memblock_alloc_try_nid_raw(). The NUMA tests have the
same setup as the corresponding test for memblock_alloc_try_nid_raw(), but
several of the memblock_alloc_exact_nid_raw() tests fail to allocate
memory in setups where the memblock_alloc_try_nid_raw() test would
allocate memory. Also, some memblock_alloc_exact_nid_raw() tests drop the
lower limit of the requested range in order to allocate within the
requested node, but the same setup in a memblock_alloc_try_nid_raw() test
allocates within the requested range.
---
Changelog
v1 -> v2
PATCH 0:
- Add missing memblock_alloc_exact_nid_raw to subject line
v2 -> v3
Based on feedback from David Hildenbrand:
PATCH 1:
- alloc_nid_api.c, alloc_nid_api.h, common.h:
+ Add TEST_F_EXACT flag so that tests in alloc_nid_api.c can be run
with that flag to test memblock_alloc_exact_nid_raw()
- alloc_exact_nid_api.c:
+ Update to run range tests in alloc_nid_api.c with TEST_F_EXACT flag
instead of using a separate set of tests
- alloc_nid_api.c:
+ Rename tests and other functions by removing "_try" so that the
function names are general enough to refer to any of the
memblock_alloc_*nid*() functions of the memblock API
---
Rebecca Mckeever (5):
memblock tests: introduce range tests for memblock_alloc_exact_nid_raw
memblock tests: add top-down NUMA tests for
memblock_alloc_exact_nid_raw
memblock tests: add bottom-up NUMA tests for
memblock_alloc_exact_nid_raw
memblock tests: add generic NUMA tests for
memblock_alloc_exact_nid_raw
memblock tests: remove completed TODO item
tools/testing/memblock/Makefile | 2 +-
tools/testing/memblock/TODO | 7 +-
tools/testing/memblock/main.c | 2 +
.../memblock/tests/alloc_exact_nid_api.c | 1113 +++++++++++++++++
.../memblock/tests/alloc_exact_nid_api.h | 25 +
tools/testing/memblock/tests/alloc_nid_api.c | 542 ++++----
tools/testing/memblock/tests/alloc_nid_api.h | 1 +
tools/testing/memblock/tests/common.h | 2 +
8 files changed, 1425 insertions(+), 269 deletions(-)
create mode 100644 tools/testing/memblock/tests/alloc_exact_nid_api.c
create mode 100644 tools/testing/memblock/tests/alloc_exact_nid_api.h
--
2.25.1
Add tests for memblock_alloc_exact_nid_raw() where the simulated physical
memory is set up with multiple NUMA nodes. Additionally, all of these
tests set nid != NUMA_NO_NODE. These tests are run with a bottom-up
allocation direction.
The tested scenarios are:
Range unrestricted:
- region can be allocated in the specific node requested:
+ there are no previously reserved regions
+ the requested node is partially reserved but has enough space
Range restricted:
- region can be allocated in the specific node requested after dropping
min_addr:
+ range partially overlaps with two different nodes, where the
first node is the requested node
+ range partially overlaps with two different nodes, where the
requested node ends before min_addr
+ range overlaps with multiple nodes along node boundaries, and
the requested node ends before min_addr
Signed-off-by: Rebecca Mckeever <[email protected]>
---
.../memblock/tests/alloc_exact_nid_api.c | 282 ++++++++++++++++++
1 file changed, 282 insertions(+)
diff --git a/tools/testing/memblock/tests/alloc_exact_nid_api.c b/tools/testing/memblock/tests/alloc_exact_nid_api.c
index 79150784b373..b97b5c04de05 100644
--- a/tools/testing/memblock/tests/alloc_exact_nid_api.c
+++ b/tools/testing/memblock/tests/alloc_exact_nid_api.c
@@ -288,12 +288,286 @@ static int alloc_exact_nid_top_down_numa_no_overlap_low_check(void)
return 0;
}
+/*
+ * A test that tries to allocate a memory region in a specific NUMA node that
+ * has enough memory to allocate a region of the requested size.
+ * Expect to allocate an aligned region at the beginning of the requested node.
+ */
+static int alloc_exact_nid_bottom_up_numa_simple_check(void)
+{
+ int nid_req = 3;
+ struct memblock_region *new_rgn = &memblock.reserved.regions[0];
+ struct memblock_region *req_node = &memblock.memory.regions[nid_req];
+ void *allocated_ptr = NULL;
+ phys_addr_t size;
+ phys_addr_t min_addr;
+ phys_addr_t max_addr;
+
+ PREFIX_PUSH();
+ setup_numa_memblock(node_fractions);
+
+ ASSERT_LE(SZ_4, req_node->size);
+ size = req_node->size / SZ_4;
+ min_addr = memblock_start_of_DRAM();
+ max_addr = memblock_end_of_DRAM();
+
+ allocated_ptr = memblock_alloc_exact_nid_raw(size, SMP_CACHE_BYTES,
+ min_addr, max_addr,
+ nid_req);
+
+ ASSERT_NE(allocated_ptr, NULL);
+ ASSERT_MEM_NE(allocated_ptr, 0, size);
+
+ ASSERT_EQ(new_rgn->size, size);
+ ASSERT_EQ(new_rgn->base, req_node->base);
+ ASSERT_LE(region_end(new_rgn), region_end(req_node));
+
+ ASSERT_EQ(memblock.reserved.cnt, 1);
+ ASSERT_EQ(memblock.reserved.total_size, size);
+
+ test_pass_pop();
+
+ return 0;
+}
+
+/*
+ * A test that tries to allocate a memory region in a specific NUMA node that
+ * is partially reserved but has enough memory for the allocated region:
+ *
+ * | +---------------------------------------+ |
+ * | | requested | |
+ * +-----------+---------------------------------------+---------+
+ *
+ * | +------------------+-----+ |
+ * | | reserved | new | |
+ * +-----------+------------------+-----+------------------------+
+ *
+ * Expect to allocate an aligned region in the requested node that merges with
+ * the existing reserved region. The total size gets updated.
+ */
+static int alloc_exact_nid_bottom_up_numa_part_reserved_check(void)
+{
+ int nid_req = 4;
+ struct memblock_region *new_rgn = &memblock.reserved.regions[0];
+ struct memblock_region *req_node = &memblock.memory.regions[nid_req];
+ void *allocated_ptr = NULL;
+ struct region r1;
+ phys_addr_t size;
+ phys_addr_t min_addr;
+ phys_addr_t max_addr;
+ phys_addr_t total_size;
+
+ PREFIX_PUSH();
+ setup_numa_memblock(node_fractions);
+
+ ASSERT_LE(SZ_8, req_node->size);
+ r1.base = req_node->base;
+ r1.size = req_node->size / SZ_2;
+ size = r1.size / SZ_4;
+ min_addr = memblock_start_of_DRAM();
+ max_addr = memblock_end_of_DRAM();
+ total_size = size + r1.size;
+
+ memblock_reserve(r1.base, r1.size);
+ allocated_ptr = memblock_alloc_exact_nid_raw(size, SMP_CACHE_BYTES,
+ min_addr, max_addr,
+ nid_req);
+
+ ASSERT_NE(allocated_ptr, NULL);
+ ASSERT_MEM_NE(allocated_ptr, 0, size);
+
+ ASSERT_EQ(new_rgn->size, total_size);
+ ASSERT_EQ(new_rgn->base, req_node->base);
+ ASSERT_LE(region_end(new_rgn), region_end(req_node));
+
+ ASSERT_EQ(memblock.reserved.cnt, 1);
+ ASSERT_EQ(memblock.reserved.total_size, total_size);
+
+ test_pass_pop();
+
+ return 0;
+}
+
+/*
+ * A test that tries to allocate a memory region that spans over the min_addr
+ * and max_addr range and overlaps with two different nodes, where the first
+ * node is the requested node:
+ *
+ * min_addr
+ * | max_addr
+ * | |
+ * v v
+ * | +-----------------------+-----------+ |
+ * | | requested | node3 | |
+ * +-----------+-----------------------+-----------+--------------+
+ * + +
+ * | +-----------+ |
+ * | | rgn | |
+ * +-----------+-----------+--------------------------------------+
+ *
+ * Expect to drop the lower limit and allocate a memory region at the beginning
+ * of the requested node.
+ */
+static int alloc_exact_nid_bottom_up_numa_split_range_low_check(void)
+{
+ int nid_req = 2;
+ struct memblock_region *new_rgn = &memblock.reserved.regions[0];
+ struct memblock_region *req_node = &memblock.memory.regions[nid_req];
+ void *allocated_ptr = NULL;
+ phys_addr_t size = SZ_512;
+ phys_addr_t min_addr;
+ phys_addr_t max_addr;
+ phys_addr_t req_node_end;
+
+ PREFIX_PUSH();
+ setup_numa_memblock(node_fractions);
+
+ req_node_end = region_end(req_node);
+ min_addr = req_node_end - SZ_256;
+ max_addr = min_addr + size;
+
+ allocated_ptr = memblock_alloc_exact_nid_raw(size, SMP_CACHE_BYTES,
+ min_addr, max_addr,
+ nid_req);
+
+ ASSERT_NE(allocated_ptr, NULL);
+ ASSERT_MEM_NE(allocated_ptr, 0, size);
+
+ ASSERT_EQ(new_rgn->size, size);
+ ASSERT_EQ(new_rgn->base, req_node->base);
+ ASSERT_LE(region_end(new_rgn), req_node_end);
+
+ ASSERT_EQ(memblock.reserved.cnt, 1);
+ ASSERT_EQ(memblock.reserved.total_size, size);
+
+ test_pass_pop();
+
+ return 0;
+}
+
+/*
+ * A test that tries to allocate a memory region that spans over the min_addr
+ * and max_addr range and overlaps with two different nodes, where the requested
+ * node ends before min_addr:
+ *
+ * min_addr
+ * | max_addr
+ * | |
+ * v v
+ * | +---------------+ +-------------+---------+ |
+ * | | requested | | node1 | node2 | |
+ * +----+---------------+--------+-------------+---------+---------+
+ * + +
+ * | +---------+ |
+ * | | rgn | |
+ * +----+---------+------------------------------------------------+
+ *
+ * Expect to drop the lower limit and allocate a memory region that starts at
+ * the beginning of the requested node.
+ */
+static int alloc_exact_nid_bottom_up_numa_no_overlap_split_check(void)
+{
+ int nid_req = 2;
+ struct memblock_region *new_rgn = &memblock.reserved.regions[0];
+ struct memblock_region *req_node = &memblock.memory.regions[nid_req];
+ struct memblock_region *node2 = &memblock.memory.regions[6];
+ void *allocated_ptr = NULL;
+ phys_addr_t size;
+ phys_addr_t min_addr;
+ phys_addr_t max_addr;
+
+ PREFIX_PUSH();
+ setup_numa_memblock(node_fractions);
+
+ size = SZ_512;
+ min_addr = node2->base - SZ_256;
+ max_addr = min_addr + size;
+
+ allocated_ptr = memblock_alloc_exact_nid_raw(size, SMP_CACHE_BYTES,
+ min_addr, max_addr,
+ nid_req);
+
+ ASSERT_NE(allocated_ptr, NULL);
+ ASSERT_MEM_NE(allocated_ptr, 0, size);
+
+ ASSERT_EQ(new_rgn->size, size);
+ ASSERT_EQ(new_rgn->base, req_node->base);
+ ASSERT_LE(region_end(new_rgn), region_end(req_node));
+
+ ASSERT_EQ(memblock.reserved.cnt, 1);
+ ASSERT_EQ(memblock.reserved.total_size, size);
+
+ test_pass_pop();
+
+ return 0;
+}
+
+/*
+ * A test that tries to allocate memory within min_addr and max_add range when
+ * the requested node and the range do not overlap, and requested node ends
+ * before min_addr. The range overlaps with multiple nodes along node
+ * boundaries:
+ *
+ * min_addr
+ * | max_addr
+ * | |
+ * v v
+ * |-----------+ +----------+----...----+----------+ |
+ * | requested | | min node | ... | max node | |
+ * +-----------+-----------+----------+----...----+----------+------+
+ * + +
+ * |-----+ |
+ * | rgn | |
+ * +-----+----------------------------------------------------------+
+ *
+ * Expect to drop the lower limit and allocate a memory region that starts at
+ * the beginning of the requested node.
+ */
+static int alloc_exact_nid_bottom_up_numa_no_overlap_low_check(void)
+{
+ int nid_req = 0;
+ struct memblock_region *new_rgn = &memblock.reserved.regions[0];
+ struct memblock_region *req_node = &memblock.memory.regions[nid_req];
+ struct memblock_region *min_node = &memblock.memory.regions[2];
+ struct memblock_region *max_node = &memblock.memory.regions[5];
+ void *allocated_ptr = NULL;
+ phys_addr_t size = SZ_64;
+ phys_addr_t max_addr;
+ phys_addr_t min_addr;
+
+ PREFIX_PUSH();
+ setup_numa_memblock(node_fractions);
+
+ min_addr = min_node->base;
+ max_addr = region_end(max_node);
+
+ allocated_ptr = memblock_alloc_exact_nid_raw(size, SMP_CACHE_BYTES,
+ min_addr, max_addr,
+ nid_req);
+
+ ASSERT_NE(allocated_ptr, NULL);
+ ASSERT_MEM_NE(allocated_ptr, 0, size);
+
+ ASSERT_EQ(new_rgn->size, size);
+ ASSERT_EQ(new_rgn->base, req_node->base);
+ ASSERT_LE(region_end(new_rgn), region_end(req_node));
+
+ ASSERT_EQ(memblock.reserved.cnt, 1);
+ ASSERT_EQ(memblock.reserved.total_size, size);
+
+ test_pass_pop();
+
+ return 0;
+}
+
/* Test case wrappers for NUMA tests */
static int alloc_exact_nid_numa_simple_check(void)
{
test_print("\tRunning %s...\n", __func__);
memblock_set_bottom_up(false);
alloc_exact_nid_top_down_numa_simple_check();
+ memblock_set_bottom_up(true);
+ alloc_exact_nid_bottom_up_numa_simple_check();
return 0;
}
@@ -303,6 +577,8 @@ static int alloc_exact_nid_numa_part_reserved_check(void)
test_print("\tRunning %s...\n", __func__);
memblock_set_bottom_up(false);
alloc_exact_nid_top_down_numa_part_reserved_check();
+ memblock_set_bottom_up(true);
+ alloc_exact_nid_bottom_up_numa_part_reserved_check();
return 0;
}
@@ -312,6 +588,8 @@ static int alloc_exact_nid_numa_split_range_low_check(void)
test_print("\tRunning %s...\n", __func__);
memblock_set_bottom_up(false);
alloc_exact_nid_top_down_numa_split_range_low_check();
+ memblock_set_bottom_up(true);
+ alloc_exact_nid_bottom_up_numa_split_range_low_check();
return 0;
}
@@ -321,6 +599,8 @@ static int alloc_exact_nid_numa_no_overlap_split_check(void)
test_print("\tRunning %s...\n", __func__);
memblock_set_bottom_up(false);
alloc_exact_nid_top_down_numa_no_overlap_split_check();
+ memblock_set_bottom_up(true);
+ alloc_exact_nid_bottom_up_numa_no_overlap_split_check();
return 0;
}
@@ -330,6 +610,8 @@ static int alloc_exact_nid_numa_no_overlap_low_check(void)
test_print("\tRunning %s...\n", __func__);
memblock_set_bottom_up(false);
alloc_exact_nid_top_down_numa_no_overlap_low_check();
+ memblock_set_bottom_up(true);
+ alloc_exact_nid_bottom_up_numa_no_overlap_low_check();
return 0;
}
--
2.25.1
Hi Mike,
I noticed that the memblock tree has been updated since I sent this
patch set. Do you want me to send an updated patch set applied on top of
the current tree?
On Wed, Oct 19, 2022 at 01:34:07PM -0500, Rebecca Mckeever wrote:
> These patches add tests for memblock_alloc_exact_nid_raw(). There are two
> sets of tests: range tests and NUMA tests. The range tests use a normal
> (i.e., UMA) simulated physical memory and set the nid to NUMA_NO_NODE. The
> NUMA tests use a simulated physical memory that is set up with multiple
> NUMA nodes. Additionally, most of the NUMA tests set nid != NUMA_NO_NODE.
>
> For the range tests, the TEST_F_EXACT flag is used to run the same set of
> range tests used for memblock_alloc_try_nid_raw(). The NUMA tests have the
> same setup as the corresponding test for memblock_alloc_try_nid_raw(), but
> several of the memblock_alloc_exact_nid_raw() tests fail to allocate
> memory in setups where the memblock_alloc_try_nid_raw() test would
> allocate memory. Also, some memblock_alloc_exact_nid_raw() tests drop the
> lower limit of the requested range in order to allocate within the
> requested node, but the same setup in a memblock_alloc_try_nid_raw() test
> allocates within the requested range.
>
> ---
> Changelog
>
> v1 -> v2
> PATCH 0:
> - Add missing memblock_alloc_exact_nid_raw to subject line
>
> v2 -> v3
> Based on feedback from David Hildenbrand:
> PATCH 1:
> - alloc_nid_api.c, alloc_nid_api.h, common.h:
> + Add TEST_F_EXACT flag so that tests in alloc_nid_api.c can be run
> with that flag to test memblock_alloc_exact_nid_raw()
> - alloc_exact_nid_api.c:
> + Update to run range tests in alloc_nid_api.c with TEST_F_EXACT flag
> instead of using a separate set of tests
> - alloc_nid_api.c:
> + Rename tests and other functions by removing "_try" so that the
> function names are general enough to refer to any of the
> memblock_alloc_*nid*() functions of the memblock API
> ---
>
> Rebecca Mckeever (5):
> memblock tests: introduce range tests for memblock_alloc_exact_nid_raw
> memblock tests: add top-down NUMA tests for
> memblock_alloc_exact_nid_raw
> memblock tests: add bottom-up NUMA tests for
> memblock_alloc_exact_nid_raw
> memblock tests: add generic NUMA tests for
> memblock_alloc_exact_nid_raw
> memblock tests: remove completed TODO item
>
> tools/testing/memblock/Makefile | 2 +-
> tools/testing/memblock/TODO | 7 +-
> tools/testing/memblock/main.c | 2 +
> .../memblock/tests/alloc_exact_nid_api.c | 1113 +++++++++++++++++
> .../memblock/tests/alloc_exact_nid_api.h | 25 +
> tools/testing/memblock/tests/alloc_nid_api.c | 542 ++++----
> tools/testing/memblock/tests/alloc_nid_api.h | 1 +
> tools/testing/memblock/tests/common.h | 2 +
> 8 files changed, 1425 insertions(+), 269 deletions(-)
> create mode 100644 tools/testing/memblock/tests/alloc_exact_nid_api.c
> create mode 100644 tools/testing/memblock/tests/alloc_exact_nid_api.h
>
> --
> 2.25.1
>
Thanks,
Rebecca
Hi Rebecca,
On Mon, Oct 31, 2022 at 12:00:06AM -0500, Rebecca Mckeever wrote:
> Hi Mike,
>
> I noticed that the memblock tree has been updated since I sent this
> patch set. Do you want me to send an updated patch set applied on top of
> the current tree?
No need, the only actual conflict is in TODO, I'll fix it while applying.
> On Wed, Oct 19, 2022 at 01:34:07PM -0500, Rebecca Mckeever wrote:
> > These patches add tests for memblock_alloc_exact_nid_raw(). There are two
> > sets of tests: range tests and NUMA tests. The range tests use a normal
> > (i.e., UMA) simulated physical memory and set the nid to NUMA_NO_NODE. The
> > NUMA tests use a simulated physical memory that is set up with multiple
> > NUMA nodes. Additionally, most of the NUMA tests set nid != NUMA_NO_NODE.
> >
> > For the range tests, the TEST_F_EXACT flag is used to run the same set of
> > range tests used for memblock_alloc_try_nid_raw(). The NUMA tests have the
> > same setup as the corresponding test for memblock_alloc_try_nid_raw(), but
> > several of the memblock_alloc_exact_nid_raw() tests fail to allocate
> > memory in setups where the memblock_alloc_try_nid_raw() test would
> > allocate memory. Also, some memblock_alloc_exact_nid_raw() tests drop the
> > lower limit of the requested range in order to allocate within the
> > requested node, but the same setup in a memblock_alloc_try_nid_raw() test
> > allocates within the requested range.
> >
> > ---
> > Changelog
> >
> > v1 -> v2
> > PATCH 0:
> > - Add missing memblock_alloc_exact_nid_raw to subject line
> >
> > v2 -> v3
> > Based on feedback from David Hildenbrand:
> > PATCH 1:
> > - alloc_nid_api.c, alloc_nid_api.h, common.h:
> > + Add TEST_F_EXACT flag so that tests in alloc_nid_api.c can be run
> > with that flag to test memblock_alloc_exact_nid_raw()
> > - alloc_exact_nid_api.c:
> > + Update to run range tests in alloc_nid_api.c with TEST_F_EXACT flag
> > instead of using a separate set of tests
> > - alloc_nid_api.c:
> > + Rename tests and other functions by removing "_try" so that the
> > function names are general enough to refer to any of the
> > memblock_alloc_*nid*() functions of the memblock API
> > ---
> >
> > Rebecca Mckeever (5):
> > memblock tests: introduce range tests for memblock_alloc_exact_nid_raw
> > memblock tests: add top-down NUMA tests for
> > memblock_alloc_exact_nid_raw
> > memblock tests: add bottom-up NUMA tests for
> > memblock_alloc_exact_nid_raw
> > memblock tests: add generic NUMA tests for
> > memblock_alloc_exact_nid_raw
> > memblock tests: remove completed TODO item
> >
> > tools/testing/memblock/Makefile | 2 +-
> > tools/testing/memblock/TODO | 7 +-
> > tools/testing/memblock/main.c | 2 +
> > .../memblock/tests/alloc_exact_nid_api.c | 1113 +++++++++++++++++
> > .../memblock/tests/alloc_exact_nid_api.h | 25 +
> > tools/testing/memblock/tests/alloc_nid_api.c | 542 ++++----
> > tools/testing/memblock/tests/alloc_nid_api.h | 1 +
> > tools/testing/memblock/tests/common.h | 2 +
> > 8 files changed, 1425 insertions(+), 269 deletions(-)
> > create mode 100644 tools/testing/memblock/tests/alloc_exact_nid_api.c
> > create mode 100644 tools/testing/memblock/tests/alloc_exact_nid_api.h
> >
> > --
> > 2.25.1
> >
> Thanks,
> Rebecca
--
Sincerely yours,
Mike.
On 19.10.22 20:34, Rebecca Mckeever wrote:
> Add tests for memblock_alloc_exact_nid_raw() where the simulated physical
> memory is set up with multiple NUMA nodes. Additionally, all of these
> tests set nid != NUMA_NO_NODE. These tests are run with a bottom-up
> allocation direction.
>
> The tested scenarios are:
>
> Range unrestricted:
> - region can be allocated in the specific node requested:
> + there are no previously reserved regions
> + the requested node is partially reserved but has enough space
>
> Range restricted:
> - region can be allocated in the specific node requested after dropping
> min_addr:
> + range partially overlaps with two different nodes, where the
> first node is the requested node
> + range partially overlaps with two different nodes, where the
> requested node ends before min_addr
> + range overlaps with multiple nodes along node boundaries, and
> the requested node ends before min_addr
>
> Signed-off-by: Rebecca Mckeever <[email protected]>
> ---
Acked-by: David Hildenbrand <[email protected]>
--
Thanks,
David / dhildenb
On 19.10.22 20:34, Rebecca Mckeever wrote:
> These patches add tests for memblock_alloc_exact_nid_raw(). There are two
> sets of tests: range tests and NUMA tests. The range tests use a normal
> (i.e., UMA) simulated physical memory and set the nid to NUMA_NO_NODE. The
> NUMA tests use a simulated physical memory that is set up with multiple
> NUMA nodes. Additionally, most of the NUMA tests set nid != NUMA_NO_NODE.
>
> For the range tests, the TEST_F_EXACT flag is used to run the same set of
> range tests used for memblock_alloc_try_nid_raw(). The NUMA tests have the
> same setup as the corresponding test for memblock_alloc_try_nid_raw(), but
> several of the memblock_alloc_exact_nid_raw() tests fail to allocate
> memory in setups where the memblock_alloc_try_nid_raw() test would
> allocate memory. Also, some memblock_alloc_exact_nid_raw() tests drop the
> lower limit of the requested range in order to allocate within the
> requested node, but the same setup in a memblock_alloc_try_nid_raw() test
> allocates within the requested range.
Thanks a lot Rebecca for moving forward with these changes even after
your Outreachy internship ended!
--
Thanks,
David / dhildenb