This patch moves the check of the return value from gethugepagesize() to a 
common function, check_hugepagesize(),
rather then repeating it in each test.  gethugepagesize() is updated to set 
errno depending on the reason for the failure.

Changes since v3
        -incorporated Mel Gorman's function that uses dlopen so that tests 
don't have to be linked against libhugetlbfs
        -used suggestions from Nishanth Aravamudan to use a static inline 
function and rename to check_hugepagesize()
        -added check_hugepagesize() call to linkhuge and linkshare tests

---

 hugeutils.c                         |    6 ++++-
 tests/alloc-instantiate-race.c      |    4 ---
 tests/brk_near_huge.c               |    4 ---
 tests/chunk-overcommit.c            |    4 ---
 tests/counters.c                    |    4 ---
 tests/direct.c                      |    4 ---
 tests/empty_mounts.c                |    5 ----
 tests/heap-overflow.c               |    4 ---
 tests/huge_at_4GB_normal_below.c    |    4 ---
 tests/huge_below_4GB_normal_above.c |    4 ---
 tests/hugetests.h                   |   17 +++++++++++++++
 tests/icache-hygiene.c              |    4 ---
 tests/linkhuge.c                    |    1 
 tests/linkshare.c                   |    1 
 tests/map_high_truncate_2.c         |    4 ---
 tests/misalign.c                    |    4 ---
 tests/misaligned_offset.c           |    4 ---
 tests/mlock.c                       |    4 ---
 tests/mmap-cow.c                    |    2 -
 tests/mmap-gettest.c                |    2 -
 tests/mprotect.c                    |    4 ---
 tests/private.c                     |    4 ---
 tests/ptrace-write-hugepage.c       |    4 ---
 tests/quota.c                       |    4 ---
 tests/readback.c                    |    4 ---
 tests/shared.c                      |    4 ---
 tests/shm-fork.c                    |    2 -
 tests/shm-getraw.c                  |    2 -
 tests/slbpacaflush.c                |    4 ---
 tests/straddle_4GB.c                |    4 ---
 tests/task-size-overrun.c           |    4 ---
 tests/testutils.c                   |   39 ++++++++++++++++++++++++++++++++++++
 tests/truncate.c                    |    4 ---
 tests/truncate_above_4GB.c          |    4 ---
 tests/truncate_reserve_wraparound.c |    4 ---
 tests/truncate_sigbus_versus_oom.c  |    4 ---
 tests/unlinked_fd.c                 |    4 ---
 37 files changed, 94 insertions(+), 91 deletions(-)

diff -ur libhugetlbfs-dev-20080319.orig/hugeutils.c 
libhugetlbfs-dev-20080319/hugeutils.c
--- libhugetlbfs-dev-20080319.orig/hugeutils.c  2008-03-19 10:25:28.000000000 
-0500
+++ libhugetlbfs-dev-20080319/hugeutils.c       2008-04-03 11:40:13.630958744 
-0500
@@ -112,14 +112,18 @@
 
        if (hpage_size)
                return hpage_size;
+       errno = 0;
 
        hpage_kb = read_meminfo("Hugepagesize:");
        if (hpage_kb < 0) {
                hpage_size = -1;
+               errno = ENOSYS;
        } else {
-               if (hpage_kb > max_hpage_kb)
+               if (hpage_kb > max_hpage_kb) {
                        /* would overflow if converted to bytes */
                        hpage_size = -1;
+                       errno = EOVERFLOW;
+               }
                else
                        /* convert from kb to bytes */
                        hpage_size = 1024 * hpage_kb;
diff -ur libhugetlbfs-dev-20080319.orig/tests/alloc-instantiate-race.c 
libhugetlbfs-dev-20080319/tests/alloc-instantiate-race.c
--- libhugetlbfs-dev-20080319.orig/tests/alloc-instantiate-race.c       
2008-03-19 10:25:28.000000000 -0500
+++ libhugetlbfs-dev-20080319/tests/alloc-instantiate-race.c    2008-04-09 
15:02:57.131126304 -0500
@@ -243,9 +243,7 @@
                CONFIG("Usage: alloc-instantiate-race <private|shared>");
        }
 
