Signed-off-by: tangchen <[email protected]>
---
testcases/kernel/mem/hugetlb/hugemmap/hugemmap03.c | 56 ++++++++-----------
1 files changed, 24 insertions(+), 32 deletions(-)
diff --git a/testcases/kernel/mem/hugetlb/hugemmap/hugemmap03.c
b/testcases/kernel/mem/hugetlb/hugemmap/hugemmap03.c
index cac94b0..69dcf86 100644
--- a/testcases/kernel/mem/hugetlb/hugemmap/hugemmap03.c
+++ b/testcases/kernel/mem/hugetlb/hugemmap/hugemmap03.c
@@ -54,54 +54,39 @@
#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);
+ msg = parse_opts(ac, av, NULL, NULL);
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 +107,14 @@ 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, "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");
@@ -149,18 +140,18 @@ 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 +160,7 @@ setup()
* Remove the temporary directory created.
*/
void
-cleanup()
+cleanup(void)
{
/*
* print timing stats if that option was specified.
@@ -177,5 +168,6 @@ cleanup()
TEST_CLEANUP;
unlink(TEMPFILE);
-
+ umount_hugetlbfs(mount_point);
+ tst_rmdir();
}
--
1.7.1
--
Best Regards,
Tang chen
>From 452b938b5412c797f4c08178a701bd133eb3b152 Mon Sep 17 00:00:00 2001
From: tangchen <[email protected]>
Date: Wed, 7 Sep 2011 09:59:17 +0800
Subject: [PATCH 5/6] hugemmap03.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: tangchen <[email protected]>
---
testcases/kernel/mem/hugetlb/hugemmap/hugemmap03.c | 56 ++++++++-----------
1 files changed, 24 insertions(+), 32 deletions(-)
diff --git a/testcases/kernel/mem/hugetlb/hugemmap/hugemmap03.c
b/testcases/kernel/mem/hugetlb/hugemmap/hugemmap03.c
index cac94b0..69dcf86 100644
--- a/testcases/kernel/mem/hugetlb/hugemmap/hugemmap03.c
+++ b/testcases/kernel/mem/hugetlb/hugemmap/hugemmap03.c
@@ -54,54 +54,39 @@
#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);
+ msg = parse_opts(ac, av, NULL, NULL);
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 +107,14 @@ 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, "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");
@@ -149,18 +140,18 @@ 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 +160,7 @@ setup()
* Remove the temporary directory created.
*/
void
-cleanup()
+cleanup(void)
{
/*
* print timing stats if that option was specified.
@@ -177,5 +168,6 @@ cleanup()
TEST_CLEANUP;
unlink(TEMPFILE);
-
+ umount_hugetlbfs(mount_point);
+ tst_rmdir();
}
--
1.7.1
------------------------------------------------------------------------------
Using storage to extend the benefits of virtualization and iSCSI
Virtualization increases hardware utilization and delivers a new level of
agility. Learn what those decisions are and how to modernize your storage
and backup environments for virtualization.
http://www.accelacomm.com/jaw/sfnl/114/51434361/
_______________________________________________
Ltp-list mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/ltp-list