Commit f3252a22 authored by Karolina Drobnik's avatar Karolina Drobnik Committed by Mike Rapoport

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: default avatarKarolina Drobnik <karolinadrobnik@gmail.com>
Signed-off-by: default avatarMike Rapoport <rppt@kernel.org>
Link: https://lore.kernel.org/r/8c185aa7e0dd68c2c7e937c9a06c90ae413e240f.1643796665.git.karolinadrobnik@gmail.com
parent 16802e55
......@@ -6,7 +6,9 @@ CFLAGS += -I. -I../../include -Wall -O2 -fsanitize=address \
-fsanitize=undefined -D CONFIG_PHYS_ADDR_T_64BIT
LDFLAGS += -fsanitize=address -fsanitize=undefined
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
ifeq ($(BUILD), 32)
......
// SPDX-License-Identifier: GPL-2.0-or-later
#include "tests/basic_api.h"
int main(int argc, char **argv)
{
memblock_basic_checks();
return 0;
}
// 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;
}
/* 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
// 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;
}
/* 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
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment