Other option would be to loop though the /sys/kernel/mm/hugepages directory and see which size are available (nr_hugepages > 0). I'd expect that /sys/kernel/mm/... content is better "standardized" than proc file content. Does all platforms (x86, arm, mips, power, ...) have the same content in proc/meminfo? Does every platform spell "Hugepagesize:" the same way, or is there small variation like "HugePageSize:"... -Petri
> -----Original Message----- > From: lng-odp [mailto:[email protected]] On Behalf Of Maxim > Uvarov > Sent: Tuesday, May 10, 2016 5:45 PM > To: [email protected] > Subject: [lng-odp] [PATCH] linux-generic: use default huge page size > > odp_shm_reserve() relays on huge page size to round up > requested size. If 1 Gb pages present than parser takes > it first as first alphabetical file name in sysfs. That > lead to issue where all allocations wants 1 GB HP. This > patch takes system default huge pages which are usually 2Mb, > and has to be enough for existence odp example apps and > validation tests. > > Reported-by: B.Nousilal <[email protected]> > Signed-off-by: Maxim Uvarov <[email protected]> > --- > platform/linux-generic/odp_system_info.c | 46 +++++++++++++-------------- > ----- > 1 file changed, 18 insertions(+), 28 deletions(-) > > diff --git a/platform/linux-generic/odp_system_info.c b/platform/linux- > generic/odp_system_info.c > index 0f1f3c7..14244c3 100644 > --- a/platform/linux-generic/odp_system_info.c > +++ b/platform/linux-generic/odp_system_info.c > @@ -24,12 +24,9 @@ > #include <sys/types.h> > #include <dirent.h> > > - > #define CACHE_LNSZ_FILE \ > "/sys/devices/system/cpu/cpu0/cache/index0/coherency_line_size" > > -#define HUGE_PAGE_DIR "/sys/kernel/mm/hugepages" > - > /* > * Report the number of logical CPUs detected at boot time > */ > @@ -77,37 +74,30 @@ static int systemcpu_cache_line_size(void) > #endif > > > -static int huge_page_size(void) > +static int default_huge_page_size(void) > { > - DIR *dir; > - struct dirent *dirent; > - int size = 0; > + char str[1024]; > + char *pos; > + uint64_t sz; > + FILE *file; > > - dir = opendir(HUGE_PAGE_DIR); > - if (dir == NULL) { > - ODP_ERR("%s not found\n", HUGE_PAGE_DIR); > - return 0; > - } > - > - while ((dirent = readdir(dir)) != NULL) { > - int temp = 0; > - > - if (sscanf(dirent->d_name, "hugepages-%i", &temp) != 1) > - continue; > - > - if (temp > size) > - size = temp; > - } > + file = fopen("/proc/meminfo", "rt"); > > - if (closedir(dir)) { > - ODP_ERR("closedir failed\n"); > - return 0; > + while (fgets(str, sizeof(str), file) != NULL) { > + pos = strstr(str, "Hugepagesize:"); > + if (pos) { > + *(pos - 1) = '\0'; > + if (sscanf(pos, "@ %ld kB", &sz) == 1) { > + fclose(file); > + return sz * 1024; > + } > + } > } > > - return size * 1024; > + fclose(file); > + return 0; > } > > - > /* > * Analysis of /sys/devices/system/cpu/ files > */ > @@ -137,7 +127,7 @@ static int systemcpu(odp_system_info_t *sysinfo) > return -1; > } > > - sysinfo->huge_page_size = huge_page_size(); > + sysinfo->huge_page_size = default_huge_page_size(); > > return 0; > } > -- > 2.7.1.250.gff4ea60 > > _______________________________________________ > lng-odp mailing list > [email protected] > https://lists.linaro.org/mailman/listinfo/lng-odp _______________________________________________ lng-odp mailing list [email protected] https://lists.linaro.org/mailman/listinfo/lng-odp
