Signed-off-by: Tang Chen <[email protected]>
---
 testcases/kernel/mem/hugetlb/hugemmap/hugemmap01.c |   63 +++++++------------
 1 files changed, 23 insertions(+), 40 deletions(-)

diff --git a/testcases/kernel/mem/hugetlb/hugemmap/hugemmap01.c 
b/testcases/kernel/mem/hugetlb/hugemmap/hugemmap01.c
index 874f736..e986721 100644
--- a/testcases/kernel/mem/hugetlb/hugemmap/hugemmap01.c
+++ b/testcases/kernel/mem/hugetlb/hugemmap/hugemmap01.c
@@ -73,53 +73,30 @@
 #include "test.h"
 #include "usctest.h"
 #include "system_specific_hugepages_info.h"
+#include "lib/libmnt.h"
 
 #define BUFFER_SIZE  256
 
-char* TEMPFILE="mmapfile";
+char TEMPFILE[MAXPATHLEN];
 
 char *TCID="hugemmap01";       /* Test program identifier.    */
 int TST_TOTAL=1;               /* Total number of test cases. */
 long *addr;                    /* addr of memory mapped region */
 int fildes;                    /* file descriptor for tempfile */
-char *Hopt;                     /* location of hugetlbfs */
-int beforetest=0;              /* Amount of free huge pages before testing */
-int aftertest=0;               /* Amount of free huge pages after testing */
 int hugepagesmapped=0;         /* Amount of huge pages mapped after testing */
+int free_huge_before=0;
+int free_huge_after=0;
+char *mount_point=NULL;
 
