/* SPDX-License-Identifier: GPL-2.0 */ #ifndef __THP_SETTINGS_H__ #define __THP_SETTINGS_H__ #include #include #include enum thp_enabled { THP_NEVER, THP_ALWAYS, THP_INHERIT, THP_MADVISE, }; enum thp_defrag { THP_DEFRAG_ALWAYS, THP_DEFRAG_DEFER, THP_DEFRAG_DEFER_MADVISE, THP_DEFRAG_MADVISE, THP_DEFRAG_NEVER, }; enum shmem_enabled { SHMEM_ALWAYS, SHMEM_WITHIN_SIZE, SHMEM_ADVISE, SHMEM_NEVER, SHMEM_DENY, SHMEM_FORCE, }; #define NR_ORDERS 20 struct hugepages_settings { enum thp_enabled enabled; }; struct khugepaged_settings { bool defrag; unsigned int alloc_sleep_millisecs; unsigned int scan_sleep_millisecs; unsigned int max_ptes_none; unsigned int max_ptes_swap; unsigned int max_ptes_shared; unsigned long pages_to_scan; }; struct thp_settings { enum thp_enabled thp_enabled; enum thp_defrag thp_defrag; enum shmem_enabled shmem_enabled; bool use_zero_page; struct khugepaged_settings khugepaged; unsigned long read_ahead_kb; struct hugepages_settings hugepages[NR_ORDERS]; }; int read_file(const char *path, char *buf, size_t buflen); int write_file(const char *path, const char *buf, size_t buflen); const unsigned long read_num(const char *path); void write_num(const char *path, unsigned long num); int thp_read_string(const char *name, const char * const strings[]); void thp_write_string(const char *name, const char *val); const unsigned long thp_read_num(const char *name); void thp_write_num(const char *name, unsigned long num); void thp_write_settings(struct thp_settings *settings); void thp_read_settings(struct thp_settings *settings); struct thp_settings *thp_current_settings(void); void thp_push_settings(struct thp_settings *settings); void thp_pop_settings(void); void thp_restore_settings(void); void thp_save_settings(void); void thp_set_read_ahead_path(char *path); unsigned long thp_supported_orders(void); #endif /* __THP_SETTINGS_H__ */