1*49cdfc7eSAndroid Build Coastguard Worker // SPDX-License-Identifier: GPL-2.0-or-later 2*49cdfc7eSAndroid Build Coastguard Worker /* 3*49cdfc7eSAndroid Build Coastguard Worker * Copyright (c) 2019 Red Hat, Inc. 4*49cdfc7eSAndroid Build Coastguard Worker */ 5*49cdfc7eSAndroid Build Coastguard Worker 6*49cdfc7eSAndroid Build Coastguard Worker #ifndef TST_HUGEPAGE__ 7*49cdfc7eSAndroid Build Coastguard Worker #define TST_HUGEPAGE__ 8*49cdfc7eSAndroid Build Coastguard Worker 9*49cdfc7eSAndroid Build Coastguard Worker #define PATH_HUGEPAGES "/sys/kernel/mm/hugepages/" 10*49cdfc7eSAndroid Build Coastguard Worker #define PATH_NR_HPAGES "/proc/sys/vm/nr_hugepages" 11*49cdfc7eSAndroid Build Coastguard Worker #define PATH_OC_HPAGES "/proc/sys/vm/nr_overcommit_hugepages" 12*49cdfc7eSAndroid Build Coastguard Worker 13*49cdfc7eSAndroid Build Coastguard Worker #define MEMINFO_HPAGE_TOTAL "HugePages_Total:" 14*49cdfc7eSAndroid Build Coastguard Worker #define MEMINFO_HPAGE_FREE "HugePages_Free:" 15*49cdfc7eSAndroid Build Coastguard Worker #define MEMINFO_HPAGE_RSVD "HugePages_Rsvd:" 16*49cdfc7eSAndroid Build Coastguard Worker #define MEMINFO_HPAGE_SURP "HugePages_Surp:" 17*49cdfc7eSAndroid Build Coastguard Worker #define MEMINFO_HPAGE_SIZE "Hugepagesize:" 18*49cdfc7eSAndroid Build Coastguard Worker 19*49cdfc7eSAndroid Build Coastguard Worker extern char *nr_opt; /* -s num Set the number of the been allocated hugepages */ 20*49cdfc7eSAndroid Build Coastguard Worker extern char *Hopt; /* -H /.. Location of hugetlbfs, i.e. -H /var/hugetlbfs */ 21*49cdfc7eSAndroid Build Coastguard Worker 22*49cdfc7eSAndroid Build Coastguard Worker enum tst_hp_policy { 23*49cdfc7eSAndroid Build Coastguard Worker TST_REQUEST, 24*49cdfc7eSAndroid Build Coastguard Worker TST_NEEDS, 25*49cdfc7eSAndroid Build Coastguard Worker }; 26*49cdfc7eSAndroid Build Coastguard Worker 27*49cdfc7eSAndroid Build Coastguard Worker #define TST_NO_HUGEPAGES ((unsigned long)-1) 28*49cdfc7eSAndroid Build Coastguard Worker 29*49cdfc7eSAndroid Build Coastguard Worker struct tst_hugepage { 30*49cdfc7eSAndroid Build Coastguard Worker const unsigned long number; 31*49cdfc7eSAndroid Build Coastguard Worker enum tst_hp_policy policy; 32*49cdfc7eSAndroid Build Coastguard Worker }; 33*49cdfc7eSAndroid Build Coastguard Worker 34*49cdfc7eSAndroid Build Coastguard Worker /* 35*49cdfc7eSAndroid Build Coastguard Worker * Get the default hugepage size. Returns 0 if hugepages are not supported. 36*49cdfc7eSAndroid Build Coastguard Worker */ 37*49cdfc7eSAndroid Build Coastguard Worker size_t tst_get_hugepage_size(void); 38*49cdfc7eSAndroid Build Coastguard Worker 39*49cdfc7eSAndroid Build Coastguard Worker /* 40*49cdfc7eSAndroid Build Coastguard Worker * Try the best to request a specified number of huge pages from system, 41*49cdfc7eSAndroid Build Coastguard Worker * it will store the reserved hpage number in tst_hugepages. 42*49cdfc7eSAndroid Build Coastguard Worker * 43*49cdfc7eSAndroid Build Coastguard Worker * Note: this depend on the status of system memory fragmentation. 44*49cdfc7eSAndroid Build Coastguard Worker */ 45*49cdfc7eSAndroid Build Coastguard Worker unsigned long tst_reserve_hugepages(struct tst_hugepage *hp); 46*49cdfc7eSAndroid Build Coastguard Worker 47*49cdfc7eSAndroid Build Coastguard Worker /* 48*49cdfc7eSAndroid Build Coastguard Worker * This variable is used for recording the number of hugepages which system can 49*49cdfc7eSAndroid Build Coastguard Worker * provides. It will be equal to 'hpages' if tst_reserve_hugepages on success, 50*49cdfc7eSAndroid Build Coastguard Worker * otherwise set it to a number of hugepages that we were able to reserve. 51*49cdfc7eSAndroid Build Coastguard Worker * 52*49cdfc7eSAndroid Build Coastguard Worker * If system does not support hugetlb, then it will be set to 0. 53*49cdfc7eSAndroid Build Coastguard Worker */ 54*49cdfc7eSAndroid Build Coastguard Worker extern unsigned long tst_hugepages; 55*49cdfc7eSAndroid Build Coastguard Worker 56*49cdfc7eSAndroid Build Coastguard Worker #endif /* TST_HUGEPAGE_H */ 57