-void setup();                  /* Main setup function of test */
-void cleanup();                        /* cleanup function for the test */
-
-void help()
-{
-       printf("  -H /..  Location of hugetlbfs, i.e. -H /var/hugetlbfs \n");
-}
+void setup(void);                      /* Main setup function of test */
+void cleanup(void);                    /* cleanup function for the test */
 
 int
 main(int ac, char **av)
 {
        int lc;                 /* loop counter */
-       char *msg;              /* message returned from parse_opts */
-        int Hflag=0;              /* binary flag: opt or not */
        int page_sz=0;
 
-               option_t options[] = {
-               { "H:",   &Hflag, &Hopt },    /* Required for location of 
hugetlbfs */
-               { NULL, NULL, NULL }          /* NULL required to end array */
-               };
-
-       /* Parse standard options given to run the test. */
-       msg = parse_opts(ac, av, options, &help);
-       if (msg != (char *) NULL) {
-               tst_brkm(TBROK, NULL, "OPTION PARSING ERROR - %s, use -help", 
msg);
-               tst_exit();
-       }
-
-       if (Hflag == 0) {
-               tst_brkm(TBROK, NULL, "-H option is REQUIRED for this test, use 
-h for options help");
-               tst_exit();
-       }
-
        setup();
 
        for (lc = 0; TEST_LOOPING(lc); lc++) {
@@ -134,7 +111,7 @@ main(int ac, char **av)
                Tst_count=0;
 
                /* Note the number of free huge pages BEFORE testing */
-               beforetest = get_no_of_free_hugepages();
+               free_huge_before = get_no_of_free_hugepages();
 
                /* Note the size of huge page size BEFORE testing */
                page_sz = hugepages_size();
@@ -159,8 +136,8 @@ main(int ac, char **av)
                }
 
                /* Make sure the number of free huge pages AFTER testing 
decreased */
-               aftertest = get_no_of_free_hugepages();
-               hugepagesmapped = beforetest - aftertest;
+               free_huge_after = get_no_of_free_hugepages();
+               hugepagesmapped = free_huge_before - free_huge_after;
                if (hugepagesmapped < 1) {
                        tst_resm(TWARN,"Number of HUGEPAGES_FREE stayed the 
same. Okay if");
                        tst_resm(TWARN,"multiple copies running due to test 
collision.");
@@ -189,18 +166,22 @@ main(int ac, char **av)
  *          Write some known data into file and get the size of the file.
  */
 void
-setup()
+setup(void)
 {
-       char mypid[40];
-
-       sprintf(mypid,"/%d",getpid());
-       TEMPFILE=strcat(mypid,TEMPFILE);
-       TEMPFILE=strcat(Hopt,TEMPFILE);
+       tst_require_root(NULL);
 
        tst_sig(FORK, DEF_HANDLER, cleanup);
 
        TEST_PAUSE;
 
+       tst_tmpdir();
+       mount_point = get_tst_tmpdir();
+
+       mount_hugetlbfs(mount_point);
+       hugepage_alloc(1024);
+
+       snprintf(TEMPFILE, sizeof(TEMPFILE), "%s/mmapfile%d", 
+               mount_point, getpid());
 }
 
 /*
@@ -209,7 +190,7 @@ setup()
  *            Remove the temporary directory created.
  */
 void
-cleanup()
+cleanup(void)
 {
        /*
         * print timing stats if that option was specified.
@@ -218,4 +199,6 @@ cleanup()
 
        unlink(TEMPFILE);
 
+       umount_hugetlbfs(mount_point);
+       tst_rmdir();
 }
-- 
1.7.1

-- 
Best Regards,
Tang chen


>From 12ab35a918deba9480500f07c2e8bccbbda09966 Mon Sep 17 00:00:00 2001
From: Tang Chen <[email protected]>
Date: Tue, 2 Aug 2011 10:34:21 +0800
Subject: [PATCH 3/6] hugemmap01.c : Automatically mount hugetlbfs on /huge.

Firstly, mounting hugetlbfs on /tmp is not a good idea, because lots of 
programs could use /tmp for other purpose. This could cause other tests fail.
Secondly, mounting hugetlbfs could be done automatically.
This patch creates a temp directory with name including the current PID, 
automatically mounts hugetlbfs on the directory before test starts, and umounts 
it when the test is over.

Signed-off-by: Tang Chen <[email protected]>
---
 testcases/kernel/mem/hugetlb/hugemmap/hugemmap01.c |   63 +++++++------------
 1 files changed, 23 insertions(+), 40 deletions(-)

diff --git a/testcases/kernel/mem/hugetlb/hugemmap/hugemmap01.c 
b/testcases/kernel/mem/hugetlb/hugemmap/hugemmap01.c
index 874f736..e986721 100644
--- a/testcases/kernel/mem/hugetlb/hugemmap/hugemmap01.c
+++ b/testcases/kernel/mem/hugetlb/hugemmap/hugemmap01.c
@@ -73,53 +73,30 @@
 #include "test.h"
 #include "usctest.h"
 #include "system_specific_hugepages_info.h"
+#include "lib/libmnt.h"
 
 #define BUFFER_SIZE  256
 
-char* TEMPFILE="mmapfile";
+char TEMPFILE[MAXPATHLEN];
 
 char *TCID="hugemmap01";       /* Test program identifier.    */
 int TST_TOTAL=1;               /* Total number of test cases. */
 long *addr;                    /* addr of memory mapped region */
 int fildes;                    /* file descriptor for tempfile */
-char *Hopt;                     /* location of hugetlbfs */
-int beforetest=0;              /* Amount of free huge pages before testing */
-int aftertest=0;               /* Amount of free huge pages after testing */
 int hugepagesmapped=0;         /* Amount of huge pages mapped after testing */
+int free_huge_before=0;
+int free_huge_after=0;
+char *mount_point=NULL;
 
-void setup();                  /* Main setup function of test */
-void cleanup();                        /* cleanup function for the test */
-
-void help()
-{
-       printf("  -H /..  Location of hugetlbfs, i.e. -H /var/hugetlbfs \n");
-}
+void setup(void);                      /* Main setup function of test */
+void cleanup(void);                    /* cleanup function for the test */
 
 int
 main(int ac, char **av)
 {
        int lc;                 /* loop counter */
-       char *msg;              /* message returned from parse_opts */
-        int Hflag=0;              /* binary flag: opt or not */
        int page_sz=0;
 
-               option_t options[] = {
-               { "H:",   &Hflag, &Hopt },    /* Required for location of 
hugetlbfs */
-               { NULL, NULL, NULL }          /* NULL required to end array */
-               };
-
-       /* Parse standard options given to run the test. */
-       msg = parse_opts(ac, av, options, &help);
-       if (msg != (char *) NULL) {
-               tst_brkm(TBROK, NULL, "OPTION PARSING ERROR - %s, use -help", 
msg);
-               tst_exit();
-       }
-
-       if (Hflag == 0) {
-               tst_brkm(TBROK, NULL, "-H option is REQUIRED for this test, use 
-h for options help");
-               tst_exit();
-       }
-
        setup();
 
        for (lc = 0; TEST_LOOPING(lc); lc++) {
@@ -134,7 +111,7 @@ main(int ac, char **av)
                Tst_count=0;
 
                /* Note the number of free huge pages BEFORE testing */
-               beforetest = get_no_of_free_hugepages();
+               free_huge_before = get_no_of_free_hugepages();
 
                /* Note the size of huge page size BEFORE testing */
                page_sz = hugepages_size();
@@ -159,8 +136,8 @@ main(int ac, char **av)
                }
 
                /* Make sure the number of free huge pages AFTER testing 
decreased */
-               aftertest = get_no_of_free_hugepages();
-               hugepagesmapped = beforetest - aftertest;
+               free_huge_after = get_no_of_free_hugepages();
+               hugepagesmapped = free_huge_before - free_huge_after;
                if (hugepagesmapped < 1) {
                        tst_resm(TWARN,"Number of HUGEPAGES_FREE stayed the 
same. Okay if");
                        tst_resm(TWARN,"multiple copies running due to test 
collision.");
@@ -189,18 +166,22 @@ main(int ac, char **av)
  *          Write some known data into file and get the size of the file.
  */
 void
-setup()
+setup(void)
 {
-       char mypid[40];
-
-       sprintf(mypid,"/%d",getpid());
-       TEMPFILE=strcat(mypid,TEMPFILE);
-       TEMPFILE=strcat(Hopt,TEMPFILE);
+       tst_require_root(NULL);
 
        tst_sig(FORK, DEF_HANDLER, cleanup);
 
        TEST_PAUSE;
 
+       tst_tmpdir();
+       mount_point = get_tst_tmpdir();
+
+       mount_hugetlbfs(mount_point);
+       hugepage_alloc(1024);
+
+       snprintf(TEMPFILE, sizeof(TEMPFILE), "%s/mmapfile%d", 
+               mount_point, getpid());
 }
 
 /*
@@ -209,7 +190,7 @@ setup()
  *            Remove the temporary directory created.
  */
 void
-cleanup()
+cleanup(void)
 {
        /*
         * print timing stats if that option was specified.
@@ -218,4 +199,6 @@ cleanup()
 
        unlink(TEMPFILE);
 
+       umount_hugetlbfs(mount_point);
+       tst_rmdir();
 }
-- 
1.7.1

------------------------------------------------------------------------------
BlackBerry&reg; DevCon Americas, Oct. 18-20, San Francisco, CA
The must-attend event for mobile developers. Connect with experts. 
Get tools for creating Super Apps. See the latest technologies.
Sessions, hands-on labs, demos & much more. Register early & save!
http://p.sf.net/sfu/rim-blackberry-1
_______________________________________________
Ltp-list mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/ltp-list

Reply via email to