diff options
| author | Rebecca Mckeever <remckee0@gmail.com> | 2022-09-13 00:21:10 -0500 |
|---|---|---|
| committer | Mike Rapoport <rppt@linux.ibm.com> | 2022-09-18 10:30:20 +0300 |
| commit | 50c80241f15890a64b9302187faaeb7cfe78b4b8 (patch) | |
| tree | 0fecc9b805650f0a57d151d4e205c3e6b0fcfc27 /tools/testing/memblock/tests/common.h | |
| parent | b338bde5a3a9c4ccf6c83e0a20c8de3ad281ef02 (diff) | |
| download | linux-next-50c80241f15890a64b9302187faaeb7cfe78b4b8.tar.gz linux-next-50c80241f15890a64b9302187faaeb7cfe78b4b8.zip | |
memblock tests: add top-down NUMA tests for memblock_alloc_try_nid*
Add tests for memblock_alloc_try_nid() and memblock_alloc_try_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 top-down 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
- the specific node requested cannot accommodate the request, but the
region can be allocated in a different node:
+ there are no previously reserved regions, but node is too small
+ the requested node is fully reserved
+ the requested node is partially reserved and does not have
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
- region cannot be allocated in the specific node requested, but it can be
allocated in the requested range:
+ range overlaps with multiple nodes along node boundaries, and the
requested node ends before min_addr
+ range overlaps with multiple nodes along node boundaries, and the
requested node starts after max_addr
- region cannot be allocated in the specific node requested, but it can be
allocated after dropping min_addr:
+ range partially overlaps with two different nodes, where the
second node is the requested node
Acked-by: David Hildenbrand <david@redhat.com>
Signed-off-by: Rebecca Mckeever <remckee0@gmail.com>
Signed-off-by: Mike Rapoport <rppt@linux.ibm.com>
Link: https://lore.kernel.org/r/84009c5b3969337ccf89df850db56d364f8c228b.1663046060.git.remckee0@gmail.com
Diffstat (limited to 'tools/testing/memblock/tests/common.h')
| -rw-r--r-- | tools/testing/memblock/tests/common.h | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/tools/testing/memblock/tests/common.h b/tools/testing/memblock/tests/common.h index def71648887f..d6bbbe63bfc3 100644 --- a/tools/testing/memblock/tests/common.h +++ b/tools/testing/memblock/tests/common.h @@ -60,6 +60,19 @@ enum test_flags { } while (0) /** + * ASSERT_LE(): + * Check the condition + * @_expected <= @_seen + * If false, print failed test message (if running with --verbose) and then + * assert. + */ +#define ASSERT_LE(_expected, _seen) do { \ + if ((_expected) > (_seen)) \ + test_fail(); \ + assert((_expected) <= (_seen)); \ +} while (0) + +/** * ASSERT_MEM_EQ(): * Check that the first @_size bytes of @_seen are all equal to @_expected. * If false, print failed test message (if running with --verbose) and then @@ -100,6 +113,11 @@ struct region { phys_addr_t size; }; +static inline phys_addr_t __maybe_unused region_end(struct memblock_region *rgn) +{ + return rgn->base + rgn->size; +} + void reset_memblock_regions(void); void reset_memblock_attributes(void); void setup_memblock(void); |
