1// SPDX-License-Identifier: GPL-2.0-or-later
2/*
3 * Copyright (c) Linux Test Project, 2011-2021
4 */
5#ifndef _MEM_H
6#define _MEM_H
7#include "config.h"
8#include "tst_test.h"
9#include "ksm_helper.h"
10#include "tst_memutils.h"
11
12#if defined(__powerpc__) || defined(__powerpc64__)
13#define MAXNODES		256
14#else
15#define MAXNODES		512
16#endif
17#define MB			(1UL<<20)
18#define KB			(1UL<<10)
19#define PATH_SYS_SYSTEM		"/sys/devices/system"
20#define PATH_SYSVM		"/proc/sys/vm/"
21#define PATH_MEMINFO		"/proc/meminfo"
22#define BITS_PER_LONG           (8 * sizeof(long))
23
24static inline void set_node(unsigned long *array, unsigned int node)
25{
26	array[node / BITS_PER_LONG] |= 1UL << (node % BITS_PER_LONG);
27}
28
29static inline void clean_node(unsigned long *array)
30{
31	unsigned int i;
32
33	for (i = 0; i < MAXNODES / BITS_PER_LONG; i++)
34		array[i] &= 0UL;
35}
36
37/* OOM */
38
39#define LENGTH			(3UL<<30)
40#define TESTMEM			(1UL<<30)
41#define NORMAL			1
42#define MLOCK			2
43#define KSM			3
44
45void oom(int testcase, int lite, int retcode, int allow_sigkill);
46void testoom(int mempolicy, int lite, int retcode, int allow_sigkill);
47
48/* KSM */
49
50void create_same_memory(int size, int num, int unit);
51void test_ksm_merge_across_nodes(unsigned long nr_pages);
52void ksm_group_check(int run, int pg_shared, int pg_sharing, int pg_volatile,
53                     int pg_unshared, int sleep_msecs, int pages_to_scan);
54
55/* THP */
56
57#define PATH_THP		"/sys/kernel/mm/transparent_hugepage/"
58#define PATH_KHPD		PATH_THP "khugepaged/"
59
60/* HUGETLB */
61
62#define PATH_HUGEPAGES		"/sys/kernel/mm/hugepages/"
63#define PATH_SHMMAX		"/proc/sys/kernel/shmmax"
64
65void check_hugepage(void);
66void write_memcg(void);
67
68/* cpuset/memcg - include/tst_cgroup.h */
69void write_cpusets(const struct tst_cg_group *cg, long nd);
70
71/* shared */
72unsigned int get_a_numa_node(void);
73int  path_exist(const char *path, ...);
74void set_sys_tune(char *sys_file, long tune, int check);
75long get_sys_tune(char *sys_file);
76
77void update_shm_size(size_t *shm_size);
78
79/* MMAP */
80int range_is_mapped(unsigned long low, unsigned long high);
81#endif
82