From: tangchen <tan...@cn...> - 2011-11-23 03:30:40
|
Signed-off-by: Tang Chen <tan...@cn...> --- 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 -- Best Regards, Tang chen |