-       hpage_size = gethugepagesize();
-       if (hpage_size < 0)
-               CONFIG("No hugepage kernel support");
+       hpage_size = check_hugepagesize();
 
        fd = hugetlbfs_unlinked_fd();
        if (fd < 0)
diff -ur libhugetlbfs-dev-20080319.orig/tests/brk_near_huge.c 
libhugetlbfs-dev-20080319/tests/brk_near_huge.c
--- libhugetlbfs-dev-20080319.orig/tests/brk_near_huge.c        2008-03-19 
10:25:28.000000000 -0500
+++ libhugetlbfs-dev-20080319/tests/brk_near_huge.c     2008-04-09 
15:00:55.892053320 -0500
@@ -74,9 +74,7 @@
 
        test_init(argc, argv);
 
-       hpage_size = gethugepagesize();
-       if (hpage_size < 0)
-               CONFIG("No hugepage kernel support");
+       hpage_size = check_hugepagesize();
 
        fd = hugetlbfs_unlinked_fd();
        if (fd < 0)
diff -ur libhugetlbfs-dev-20080319.orig/tests/chunk-overcommit.c 
libhugetlbfs-dev-20080319/tests/chunk-overcommit.c
--- libhugetlbfs-dev-20080319.orig/tests/chunk-overcommit.c     2008-03-19 
10:25:28.000000000 -0500
+++ libhugetlbfs-dev-20080319/tests/chunk-overcommit.c  2008-04-09 
14:58:24.133094640 -0500
@@ -61,9 +61,7 @@
 
        totpages = read_meminfo("HugePages_Free:");
 
-       hpage_size = gethugepagesize();
-       if (hpage_size < 0)
-               CONFIG("No hugepage kernel support");
+       hpage_size = check_hugepagesize();
 
        fd = hugetlbfs_unlinked_fd();
        if (fd < 0)
diff -ur libhugetlbfs-dev-20080319.orig/tests/counters.c 
libhugetlbfs-dev-20080319/tests/counters.c
--- libhugetlbfs-dev-20080319.orig/tests/counters.c     2008-03-19 
10:25:28.000000000 -0500
+++ libhugetlbfs-dev-20080319/tests/counters.c  2008-04-09 15:00:23.748151472 
-0500
@@ -380,9 +380,7 @@
        test_init(argc, argv);
        saved_nr_hugepages = read_meminfo("HugePages_Total:");
        verify_dynamic_pool_support();
