Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 8185850a authored by Jiri Olsa's avatar Jiri Olsa Committed by Arnaldo Carvalho de Melo
Browse files

perf tests: Add mem2node object test



Adding mem2node object automated test.

The test prepares few artificial nodes - memory maps and verifies the
mem2node object returns proper node values to given addresses.

Signed-off-by: default avatarJiri Olsa <jolsa@kernel.org>
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Cc: David Ahern <dsahern@gmail.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Link: http://lkml.kernel.org/r/20180309101442.9224-4-jolsa@kernel.org


Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
parent 4acf6142
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -48,6 +48,7 @@ perf-y += bitmap.o
perf-y += perf-hooks.o
perf-y += clang.o
perf-y += unit_number__scnprintf.o
perf-y += mem2node.o

$(OUTPUT)tests/llvm-src-base.c: tests/bpf-script-example.c tests/Build
	$(call rule_mkdir)
+4 −0
Original line number Diff line number Diff line
@@ -274,6 +274,10 @@ static struct test generic_tests[] = {
		.desc = "unit_number__scnprintf",
		.func = test__unit_number__scnprint,
	},
	{
		.desc = "mem2node",
		.func = test__mem2node,
	},
	{
		.func = NULL,
	},
+75 −0
Original line number Diff line number Diff line
#include <linux/compiler.h>
#include <linux/bitmap.h>
#include "cpumap.h"
#include "mem2node.h"
#include "tests.h"

static struct node {
	int		 node;
	const char 	*map;
} test_nodes[] = {
	{ .node = 0, .map = "0"     },
	{ .node = 1, .map = "1-2"   },
	{ .node = 3, .map = "5-7,9" },
};

#define T TEST_ASSERT_VAL

static unsigned long *get_bitmap(const char *str, int nbits)
{
	struct cpu_map *map = cpu_map__new(str);
	unsigned long *bm = NULL;
	int i;

	bm = bitmap_alloc(nbits);

	if (map && bm) {
		bitmap_zero(bm, nbits);

		for (i = 0; i < map->nr; i++) {
			set_bit(map->map[i], bm);
		}
	}

	if (map)
		cpu_map__put(map);
	else
		free(bm);

	return bm && map ? bm : NULL;
}

int test__mem2node(struct test *t __maybe_unused, int subtest __maybe_unused)
{
	struct mem2node map;
	struct memory_node nodes[3];
	struct perf_env env = {
		.memory_nodes    = (struct memory_node *) &nodes[0],
		.nr_memory_nodes = ARRAY_SIZE(nodes),
		.memory_bsize    = 0x100,
	};
	unsigned int i;

	for (i = 0; i < ARRAY_SIZE(nodes); i++) {
		nodes[i].node = test_nodes[i].node;
		nodes[i].size = 10;

		T("failed: alloc bitmap",
		  (nodes[i].set = get_bitmap(test_nodes[i].map, 10)));
	}

	T("failed: mem2node__init", !mem2node__init(&map, &env));
	T("failed: mem2node__node",  0 == mem2node__node(&map,   0x50));
	T("failed: mem2node__node",  1 == mem2node__node(&map,  0x100));
	T("failed: mem2node__node",  1 == mem2node__node(&map,  0x250));
	T("failed: mem2node__node",  3 == mem2node__node(&map,  0x500));
	T("failed: mem2node__node",  3 == mem2node__node(&map,  0x650));
	T("failed: mem2node__node", -1 == mem2node__node(&map,  0x450));
	T("failed: mem2node__node", -1 == mem2node__node(&map, 0x1050));

	for (i = 0; i < ARRAY_SIZE(nodes); i++)
		free(nodes[i].set);

	mem2node__exit(&map);
	return 0;
}
+1 −0
Original line number Diff line number Diff line
@@ -103,6 +103,7 @@ int test__clang(struct test *test, int subtest);
const char *test__clang_subtest_get_desc(int subtest);
int test__clang_subtest_get_nr(void);
int test__unit_number__scnprint(struct test *test, int subtest);
int test__mem2node(struct test *t, int subtest);

bool test__bp_signal_is_supported(void);