A lot of commands simply will go horribly wrong if we do not have hugepage support in the kernel. Check for and error out if we do not have hugepage support. Note that we still allow usage checks and the like regardless.
Signed-off-by: Andy Whitcroft <[EMAIL PROTECTED]> --- hugeadm.c | 11 +++++++++++ hugeutils.c | 13 +++++++++++++ libhugetlbfs_privutils.h | 3 +++ 3 files changed, 27 insertions(+), 0 deletions(-) diff --git a/hugeadm.c b/hugeadm.c index 036d603..c642555 100644 --- a/hugeadm.c +++ b/hugeadm.c @@ -249,6 +249,7 @@ void page_sizes(int all) int main(int argc, char** argv) { int ops; + int has_hugepages = kernel_has_hugepages(); char opts[] = "+h"; int ret = 0, index = 0; @@ -283,6 +284,16 @@ int main(int argc, char** argv) print_usage(); exit(EXIT_SUCCESS); + default: + /* All other commands require hugepage support. */ + if (! has_hugepages) { + ERROR("kernel does not support huge pages\n"); + exit(EXIT_FAILURE); + } + } + + + switch (ret) { case LONG_POOL_LIST: pool_list(); break; diff --git a/hugeutils.c b/hugeutils.c index 36a91c0..a3a677d 100644 --- a/hugeutils.c +++ b/hugeutils.c @@ -539,6 +539,19 @@ int hpool_sizes(struct hpage_pool *pools, int pcnt) } /* + * If we have a default page size then we support hugepages. + */ +int kernel_has_hugepages(void) +{ + long default_size = file_read_ulong(MEMINFO, "Hugepagesize:"); + default_size = size_to_smaller_unit(default_size); + if (default_size < 0) + return 0; + + return 1; +} + +/* * If we can find the default page size, and if we can find an overcommit * control for it then the kernel must support overcommit. */ diff --git a/libhugetlbfs_privutils.h b/libhugetlbfs_privutils.h index e11583b..4e01aac 100644 --- a/libhugetlbfs_privutils.h +++ b/libhugetlbfs_privutils.h @@ -52,6 +52,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 kernel_has_hugepages __pu_kernel_has_hugepages +int kernel_has_hugepages(void); + #define kernel_has_overcommit __pu_kernel_has_overcommit int kernel_has_overcommit(void); -- 1.6.0.2.711.gf1ba4 ------------------------------------------------------------------------- This SF.Net email is sponsored by the Moblin Your Move Developer's challenge Build the coolest Linux based applications with Moblin SDK & win great prizes Grand prize is a trip for two to an Open Source event anywhere in the world http://moblin-contest.org/redirect.php?banner_id=100&url=/ _______________________________________________ Libhugetlbfs-devel mailing list Libhugetlbfs-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/libhugetlbfs-devel