-       hpage_size = gethugepagesize();
-       if (hpage_size < 0)
-               CONFIG("No hugepage kernel support");
+       hpage_size = check_hugepagesize();
 
        /*
         * This test case should require a maximum of 3 huge pages.
diff -ur libhugetlbfs-dev-20080319.orig/tests/direct.c 
libhugetlbfs-dev-20080319/tests/direct.c
--- libhugetlbfs-dev-20080319.orig/tests/direct.c       2008-03-19 
10:25:28.000000000 -0500
+++ libhugetlbfs-dev-20080319/tests/direct.c    2008-04-09 15:01:09.134038752 
-0500
@@ -45,9 +45,7 @@
 
        test_init(argc, argv);
 
-       hpage_size = gethugepagesize();
-       if (hpage_size < 0)
-               CONFIG("No hugepage kernel support");
+       hpage_size = check_hugepagesize();
 
        fd = hugetlbfs_unlinked_fd();
        if (fd < 0)
diff -ur libhugetlbfs-dev-20080319.orig/tests/empty_mounts.c 
libhugetlbfs-dev-20080319/tests/empty_mounts.c
--- libhugetlbfs-dev-20080319.orig/tests/empty_mounts.c 2008-03-19 
10:25:28.000000000 -0500
+++ libhugetlbfs-dev-20080319/tests/empty_mounts.c      2008-04-03 
09:41:49.914014480 -0500
@@ -57,15 +57,10 @@
 
 int main(int argc, char *argv[])
 {
-       long hpage_size;
        int fd;
 
        test_init(argc, argv);
 
-       hpage_size = gethugepagesize();
-       if (hpage_size < 0)
-               CONFIG("No hugepage kernel support");
-
        fd = hugetlbfs_unlinked_fd();
        if (fd < 0)
                PASS();
diff -ur libhugetlbfs-dev-20080319.orig/tests/heap-overflow.c 
libhugetlbfs-dev-20080319/tests/heap-overflow.c
--- libhugetlbfs-dev-20080319.orig/tests/heap-overflow.c        2008-03-19 
10:25:28.000000000 -0500
+++ libhugetlbfs-dev-20080319/tests/heap-overflow.c     2008-04-09 
14:59:37.859067344 -0500
@@ -39,9 +39,7 @@
        if (!getenv("HUGETLB_MORECORE"))
                CONFIG("Must have HUGETLB_MORECORE=yes");
 
-       hpagesize = gethugepagesize();
-       if (hpagesize < 0)
-               CONFIG("No hugepage support in kernel");
+       hpagesize = check_hugepagesize();
 
        freepages = read_meminfo("HugePages_Free:");
        if (freepages < 3)
diff -ur libhugetlbfs-dev-20080319.orig/tests/huge_at_4GB_normal_below.c 
libhugetlbfs-dev-20080319/tests/huge_at_4GB_normal_below.c
--- libhugetlbfs-dev-20080319.orig/tests/huge_at_4GB_normal_below.c     
2008-03-19 10:25:28.000000000 -0500
+++ libhugetlbfs-dev-20080319/tests/huge_at_4GB_normal_below.c  2008-04-09 
15:03:25.593055816 -0500
@@ -52,9 +52,7 @@
 
        page_size = getpagesize();
 
-       hpage_size = gethugepagesize();
-       if (hpage_size < 0)
-               CONFIG("No hugepage kernel support");
+       hpage_size = check_hugepagesize();
 
        if (sizeof(void *) <= 4)
                IRRELEVANT();
diff -ur libhugetlbfs-dev-20080319.orig/tests/huge_below_4GB_normal_above.c 
libhugetlbfs-dev-20080319/tests/huge_below_4GB_normal_above.c
--- libhugetlbfs-dev-20080319.orig/tests/huge_below_4GB_normal_above.c  
2008-03-19 10:25:28.000000000 -0500
+++ libhugetlbfs-dev-20080319/tests/huge_below_4GB_normal_above.c       
2008-04-09 14:58:34.826066672 -0500
@@ -52,9 +52,7 @@
 
        page_size = getpagesize();
 
-       hpage_size = gethugepagesize();
-       if (hpage_size < 0)
-               CONFIG("No hugepage kernel support");
+       hpage_size = check_hugepagesize();
 
        if (sizeof(void *) <= 4)
                IRRELEVANT();
diff -ur libhugetlbfs-dev-20080319.orig/tests/hugetests.h 
libhugetlbfs-dev-20080319/tests/hugetests.h
--- libhugetlbfs-dev-20080319.orig/tests/hugetests.h    2008-03-19 
10:25:28.000000000 -0500
+++ libhugetlbfs-dev-20080319/tests/hugetests.h 2008-04-09 14:55:54.000162480 
-0500
@@ -20,6 +20,8 @@
 #ifndef _HUGETESTS_H
 #define _HUGETESTS_H
 
+#include <errno.h>
+#include <string.h>
 #define DEBUG
 
 /* Test return codes */
@@ -32,6 +34,7 @@
 
 extern int verbose_test;
 extern char *test_name;
+long call_gethugepagesize(void);
 void check_free_huge_pages(int nr_pages_needed);
 void test_init(int argc, char *argv[]);
 int test_addr_huge(void *p);
@@ -107,4 +110,18 @@
 /* stressutils.c stuff */
 int remove_shmid(int shmid);
 
+static inline long check_hugepagesize()
+{
+       long hpage_size = call_gethugepagesize();
+       if (hpage_size < 0) {
+               if (errno == ENOSYS)
+                       CONFIG("No hugepage kernel support\n");
+               else if (errno == EOVERFLOW)
+                       CONFIG("Hugepage size too large");
+               else
+                       CONFIG("Hugepage size (%s)", strerror(errno));
+       }
+       return hpage_size;
+}
+
 #endif /* _HUGETESTS_H */
diff -ur libhugetlbfs-dev-20080319.orig/tests/icache-hygiene.c 
libhugetlbfs-dev-20080319/tests/icache-hygiene.c
--- libhugetlbfs-dev-20080319.orig/tests/icache-hygiene.c       2008-03-19 
10:25:28.000000000 -0500
+++ libhugetlbfs-dev-20080319/tests/icache-hygiene.c    2008-04-09 
15:01:57.726105784 -0500
@@ -188,9 +188,7 @@
                .sa_flags = SA_SIGINFO,
        };
 
