Signed-off-by: Tang Chen <tangc...@cn.fujitsu.com>
Signed-off-by: Wanlong Gao <gaowanl...@cn.fujitsu.com>
---
 testcases/kernel/mem/hugetlb/hugemmap/hugemmap03.c |   66 ++++++++------------
 1 files changed, 26 insertions(+), 40 deletions(-)

diff --git a/testcases/kernel/mem/hugetlb/hugemmap/hugemmap03.c 
b/testcases/kernel/mem/hugetlb/hugemmap/hugemmap03.c
index cac94b0..b17b19d 100644
--- a/testcases/kernel/mem/hugetlb/hugemmap/hugemmap03.c
+++ b/testcases/kernel/mem/hugetlb/hugemmap/hugemmap03.c
@@ -54,54 +54,31 @@
 #include "test.h"
 #include "usctest.h"
 #include "system_specific_hugepages_info.h"
+#include "libmnt.h"
 
 #define HIGH_ADDR      (void *)(0x1000000000000)
 
-char* TEMPFILE="mmapfile";
+char TEMPFILE[MAXPATHLEN];
 
 char *TCID="hugemmap03";       /* Test program identifier.    */
 int TST_TOTAL=1;               /* Total number of test cases. */
 unsigned long *addr;           /* addr of memory mapped region */
 int fildes;                    /* file descriptor for tempfile */
-char *Hopt;                     /* location of hugetlbfs */
+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;
 
 #if __WORDSIZE==32  /* 32-bit compiled */
        tst_brkm(TCONF, NULL, "This test is only for 64bit");
 #endif
 
-               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();
-       }
-
        page_sz = getpagesize();
 
        setup();
@@ -122,8 +99,15 @@ main(int ac, char **av)
                addr = mmap(HIGH_ADDR, page_sz, PROT_READ,
                            MAP_SHARED | MAP_FIXED, fildes, 0);
                if (addr != MAP_FAILED) {
-                       tst_resm(TFAIL, "Normal mmap() into high region 
unexpectedly succeeded on %s, errno=%d : %s",
-                                TEMPFILE, errno, strerror(errno));
+                       tst_resm(TFAIL|TERRNO, "Normal mmap() into high region 
unexpectedly "
+                               "succeeded on %s",
+                               TEMPFILE);
+
+                       /* Unmap the mapped memory */
+                       if (munmap(addr, page_sz) != 0) {
+                               tst_brkm(TFAIL|TERRNO, NULL, "munmap() fails to 
unmap the "
+                                       "memory");
+                       }
                        continue;
                } else {
                        tst_resm(TPASS, "Normal mmap() into high region failed 
correctly");
@@ -132,7 +116,6 @@ main(int ac, char **av)
 
                close(fildes);
        }
-
        cleanup();
 
        tst_exit();
@@ -149,18 +132,20 @@ 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());
 }
 
 /*
@@ -169,7 +154,7 @@ setup()
  *            Remove the temporary directory created.
  */
 void
-cleanup()
+cleanup(void)
 {
        /*
         * print timing stats if that option was specified.
@@ -177,5 +162,6 @@ cleanup()
        TEST_CLEANUP;
 
        unlink(TEMPFILE);
-
+       umount_hugetlbfs(mount_point);
+       tst_rmdir();
 }
-- 
1.7.1


------------------------------------------------------------------------------
All the data continuously generated in your IT infrastructure 
contains a definitive record of customers, application performance, 
security threats, fraudulent activity, and more. Splunk takes this 
data and makes sense of it. IT sense. And common sense.
http://p.sf.net/sfu/splunk-novd2d
_______________________________________________
Ltp-list mailing list
Ltp-list@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/ltp-list

Reply via email to