hi,
I seperate all my code into 6 patches, please comment!
Thanks:)
On 07/11/2011 11:38 PM, Cyril Hrubis wrote:
> Hi!
>> I am sorry about the style problem, and I resend this patch here.
>
> Fixing the coding style is welcome, but please do that in patch
> separated from function changes.
>
> It's better to create several incremental patches that are easier to
> review and thuss gets commited sooner.
>
>> Please comment! Thanks.:)
>>
--
Best Regards,
Tang chen
>From 73cfee99818a6f0517ee544f3b55e43f38f0052a Mon Sep 17 00:00:00 2001
From: Tang Chen <[email protected]>
Date: Tue, 2 Aug 2011 10:30:49 +0800
Subject: [PATCH 1/6] A library used to mount hugetlbfs automatically.
This library includes a set of functions used to mount hugetlbfs automatically
when doing the hugemmap tests.
Signed-off-by: Tang Chen <[email protected]>
---
testcases/kernel/mem/hugetlb/hugemmap/Makefile | 25 ++++++++-
testcases/kernel/mem/hugetlb/hugemmap/lib/Makefile | 25 +++++++++
testcases/kernel/mem/hugetlb/hugemmap/lib/libmnt.c | 58 ++++++++++++++++++++
testcases/kernel/mem/hugetlb/hugemmap/lib/libmnt.h | 25 +++++++++
4 files changed, 132 insertions(+), 1 deletions(-)
create mode 100644 testcases/kernel/mem/hugetlb/hugemmap/lib/Makefile
create mode 100644 testcases/kernel/mem/hugetlb/hugemmap/lib/libmnt.c
create mode 100644 testcases/kernel/mem/hugetlb/hugemmap/lib/libmnt.h
diff --git a/testcases/kernel/mem/hugetlb/hugemmap/Makefile
b/testcases/kernel/mem/hugetlb/hugemmap/Makefile
index a1ba46e..5da30f9 100644
--- a/testcases/kernel/mem/hugetlb/hugemmap/Makefile
+++ b/testcases/kernel/mem/hugetlb/hugemmap/Makefile
@@ -23,5 +23,28 @@
top_srcdir ?= ../../../../..
include $(top_srcdir)/include/mk/testcases.mk
-include $(abs_srcdir)/../Makefile.inc
+
+LIBDIR := lib
+LIB := $(LIBDIR)/libmnt_hugetlb.a
+FILTER_OUT_DIRS := $(LIBDIR)
+
+$(LIBDIR):
+ mkdir -p "$@"
+
+$(LIB): $(LIBDIR)
+ $(MAKE) -C $^ -f "$(abs_srcdir)/$^/Makefile" all
+
+CPPFLAGS += -I$(abs_srcdir)/$(LIBDIR)
+
+LDFLAGS += -L$(abs_builddir)/$(LIBDIR)
+
+LDLIBS += -lmnt_hugetlb
+
+MAKE_DEPS := $(LIB)
+
+trunk-clean:: | lib-clean
+
+lib-clean:: $(LIBDIR)
+ $(MAKE) -C $^ -f "$(abs_srcdir)/$^/Makefile" clean
+
include $(top_srcdir)/include/mk/generic_leaf_target.mk
diff --git a/testcases/kernel/mem/hugetlb/hugemmap/lib/Makefile
b/testcases/kernel/mem/hugetlb/hugemmap/lib/Makefile
new file mode 100644
index 0000000..f37b87a
--- /dev/null
+++ b/testcases/kernel/mem/hugetlb/hugemmap/lib/Makefile
@@ -0,0 +1,25 @@
+#
+# Copyright (c) International Business Machines Corp., 2001
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
+# the GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+#
+
+top_srcdir ?= ../../../../../..
+
+include $(top_srcdir)/include/mk/env_pre.mk
+
+LIB := libmnt_hugetlb.a
+
+include $(top_srcdir)/include/mk/lib.mk
diff --git a/testcases/kernel/mem/hugetlb/hugemmap/lib/libmnt.c
b/testcases/kernel/mem/hugetlb/hugemmap/lib/libmnt.c
new file mode 100644
index 0000000..3f722eb
--- /dev/null
+++ b/testcases/kernel/mem/hugetlb/hugemmap/lib/libmnt.c
@@ -0,0 +1,58 @@
+/*
+ *
+ * Copyright (c) International Business Machines Corp., 2001
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
+ * the GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <sys/mount.h>
+#include <errno.h>
+
+#include "test.h"
+#include "libmnt.h"
+
+void
+hugepage_alloc(int num)
+{
+ FILE *file = fopen("/proc/sys/vm/nr_hugepages", "w+");
+ if (file == NULL) {
+ tst_brkm(TBROK|TERRNO, NULL,
+ "fopen failed on /proc/sys/vm/nr_hugepages");
+ }
+
+ if (fprintf(file, "%d", num) < 0) {
+ tst_brkm(TBROK|TERRNO, NULL,
+ "fprintf failed on /proc/sys/vm/nr_hugepages");
+ }
+
+ fclose(file);
+}
+
+void
+mount_hugetlbfs(char *mount_point)
+{
+ if (mount("none", mount_point, "hugetlbfs", 0, NULL) < 0) {
+ tst_brkm(TBROK|TERRNO, NULL,
+ "mount failed on %s", mount_point);
+ }
+}
+
+void
+umount_hugetlbfs(char *mount_point)
+{
+ umount(mount_point);
+}
diff --git a/testcases/kernel/mem/hugetlb/hugemmap/lib/libmnt.h
b/testcases/kernel/mem/hugetlb/hugemmap/lib/libmnt.h
new file mode 100644
index 0000000..b4659ff
--- /dev/null
+++ b/testcases/kernel/mem/hugetlb/hugemmap/lib/libmnt.h
@@ -0,0 +1,25 @@
+/*
+ * Copyright (c) International Business Machines Corp., 2001
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
+ * the GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+/*
+ * libmnt.h - functions to mount hugetlbfs automatically.
+ */
+
+void hugepage_alloc(int num);
+void mount_hugetlbfs(char *mount_point);
+void umount_hugetlbfs(char *mount_point);
--
1.7.1
>From 5f1aafee85c91c1524fe38f474746aa2d79679e5 Mon Sep 17 00:00:00 2001
From: Tang Chen <[email protected]>
Date: Tue, 2 Aug 2011 10:33:51 +0800
Subject: [PATCH 2/6] hugetlb : Remove the -H option.
The hugetlbfs will be mounted automatically when doing hugemmap tests, so -H
option is no longer needed.
Signed-off-by: Tang Chen <[email protected]>
---
runtest/hugetlb | 8 ++++----
1 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/runtest/hugetlb b/runtest/hugetlb
index af45868..641c2a6 100644
--- a/runtest/hugetlb
+++ b/runtest/hugetlb
@@ -1,7 +1,7 @@
-hugemmap01 hugemmap01 -H/tmp
-hugemmap02 hugemmap02 -H/tmp -c10
-hugemmap03 hugemmap03 -H/tmp -I2 -c10
-hugemmap04 hugemmap04 -H/tmp
+hugemmap01 hugemmap01
+hugemmap02 hugemmap02 -c10
+hugemmap03 hugemmap03 -I2 -c10
+hugemmap04 hugemmap04
hugemmap05 hugemmap05
hugemmap05_1 hugemmap05 -m
hugemmap05_2 hugemmap05 -s
--
1.7.1
>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
>From e19877e0ed92cb1ca1410ed9fce1894275aaddfd Mon Sep 17 00:00:00 2001
From: Tang Chen <[email protected]>
Date: Tue, 2 Aug 2011 10:34:39 +0800
Subject: [PATCH 4/6] hugemmap02.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/hugemmap02.c | 47 +++++++-------------
1 files changed, 16 insertions(+), 31 deletions(-)
diff --git a/testcases/kernel/mem/hugetlb/hugemmap/hugemmap02.c
b/testcases/kernel/mem/hugetlb/hugemmap/hugemmap02.c
index 45cddf7..34f7563 100644
--- a/testcases/kernel/mem/hugetlb/hugemmap/hugemmap02.c
+++ b/testcases/kernel/mem/hugetlb/hugemmap/hugemmap02.c
@@ -63,6 +63,7 @@
#include "test.h"
#include "usctest.h"
#include "system_specific_hugepages_info.h"
+#include "lib/libmnt.h"
#define LOW_ADDR (void *)(0x80000000)
#define LOW_ADDR2 (void *)(0x90000000)
@@ -77,38 +78,17 @@ unsigned long *addrlist[5]; /* list of addresses of memory
mapped region */
int i;
int fildes; /* file descriptor for tempfile */
int nfildes; /* file descriptor for /dev/zero */
-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;
- char *msg;
- int Hflag = 0;
int page_sz, map_sz;
- 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. */
- if ((msg = parse_opts(ac, av, options, &help)) != NULL)
- tst_brkm(TBROK, NULL, "OPTION PARSING ERROR - %s, use -help",
msg);
-
- if (Hflag == 0) {
- tst_brkm(TBROK, NULL,
- "-H option is REQUIRED for this test, use -h for options
help");
- }
-
page_sz = getpagesize();
map_sz = 2 * 1024 * hugepages_size();
@@ -206,15 +186,20 @@ main(int ac, char **av)
* Write some known data into file and get the size of the file.
*/
void
-setup()
+setup(void)
{
- tst_tmpdir();
-
- snprintf(TEMPFILE, sizeof(TEMPFILE), "%s/mmapfile%d", Hopt, getpid());
-
+ 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());
}
/*
@@ -223,7 +208,7 @@ setup()
* Remove the temporary directory created.
*/
void
-cleanup()
+cleanup(void)
{
/*
* print timing stats if that option was specified.
@@ -231,6 +216,6 @@ cleanup()
TEST_CLEANUP;
unlink(TEMPFILE);
-
+ umount_hugetlbfs(mount_point);
tst_rmdir();
}
--
1.7.1
>From 4e4c3d7e20ac36664869ea7547fcacbe678cc67e Mon Sep 17 00:00:00 2001
From: Tang Chen <[email protected]>
Date: Tue, 2 Aug 2011 10:34:51 +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: Tang Chen <[email protected]>
---
testcases/kernel/mem/hugetlb/hugemmap/hugemmap03.c | 66 ++++++++------------
1 files changed, 27 insertions(+), 39 deletions(-)
diff --git a/testcases/kernel/mem/hugetlb/hugemmap/hugemmap03.c
b/testcases/kernel/mem/hugetlb/hugemmap/hugemmap03.c
index cac94b0..5e085a0 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 "lib/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, "Normal mmap() into high region
unexpectedly "
+ "succeeded on %s, errno=%d : %s",
+ TEMPFILE, errno, strerror(errno));
+
+ /* Unmap the mapped memory */
+ if (munmap(addr, page_sz) != 0) {
+ tst_brkm(TFAIL, NULL, "munmap() fails to unmap
the "
+ "memory, errno=%d : %s", errno,
strerror(errno));
+ }
continue;
} else {
tst_resm(TPASS, "Normal mmap() into high region failed
correctly");
@@ -133,6 +117,7 @@ main(int ac, char **av)
close(fildes);
}
+ close(fildes);
cleanup();
tst_exit();
@@ -149,18 +134,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 +156,7 @@ setup()
* Remove the temporary directory created.
*/
void
-cleanup()
+cleanup(void)
{
/*
* print timing stats if that option was specified.
@@ -177,5 +164,6 @@ cleanup()
TEST_CLEANUP;
unlink(TEMPFILE);
-
+ umount_hugetlbfs(mount_point);
+ tst_rmdir();
}
--
1.7.1
>From 93a59db2e9abae40d61b14d18e568786bcb27175 Mon Sep 17 00:00:00 2001
From: Tang Chen <[email protected]>
Date: Tue, 2 Aug 2011 10:35:04 +0800
Subject: [PATCH 6/6] hugemmap04.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/hugemmap04.c | 52 ++++++--------------
1 files changed, 16 insertions(+), 36 deletions(-)
diff --git a/testcases/kernel/mem/hugetlb/hugemmap/hugemmap04.c
b/testcases/kernel/mem/hugetlb/hugemmap/hugemmap04.c
index 4cc6ed4..65d9745 100644
--- a/testcases/kernel/mem/hugetlb/hugemmap/hugemmap04.c
+++ b/testcases/kernel/mem/hugetlb/hugemmap/hugemmap04.c
@@ -73,10 +73,11 @@
#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="hugemmap04"; /* Test program identifier. */
int TST_TOTAL=1; /* Total number of test cases. */
@@ -87,41 +88,17 @@ int freepages=0; /* Amount of free huge pages to
use for testing */
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 */
-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 huge_pagesize=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();
- }
-
/* Check number of hugepages */
if (get_no_of_hugepages() <= 0 || hugepages_size() <= 0)
tst_brkm(TCONF, cleanup, "Not enough available Hugepages");
@@ -151,7 +128,7 @@ main(int ac, char **av)
tst_resm(TINFO,"Total amount of free huge pages is
%d",freepages);
tst_resm(TINFO,"Max number allowed for 1 mmap file in 32-bits
is 128");
if (freepages > 128)
- freepages=128;
+ freepages=128;
#endif
/*
* Call mmap
@@ -206,16 +183,18 @@ main(int ac, char **av)
void
setup()
{
- 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());
}
/*
@@ -232,5 +211,6 @@ cleanup()
TEST_CLEANUP;
unlink(TEMPFILE);
-
+ umount_hugetlbfs(mount_point);
+ tst_rmdir();
}
--
1.7.1
------------------------------------------------------------------------------
BlackBerry® 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