xref: /linux/tools/testing/selftests/mm/thp_settings.h (revision 3a39d672e7f48b8d6b91a09afa4b55352773b4b5)
1 /* SPDX-License-Identifier: GPL-2.0 */
2 #ifndef __THP_SETTINGS_H__
3 #define __THP_SETTINGS_H__
4 
5 #include <stdbool.h>
6 #include <stddef.h>
7 #include <stdint.h>
8 
9 enum thp_enabled {
10 	THP_NEVER,
11 	THP_ALWAYS,
12 	THP_INHERIT,
13 	THP_MADVISE,
14 };
15 
16 enum thp_defrag {
17 	THP_DEFRAG_ALWAYS,
18 	THP_DEFRAG_DEFER,
19 	THP_DEFRAG_DEFER_MADVISE,
20 	THP_DEFRAG_MADVISE,
21 	THP_DEFRAG_NEVER,
22 };
23 
24 enum shmem_enabled {
25 	SHMEM_NEVER,
26 	SHMEM_ALWAYS,
27 	SHMEM_WITHIN_SIZE,
28 	SHMEM_ADVISE,
29 	SHMEM_INHERIT,
30 	SHMEM_DENY,
31 	SHMEM_FORCE,
32 };
33 
34 #define NR_ORDERS 20
35 
36 struct hugepages_settings {
37 	enum thp_enabled enabled;
38 };
39 
40 struct khugepaged_settings {
41 	bool defrag;
42 	unsigned int alloc_sleep_millisecs;
43 	unsigned int scan_sleep_millisecs;
44 	unsigned int max_ptes_none;
45 	unsigned int max_ptes_swap;
46 	unsigned int max_ptes_shared;
47 	unsigned long pages_to_scan;
48 };
49 
50 struct shmem_hugepages_settings {
51 	enum shmem_enabled enabled;
52 };
53 
54 struct thp_settings {
55 	enum thp_enabled thp_enabled;
56 	enum thp_defrag thp_defrag;
57 	enum shmem_enabled shmem_enabled;
58 	bool use_zero_page;
59 	struct khugepaged_settings khugepaged;
60 	unsigned long read_ahead_kb;
61 	struct hugepages_settings hugepages[NR_ORDERS];
62 	struct shmem_hugepages_settings shmem_hugepages[NR_ORDERS];
63 };
64 
65 int read_file(const char *path, char *buf, size_t buflen);
66 int write_file(const char *path, const char *buf, size_t buflen);
67 const unsigned long read_num(const char *path);
68 void write_num(const char *path, unsigned long num);
69 
70 int thp_read_string(const char *name, const char * const strings[]);
71 void thp_write_string(const char *name, const char *val);
72 const unsigned long thp_read_num(const char *name);
73 void thp_write_num(const char *name, unsigned long num);
74 
75 void thp_write_settings(struct thp_settings *settings);
76 void thp_read_settings(struct thp_settings *settings);
77 struct thp_settings *thp_current_settings(void);
78 void thp_push_settings(struct thp_settings *settings);
79 void thp_pop_settings(void);
80 void thp_restore_settings(void);
81 void thp_save_settings(void);
82 
83 void thp_set_read_ahead_path(char *path);
84 unsigned long thp_supported_orders(void);
85 unsigned long thp_shmem_supported_orders(void);
86 
87 #endif /* __THP_SETTINGS_H__ */
88