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