-       hpage_size = gethugepagesize();
-       if (hpage_size < 0)
-               CONFIG("No hugepage kernel support");
+       hpage_size = check_hugepagesize();
 
        err = sigaction(SIGILL, &sa, NULL);
        if (err)
diff -ur libhugetlbfs-dev-20080319.orig/tests/linkhuge.c 
libhugetlbfs-dev-20080319/tests/linkhuge.c
--- libhugetlbfs-dev-20080319.orig/tests/linkhuge.c     2008-03-19 
10:25:28.000000000 -0500
+++ libhugetlbfs-dev-20080319/tests/linkhuge.c  2008-04-09 15:05:34.076091800 
-0500
@@ -132,6 +132,7 @@
        int elfmap_inhibited;
 
        test_init(argc, argv);
+       check_hugepagesize();
 
        get_link_string(argv[0]);
 
diff -ur libhugetlbfs-dev-20080319.orig/tests/linkshare.c 
libhugetlbfs-dev-20080319/tests/linkshare.c
--- libhugetlbfs-dev-20080319.orig/tests/linkshare.c    2008-03-19 
10:25:28.000000000 -0500
+++ libhugetlbfs-dev-20080319/tests/linkshare.c 2008-04-09 15:06:58.926096744 
-0500
@@ -289,6 +289,7 @@
 int main(int argc, char *argv[], char *envp[])
 {
        test_init(argc, argv);
+       check_hugepagesize();
 
        if (argc == 1) {
                /*
diff -ur libhugetlbfs-dev-20080319.orig/tests/map_high_truncate_2.c 
libhugetlbfs-dev-20080319/tests/map_high_truncate_2.c
--- libhugetlbfs-dev-20080319.orig/tests/map_high_truncate_2.c  2008-03-19 
10:25:28.000000000 -0500
+++ libhugetlbfs-dev-20080319/tests/map_high_truncate_2.c       2008-04-09 
15:02:49.771043264 -0500
@@ -63,9 +63,7 @@
 
        test_init(argc, argv);
 
-       hpage_size = gethugepagesize();
-       if (hpage_size < 0)
-               CONFIG("No hugepage kernel support");
+       hpage_size = check_hugepagesize();
 
        check_free_huge_pages(4);
 
diff -ur libhugetlbfs-dev-20080319.orig/tests/misalign.c 
libhugetlbfs-dev-20080319/tests/misalign.c
--- libhugetlbfs-dev-20080319.orig/tests/misalign.c     2008-03-19 
10:25:28.000000000 -0500
+++ libhugetlbfs-dev-20080319/tests/misalign.c  2008-04-09 14:57:57.377039664 
-0500
@@ -51,9 +51,7 @@
        test_init(argc, argv);
 
        page_size = getpagesize();
-       hpage_size = gethugepagesize();
-       if (hpage_size < 0)
-               CONFIG("No hugepage kernel support");
+       hpage_size = check_hugepagesize();
 
        fd = hugetlbfs_unlinked_fd();
        if (fd < 0)
diff -ur libhugetlbfs-dev-20080319.orig/tests/misaligned_offset.c 
libhugetlbfs-dev-20080319/tests/misaligned_offset.c
--- libhugetlbfs-dev-20080319.orig/tests/misaligned_offset.c    2008-03-19 
10:25:28.000000000 -0500
+++ libhugetlbfs-dev-20080319/tests/misaligned_offset.c 2008-04-09 
14:58:55.055056992 -0500
@@ -76,9 +76,7 @@
        test_init(argc, argv);
 
        page_size = getpagesize();
-       hpage_size = gethugepagesize();
-       if (hpage_size < 0)
-               CONFIG("No hugepage kernel support");
+       hpage_size = check_hugepagesize();
 
        fd = hugetlbfs_unlinked_fd();
        if (fd < 0)
diff -ur libhugetlbfs-dev-20080319.orig/tests/mlock.c 
libhugetlbfs-dev-20080319/tests/mlock.c
--- libhugetlbfs-dev-20080319.orig/tests/mlock.c        2008-03-19 
10:25:28.000000000 -0500
+++ libhugetlbfs-dev-20080319/tests/mlock.c     2008-04-09 15:02:36.256101328 
-0500
@@ -34,9 +34,7 @@
        int fd = hugetlbfs_unlinked_fd();
        void *p;
        int ret;
-       long hpage_size = gethugepagesize();
-       if (hpage_size < 0)
-               CONFIG("No hugepage kernel support");
+       long hpage_size = check_hugepagesize();
 
        p = mmap(0, hpage_size, PROT_READ|PROT_WRITE, flags, fd, 0);
        if (p == MAP_FAILED)
diff -ur libhugetlbfs-dev-20080319.orig/tests/mmap-cow.c 
libhugetlbfs-dev-20080319/tests/mmap-cow.c
--- libhugetlbfs-dev-20080319.orig/tests/mmap-cow.c     2008-03-19 
10:25:28.000000000 -0500
+++ libhugetlbfs-dev-20080319/tests/mmap-cow.c  2008-04-09 14:59:04.758045352 
-0500
@@ -128,7 +128,7 @@
        if (wait_list == NULL)
                CONFIG("Couldn't allocate memory for wait_list\n");
 
-       hpage_size = gethugepagesize();
+       hpage_size = check_hugepagesize();
        /* Have to have enough available hugepages for each thread to
         * get its own copy, plus one for the parent/page-cache */
        size = (nr_hugepages / (threads+1)) * hpage_size;
diff -ur libhugetlbfs-dev-20080319.orig/tests/mmap-gettest.c 
libhugetlbfs-dev-20080319/tests/mmap-gettest.c
--- libhugetlbfs-dev-20080319.orig/tests/mmap-gettest.c 2008-03-19 
10:25:28.000000000 -0500
+++ libhugetlbfs-dev-20080319/tests/mmap-gettest.c      2008-04-09 
15:02:11.423153056 -0500
@@ -115,7 +115,7 @@
        iter = atoi(argv[1]);
        nr_hugepages = atoi(argv[2]);
 
-       hpage_size = gethugepagesize();
+       hpage_size = check_hugepagesize();
        size = nr_hugepages * hpage_size;
 
        for (i=0; i < iter; i++) {
diff -ur libhugetlbfs-dev-20080319.orig/tests/mprotect.c 
libhugetlbfs-dev-20080319/tests/mprotect.c
--- libhugetlbfs-dev-20080319.orig/tests/mprotect.c     2008-03-19 
10:25:28.000000000 -0500
+++ libhugetlbfs-dev-20080319/tests/mprotect.c  2008-04-09 15:02:42.240126216 
-0500
@@ -187,9 +187,7 @@
        if (err)
                FAIL("Can't install SIGSEGV handler");
 
-       hpage_size = gethugepagesize();
-       if (hpage_size < 0)
-               CONFIG("No hugepage kernel support");
+       hpage_size = check_hugepagesize();
 
        fd = hugetlbfs_unlinked_fd();
        if (fd < 0)
diff -ur libhugetlbfs-dev-20080319.orig/tests/private.c 
libhugetlbfs-dev-20080319/tests/private.c
--- libhugetlbfs-dev-20080319.orig/tests/private.c      2008-03-19 
10:25:28.000000000 -0500
+++ libhugetlbfs-dev-20080319/tests/private.c   2008-04-09 15:00:30.782141760 
-0500
@@ -40,9 +40,7 @@
 
        test_init(argc, argv);
 
-       hpage_size = gethugepagesize();
-       if (hpage_size < 0)
-               CONFIG("No hugepage kernel support");
+       hpage_size = check_hugepagesize();
 
        fd = hugetlbfs_unlinked_fd();
        if (fd < 0)
diff -ur libhugetlbfs-dev-20080319.orig/tests/ptrace-write-hugepage.c 
libhugetlbfs-dev-20080319/tests/ptrace-write-hugepage.c
--- libhugetlbfs-dev-20080319.orig/tests/ptrace-write-hugepage.c        
2008-03-19 10:25:28.000000000 -0500
+++ libhugetlbfs-dev-20080319/tests/ptrace-write-hugepage.c     2008-04-09 
15:02:24.002100568 -0500
@@ -107,9 +107,7 @@
 
        test_init(argc, argv);
 
-       hpage_size = gethugepagesize();
-       if (hpage_size < 0)
-               CONFIG("No hugepage kernel support");
+       hpage_size = check_hugepagesize();
 
        fd = hugetlbfs_unlinked_fd();
        if (fd < 0)
diff -ur libhugetlbfs-dev-20080319.orig/tests/quota.c 
libhugetlbfs-dev-20080319/tests/quota.c
--- libhugetlbfs-dev-20080319.orig/tests/quota.c        2008-03-19 
10:25:28.000000000 -0500
+++ libhugetlbfs-dev-20080319/tests/quota.c     2008-04-09 15:01:15.462141808 
-0500
@@ -185,9 +185,7 @@
 {
        test_init(argc, argv);
        mountpoint[0] = '\0';
-       hpage_size = gethugepagesize();
-       if (hpage_size < 0)
-               CONFIG("No hugepage kernel support");
+       hpage_size = check_hugepagesize();
 
        get_quota_fs(hpage_size);
 
diff -ur libhugetlbfs-dev-20080319.orig/tests/readback.c 
libhugetlbfs-dev-20080319/tests/readback.c
--- libhugetlbfs-dev-20080319.orig/tests/readback.c     2008-03-19 
10:25:28.000000000 -0500
+++ libhugetlbfs-dev-20080319/tests/readback.c  2008-04-09 14:58:43.428089232 
-0500
@@ -38,9 +38,7 @@
 
        test_init(argc, argv);
 
-       hpage_size = gethugepagesize();
-       if (hpage_size < 0)
-               CONFIG("No hugepage kernel support");
+       hpage_size = check_hugepagesize();
 
        fd = hugetlbfs_unlinked_fd();
        if (fd < 0)
diff -ur libhugetlbfs-dev-20080319.orig/tests/shared.c 
libhugetlbfs-dev-20080319/tests/shared.c
--- libhugetlbfs-dev-20080319.orig/tests/shared.c       2008-03-19 
10:25:28.000000000 -0500
+++ libhugetlbfs-dev-20080319/tests/shared.c    2008-04-09 14:57:44.524125408 
-0500
@@ -40,9 +40,7 @@
 
        test_init(argc, argv);
 
-       hpage_size = gethugepagesize();
-       if (hpage_size < 0)
-               CONFIG("No hugepage kernel support");
+       hpage_size = check_hugepagesize();
 
        fd = hugetlbfs_unlinked_fd();
        if (fd < 0)
diff -ur libhugetlbfs-dev-20080319.orig/tests/shm-fork.c 
libhugetlbfs-dev-20080319/tests/shm-fork.c
--- libhugetlbfs-dev-20080319.orig/tests/shm-fork.c     2008-03-19 
10:25:28.000000000 -0500
+++ libhugetlbfs-dev-20080319/tests/shm-fork.c  2008-04-09 14:59:16.034062616 
-0500
@@ -101,7 +101,7 @@
        if (numprocs > MAX_PROCS)
                CONFIG("Cannot spawn more than %d processes", MAX_PROCS);
 
-       hpage_size = gethugepagesize();
+       hpage_size = check_hugepagesize();
         size = hpage_size * nr_hugepages;
        verbose_printf("Requesting %lu bytes\n", size);
        if ((shmid = shmget(2, size, SHM_HUGETLB|IPC_CREAT|SHM_R|SHM_W )) < 0)
diff -ur libhugetlbfs-dev-20080319.orig/tests/shm-getraw.c 
libhugetlbfs-dev-20080319/tests/shm-getraw.c
--- libhugetlbfs-dev-20080319.orig/tests/shm-getraw.c   2008-03-19 
10:25:28.000000000 -0500
+++ libhugetlbfs-dev-20080319/tests/shm-getraw.c        2008-04-09 
15:03:07.080073272 -0500
@@ -51,7 +51,7 @@
 {
        size_t size;
        size_t i;
-       long hpage_size = gethugepagesize();
+       long hpage_size = check_hugepagesize();
        volatile char *shmaddr;
        char *buffer;
        int raw_fd;
diff -ur libhugetlbfs-dev-20080319.orig/tests/slbpacaflush.c 
libhugetlbfs-dev-20080319/tests/slbpacaflush.c
--- libhugetlbfs-dev-20080319.orig/tests/slbpacaflush.c 2008-03-19 
10:25:28.000000000 -0500
+++ libhugetlbfs-dev-20080319/tests/slbpacaflush.c      2008-04-09 
14:57:32.481093032 -0500
@@ -62,9 +62,7 @@
 
        test_init(argc, argv);
 
-       hpage_size = gethugepagesize();
-       if (hpage_size < 0)
-               CONFIG("No hugepage kernel support");
+       hpage_size = check_hugepagesize();
 
        fd = hugetlbfs_unlinked_fd();
        if (fd < 0)
diff -ur libhugetlbfs-dev-20080319.orig/tests/straddle_4GB.c 
libhugetlbfs-dev-20080319/tests/straddle_4GB.c
--- libhugetlbfs-dev-20080319.orig/tests/straddle_4GB.c 2008-03-19 
10:25:28.000000000 -0500
+++ libhugetlbfs-dev-20080319/tests/straddle_4GB.c      2008-04-09 
15:03:34.620145624 -0500
@@ -36,9 +36,7 @@
 
        test_init(argc, argv);
 
-       hpage_size = gethugepagesize();
-       if (hpage_size < 0)
-               CONFIG("No hugepage kernel support");
+       hpage_size = check_hugepagesize();
 
        if (sizeof(void *) <= 4)
                TEST_BUG("64-bit only");
diff -ur libhugetlbfs-dev-20080319.orig/tests/task-size-overrun.c 
libhugetlbfs-dev-20080319/tests/task-size-overrun.c
--- libhugetlbfs-dev-20080319.orig/tests/task-size-overrun.c    2008-03-19 
10:25:28.000000000 -0500
+++ libhugetlbfs-dev-20080319/tests/task-size-overrun.c 2008-04-09 
14:59:25.505082784 -0500
@@ -98,9 +98,7 @@
 
        verbose_printf("TASK_SIZE = 0x%lx\n", task_size);
 
-       hpage_size = gethugepagesize();
-       if (hpage_size < 0)
-               CONFIG("No hugepage kernel support");
+       hpage_size = check_hugepagesize();
 
        fd = hugetlbfs_unlinked_fd();
        if (fd < 0)
diff -ur libhugetlbfs-dev-20080319.orig/tests/testutils.c 
libhugetlbfs-dev-20080319/tests/testutils.c
--- libhugetlbfs-dev-20080319.orig/tests/testutils.c    2008-03-19 
10:25:28.000000000 -0500
+++ libhugetlbfs-dev-20080319/tests/testutils.c 2008-04-09 14:06:18.747046760 
-0500
@@ -34,6 +34,7 @@
 #include <sys/shm.h>
 #include <sys/stat.h>
 #include <fcntl.h>
+#include <dlfcn.h>
 
 #include "hugetests.h"
 
@@ -69,6 +70,44 @@
        exit(RC_BUG);
 }
 
+extern long gethugepagesize (void) __attribute__ ((weak));
+
+long call_gethugepagesize(void)
+{
+       static long (*lib_gethugepagesize)(void) = NULL;
+       void *handle;
+       char *error;
+
+       if (gethugepagesize)
+               return gethugepagesize();
+
+       if (!lib_gethugepagesize) {
+               
+               /* Open the library */
+               if (sizeof(int) == 4)
+                       handle = dlopen("../obj32/libhugetlbfs.so", RTLD_LAZY);
+               else
+                       handle = dlopen("../obj64/libhugetlbfs.so", RTLD_LAZY);
+               if (!handle) {
+                       fprintf(stderr, "%s: %s (pid=%d)\n", test_name,
+                               "Failed to load libhugetlbfs.so",
+                               getpid());
+                       exit(RC_BUG);
+               }
+
+               /* Resolve the symbol */
+               lib_gethugepagesize = dlsym(handle, "gethugepagesize");
+               if ((error = dlerror()) != NULL) {
+                       fprintf(stderr, "%s: %s (pid=%d)\n", test_name,
+                               "Failed to resolve gethugepagesize symbol",
+                               getpid());
+                       exit(RC_BUG);
+               }
+       }
+
+       return lib_gethugepagesize();
+}
+
 void test_init(int argc, char *argv[])
 {
        int err;
diff -ur libhugetlbfs-dev-20080319.orig/tests/truncate_above_4GB.c 
libhugetlbfs-dev-20080319/tests/truncate_above_4GB.c
--- libhugetlbfs-dev-20080319.orig/tests/truncate_above_4GB.c   2008-03-19 
10:25:28.000000000 -0500
+++ libhugetlbfs-dev-20080319/tests/truncate_above_4GB.c        2008-04-09 
15:03:16.004046736 -0500
@@ -78,9 +78,7 @@
        test_init(argc, argv);
 
        page_size = getpagesize();
-       hpage_size = gethugepagesize();
-       if (hpage_size < 0)
-               CONFIG("No hugepage kernel support");
+       hpage_size = check_hugepagesize();
 
        check_free_huge_pages(3);
 
diff -ur libhugetlbfs-dev-20080319.orig/tests/truncate.c 
libhugetlbfs-dev-20080319/tests/truncate.c
--- libhugetlbfs-dev-20080319.orig/tests/truncate.c     2008-03-19 
10:25:28.000000000 -0500
+++ libhugetlbfs-dev-20080319/tests/truncate.c  2008-04-09 14:59:47.078129968 
-0500
@@ -47,9 +47,7 @@
 
        test_init(argc, argv);
 
-       hpage_size = gethugepagesize();
-       if (hpage_size < 0)
-               CONFIG("No hugepage kernel support");
+       hpage_size = check_hugepagesize();
 
        fd = hugetlbfs_unlinked_fd();
        if (fd < 0)
diff -ur libhugetlbfs-dev-20080319.orig/tests/truncate_reserve_wraparound.c 
libhugetlbfs-dev-20080319/tests/truncate_reserve_wraparound.c
--- libhugetlbfs-dev-20080319.orig/tests/truncate_reserve_wraparound.c  
2008-03-19 10:25:28.000000000 -0500
+++ libhugetlbfs-dev-20080319/tests/truncate_reserve_wraparound.c       
2008-04-09 15:01:27.310070280 -0500
@@ -83,9 +83,7 @@
 
        test_init(argc, argv);
 
-       hpage_size = gethugepagesize();
-       if (hpage_size < 0)
-               CONFIG("No hugepage kernel support");
+       hpage_size = check_hugepagesize();
 
        fd = hugetlbfs_unlinked_fd();
        if (fd < 0)
diff -ur libhugetlbfs-dev-20080319.orig/tests/truncate_sigbus_versus_oom.c 
libhugetlbfs-dev-20080319/tests/truncate_sigbus_versus_oom.c
--- libhugetlbfs-dev-20080319.orig/tests/truncate_sigbus_versus_oom.c   
2008-03-19 10:25:28.000000000 -0500
+++ libhugetlbfs-dev-20080319/tests/truncate_sigbus_versus_oom.c        
2008-04-09 15:00:40.975055488 -0500
@@ -60,9 +60,7 @@
 
        totpages = read_meminfo("HugePages_Free:");
 
-       hpage_size = gethugepagesize();
-       if (hpage_size < 0)
-               CONFIG("No hugepage kernel support");
+       hpage_size = check_hugepagesize();
 
        fd = hugetlbfs_unlinked_fd();
        if (fd < 0)
diff -ur libhugetlbfs-dev-20080319.orig/tests/unlinked_fd.c 
libhugetlbfs-dev-20080319/tests/unlinked_fd.c
--- libhugetlbfs-dev-20080319.orig/tests/unlinked_fd.c  2008-03-19 
10:25:28.000000000 -0500
+++ libhugetlbfs-dev-20080319/tests/unlinked_fd.c       2008-04-09 
14:57:20.250090928 -0500
@@ -34,9 +34,7 @@
 
        test_init(argc, argv);
 
-       hpage_size = gethugepagesize();
-       if (hpage_size < 0)
-               CONFIG("No hugepage kernel support");
+       hpage_size = check_hugepagesize();
 
        fd = hugetlbfs_unlinked_fd();
        if (fd < 0)




-------------------------------------------------------------------------
This SF.net email is sponsored by the 2008 JavaOne(SM) Conference 
Don't miss this year's exciting event. There's still time to save $100. 
Use priority code J8TL2D2. 
http://ad.doubleclick.net/clk;198757673;13503038;p?http://java.sun.com/javaone
_______________________________________________
Libhugetlbfs-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/libhugetlbfs-devel

Reply via email to