diff --git a/hugeutils.c b/hugeutils.c index fc64946..e573622 100644 --- a/hugeutils.c +++ b/hugeutils.c @@ -800,6 +800,27 @@ int hpool_sizes(struct hpage_pool *pools, int pcnt) return (which < pcnt) ? which : -1; } +int arch_has_slice_support(void) +{ +#ifdef __powerpc64__ + char mmu_type[16]; + FILE *fp; + + fp = popen("cat /proc/cpuinfo | grep MMU | awk '{ print $3}'", "r"); + if (!fp || fscanf(fp, "%s", mmu_type) < 0) { + ERROR("Failed to determine MMU type\n"); + abort(); + } + + pclose(fp); + return strcmp(mmu_type, "Hash") == 0; +#elif defined(__powerpc__) && !defined(PPC_NO_SEGMENTS) + return 1; +#else + return 0; +#endif +} + /* * If we have a default page size then we support hugepages. */ diff --git a/libhugetlbfs_privutils.h b/libhugetlbfs_privutils.h index 149e42f..8b12fed 100644 --- a/libhugetlbfs_privutils.h +++ b/libhugetlbfs_privutils.h @@ -53,6 +53,9 @@ int set_nr_hugepages(long pagesize, unsigned long val); #define set_nr_overcommit_hugepages __pu_set_nr_overcommit_hugepages int set_nr_overcommit_hugepages(long pagesize, unsigned long val); +#define arch_has_slice_support __pu_arch_has_slice_support +int arch_has_slice_support(void); + #define kernel_has_hugepages __pu_kernel_has_hugepages int kernel_has_hugepages(void);