xref: /linux/tools/testing/selftests/mm/thp_settings.h (revision 4b660dbd9ee2059850fd30e0df420ca7a38a1856)
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_ALWAYS,
26 	SHMEM_WITHIN_SIZE,
27 	SHMEM_ADVISE,
28 	SHMEM_NEVER,
29 	SHMEM_DENY,
30 	SHMEM_FORCE,
31 };
32 
33 #define NR_ORDERS 20
34 
35 struct hugepages_settings {
36 	enum thp_enabled enabled;
37 };
38 
39 struct khugepaged_settings {
40 	bool defrag;
41 	unsigned int alloc_sleep_millisecs;
42 	unsigned int scan_sleep_millisecs;
43 	unsigned int max_ptes_none;
44 	unsigned int max_ptes_swap;
45 	unsigned int max_ptes_shared;
46 	unsigned long pages_to_scan;
47 };
48 
49 struct thp_settings {
50 	enum thp_enabled thp_enabled;
51 	enum thp_defrag thp_defrag;
52 	enum shmem_enabled shmem_enabled;
53 	bool use_zero_page;
54 	struct khugepaged_settings khugepaged;
55 	unsigned long read_ahead_kb;
56 	struct hugepages_settings hugepages[NR_ORDERS];
57 };
58 
59 int read_file(const char *path, char *buf, size_t buflen);
60 int write_file(const char *path, const char *buf, size_t buflen);
61 const unsigned long read_num(const char *path);
62 void write_num(const char *path, unsigned long num);
63 
64 int thp_read_string(const char *name, const char * const strings[]);
65 void thp_write_string(const char *name, const char *val);
66 const unsigned long thp_read_num(const char *name);
67 void thp_write_num(const char *name, unsigned long num);
68 
69 void thp_write_settings(struct thp_settings *settings);
70 void thp_read_settings(struct thp_settings *settings);
71 struct thp_settings *thp_current_settings(void);
72 void thp_push_settings(struct thp_settings *settings);
73 void thp_pop_settings(void);
74 void thp_restore_settings(void);
75 void thp_save_settings(void);
76 
77 void thp_set_read_ahead_path(char *path);
78 unsigned long thp_supported_orders(void);
79 
80 #endif /* __THP_SETTINGS_H__ */
81