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
9enum thp_enabled {
10	THP_NEVER,
11	THP_ALWAYS,
12	THP_INHERIT,
13	THP_MADVISE,
14};
15
16enum 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
24enum 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
35struct hugepages_settings {
36	enum thp_enabled enabled;
37};
38
39struct 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
49struct 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
59int read_file(const char *path, char *buf, size_t buflen);
60int write_file(const char *path, const char *buf, size_t buflen);
61const unsigned long read_num(const char *path);
62void write_num(const char *path, unsigned long num);
63
64int thp_read_string(const char *name, const char * const strings[]);
65void thp_write_string(const char *name, const char *val);
66const unsigned long thp_read_num(const char *name);
67void thp_write_num(const char *name, unsigned long num);
68
69void thp_write_settings(struct thp_settings *settings);
70void thp_read_settings(struct thp_settings *settings);
71struct thp_settings *thp_current_settings(void);
72void thp_push_settings(struct thp_settings *settings);
73void thp_pop_settings(void);
74void thp_restore_settings(void);
75void thp_save_settings(void);
76
77void thp_set_read_ahead_path(char *path);
78unsigned long thp_supported_orders(void);
79
80#endif /* __THP_SETTINGS_H__ */
81