memblock tests: Add memblock reset function
Memblock simulator needs to be able to reset memblock data structures between different test cases. Add a function that sets all fields to their default values. Add a test checking if memblock is being initialized to expected values. Signed-off-by: Karolina Drobnik <karolinadrobnik@gmail.com> Signed-off-by: Mike Rapoport <rppt@kernel.org> Link: https://lore.kernel.org/r/8c185aa7e0dd68c2c7e937c9a06c90ae413e240f.1643796665.git.karolinadrobnik@gmail.com
This commit is contained in:
committed by
Mike Rapoport
parent
16802e55de
commit
f3252a22d1
@@ -6,7 +6,9 @@ CFLAGS += -I. -I../../include -Wall -O2 -fsanitize=address \
|
|||||||
-fsanitize=undefined -D CONFIG_PHYS_ADDR_T_64BIT
|
-fsanitize=undefined -D CONFIG_PHYS_ADDR_T_64BIT
|
||||||
LDFLAGS += -fsanitize=address -fsanitize=undefined
|
LDFLAGS += -fsanitize=address -fsanitize=undefined
|
||||||
TARGETS = main
|
TARGETS = main
|
||||||
OFILES = main.o memblock.o lib/slab.o mmzone.o slab.o
|
TEST_OFILES = tests/basic_api.o tests/common.o
|
||||||
|
DEP_OFILES = memblock.o lib/slab.o mmzone.o slab.o
|
||||||
|
OFILES = main.o $(DEP_OFILES) $(TEST_OFILES)
|
||||||
EXTR_SRC = ../../../mm/memblock.c
|
EXTR_SRC = ../../../mm/memblock.c
|
||||||
|
|
||||||
ifeq ($(BUILD), 32)
|
ifeq ($(BUILD), 32)
|
||||||
|
|||||||
@@ -1,6 +1,8 @@
|
|||||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
|
#include "tests/basic_api.h"
|
||||||
|
|
||||||
int main(int argc, char **argv)
|
int main(int argc, char **argv)
|
||||||
{
|
{
|
||||||
|
memblock_basic_checks();
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|||||||
32
tools/testing/memblock/tests/basic_api.c
Normal file
32
tools/testing/memblock/tests/basic_api.c
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
|
#include <string.h>
|
||||||
|
#include <linux/memblock.h>
|
||||||
|
#include "basic_api.h"
|
||||||
|
|
||||||
|
#define EXPECTED_MEMBLOCK_REGIONS 128
|
||||||
|
|
||||||
|
static int memblock_initialization_check(void)
|
||||||
|
{
|
||||||
|
reset_memblock();
|
||||||
|
|
||||||
|
assert(memblock.memory.regions);
|
||||||
|
assert(memblock.memory.cnt == 1);
|
||||||
|
assert(memblock.memory.max == EXPECTED_MEMBLOCK_REGIONS);
|
||||||
|
assert(strcmp(memblock.memory.name, "memory") == 0);
|
||||||
|
|
||||||
|
assert(memblock.reserved.regions);
|
||||||
|
assert(memblock.reserved.cnt == 1);
|
||||||
|
assert(memblock.memory.max == EXPECTED_MEMBLOCK_REGIONS);
|
||||||
|
assert(strcmp(memblock.reserved.name, "reserved") == 0);
|
||||||
|
|
||||||
|
assert(!memblock.bottom_up);
|
||||||
|
assert(memblock.current_limit == MEMBLOCK_ALLOC_ANYWHERE);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int memblock_basic_checks(void)
|
||||||
|
{
|
||||||
|
memblock_initialization_check();
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
10
tools/testing/memblock/tests/basic_api.h
Normal file
10
tools/testing/memblock/tests/basic_api.h
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
/* SPDX-License-Identifier: GPL-2.0-or-later */
|
||||||
|
#ifndef _MEMBLOCK_BASIC_H
|
||||||
|
#define _MEMBLOCK_BASIC_H
|
||||||
|
|
||||||
|
#include <assert.h>
|
||||||
|
#include "common.h"
|
||||||
|
|
||||||
|
int memblock_basic_checks(void);
|
||||||
|
|
||||||
|
#endif
|
||||||
27
tools/testing/memblock/tests/common.c
Normal file
27
tools/testing/memblock/tests/common.c
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
|
#include "tests/common.h"
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
#define INIT_MEMBLOCK_REGIONS 128
|
||||||
|
#define INIT_MEMBLOCK_RESERVED_REGIONS INIT_MEMBLOCK_REGIONS
|
||||||
|
|
||||||
|
void reset_memblock(void)
|
||||||
|
{
|
||||||
|
memset(memblock.memory.regions, 0,
|
||||||
|
memblock.memory.cnt * sizeof(struct memblock_region));
|
||||||
|
memset(memblock.reserved.regions, 0,
|
||||||
|
memblock.reserved.cnt * sizeof(struct memblock_region));
|
||||||
|
|
||||||
|
memblock.memory.cnt = 1;
|
||||||
|
memblock.memory.max = INIT_MEMBLOCK_REGIONS;
|
||||||
|
memblock.memory.name = "memory";
|
||||||
|
memblock.memory.total_size = 0;
|
||||||
|
|
||||||
|
memblock.reserved.cnt = 1;
|
||||||
|
memblock.reserved.max = INIT_MEMBLOCK_RESERVED_REGIONS;
|
||||||
|
memblock.reserved.name = "reserved";
|
||||||
|
memblock.reserved.total_size = 0;
|
||||||
|
|
||||||
|
memblock.bottom_up = false;
|
||||||
|
memblock.current_limit = MEMBLOCK_ALLOC_ANYWHERE;
|
||||||
|
}
|
||||||
15
tools/testing/memblock/tests/common.h
Normal file
15
tools/testing/memblock/tests/common.h
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
/* SPDX-License-Identifier: GPL-2.0-or-later */
|
||||||
|
#ifndef _MEMBLOCK_TEST_H
|
||||||
|
#define _MEMBLOCK_TEST_H
|
||||||
|
|
||||||
|
#include <linux/types.h>
|
||||||
|
#include <linux/memblock.h>
|
||||||
|
|
||||||
|
struct region {
|
||||||
|
phys_addr_t base;
|
||||||
|
phys_addr_t size;
|
||||||
|
};
|
||||||
|
|
||||||
|
void reset_memblock(void);
|
||||||
|
|
||||||
|
#endif
|
||||||
Reference in New Issue
Block a user