This patch enables nr_hugepages set/restore in each test of hugeshmctl,
so that we don't need to set the values with external commands.
Signed-off-by: Caspar Zhang <[email protected]>
---
.../kernel/mem/hugetlb/hugeshmctl/hugeshmctl01.c | 28 +++++++++++++++-----
.../kernel/mem/hugetlb/hugeshmctl/hugeshmctl02.c | 28 +++++++++++++++-----
.../kernel/mem/hugetlb/hugeshmctl/hugeshmctl03.c | 27 ++++++++++++++-----
3 files changed, 62 insertions(+), 21 deletions(-)
diff --git a/testcases/kernel/mem/hugetlb/hugeshmctl/hugeshmctl01.c b/testcases/kernel/mem/hugetlb/hugeshmctl/hugeshmctl01.c
index ce8d89a..4577c30 100644
--- a/testcases/kernel/mem/hugetlb/hugeshmctl/hugeshmctl01.c
+++ b/testcases/kernel/mem/hugetlb/hugeshmctl/hugeshmctl01.c
@@ -62,7 +62,8 @@
*/
#include "ipcshm.h"
-#include "system_specific_hugepages_info.h"
+#include "safe_macros.h"
+#include "mem.h"
char *TCID = "hugeshmctl01";
int TST_TOTAL = 4;
@@ -89,6 +90,12 @@ static void func_set(void);
static void func_rmid(void);
static void *set_shmat(void);
+static long hugepages = 128;
+static option_t options[] = {
+ { "s:", &sflag, &nr_opt },
+ { NULL, NULL, NULL }
+};
+
struct test_case_t {
int cmd;
void (*func_test)(void);
@@ -105,14 +112,11 @@ int main(int ac, char **av)
int lc, i;
char *msg;
- msg = parse_opts(ac, av, NULL, NULL);
+ msg = parse_opts(ac, av, options, &help);
if (msg != NULL)
tst_brkm(TBROK, NULL, "OPTION PARSING ERROR - %s", msg);
-
- if (get_no_of_hugepages() <= 0 || hugepages_size() <= 0)
- tst_brkm(TCONF, NULL, "Not enough available Hugepages");
- else
- shm_size = (get_no_of_hugepages()*hugepages_size()*1024) / 2;
+ if (sflag)
+ hugepages = SAFE_STRTOL(NULL, nr_opt, 0, LONG_MAX);
setup();
@@ -397,9 +401,17 @@ static void sighandler(int sig)
void setup(void)
{
+ long hpage_size;
+
+ tst_require_root(NULL);
tst_sig(FORK, sighandler, cleanup);
tst_tmpdir();
+ orig_hugepages = get_sys_tune("nr_hugepages");
+ set_sys_tune("nr_hugepages", hugepages, 1);
+ hpage_size = read_meminfo("Hugepagesize:") * 1024;
+
+ shm_size = hpage_size * hugepages / 2;
shmkey = getipckey();
TEST_PAUSE;
@@ -411,5 +423,7 @@ void cleanup(void)
rm_shm(shm_id_1);
+ set_sys_tune("nr_hugepages", orig_hugepages, 0);
+
tst_rmdir();
}
diff --git a/testcases/kernel/mem/hugetlb/hugeshmctl/hugeshmctl02.c b/testcases/kernel/mem/hugetlb/hugeshmctl/hugeshmctl02.c
index 15cadb0..568f790 100644
--- a/testcases/kernel/mem/hugetlb/hugeshmctl/hugeshmctl02.c
+++ b/testcases/kernel/mem/hugetlb/hugeshmctl/hugeshmctl02.c
@@ -54,7 +54,8 @@
#include <pwd.h>
#include "ipcshm.h"
-#include "system_specific_hugepages_info.h"
+#include "safe_macros.h"
+#include "mem.h"
char *TCID = "hugeshmctl02";
int TST_TOTAL = 4;
@@ -65,6 +66,12 @@ static int shm_id_2 = -1;
static int shm_id_3 = -1;
static struct shmid_ds buf;
+static long hugepages = 128;
+static option_t options[] = {
+ { "s:", &sflag, &nr_opt },
+ { NULL, NULL, NULL }
+};
+
struct test_case_t {
int *shmid;
int cmd;
@@ -89,14 +96,11 @@ int main(int ac, char **av)
int lc, i;
char *msg;
- msg = parse_opts(ac, av, NULL, NULL);
+ msg = parse_opts(ac, av, options, &help);
if (msg != NULL)
tst_brkm(TBROK, NULL, "OPTION PARSING ERROR - %s", msg);
-
- if (get_no_of_hugepages() <= 0 || hugepages_size() <= 0)
- tst_brkm(TCONF, NULL, "Not enough available Hugepages");
- else
- shm_size = (get_no_of_hugepages()*hugepages_size()*1024) / 2;
+ if (sflag)
+ hugepages = SAFE_STRTOL(NULL, nr_opt, 0, LONG_MAX);
setup();
@@ -119,9 +123,17 @@ int main(int ac, char **av)
void setup(void)
{
+ long hpage_size;
+
+ tst_require_root(NULL);
tst_sig(NOFORK, DEF_HANDLER, cleanup);
tst_tmpdir();
+ orig_hugepages = get_sys_tune("nr_hugepages");
+ set_sys_tune("nr_hugepages", hugepages, 1);
+ hpage_size = read_meminfo("Hugepagesize:") * 1024;
+
+ shm_size = hpage_size * hugepages / 2;
shmkey = getipckey();
/* create a shared memory segment without read or write permissions */
@@ -145,5 +157,7 @@ void cleanup(void)
rm_shm(shm_id_1);
rm_shm(shm_id_2);
+ set_sys_tune("nr_hugepages", orig_hugepages, 0);
+
tst_rmdir();
}
diff --git a/testcases/kernel/mem/hugetlb/hugeshmctl/hugeshmctl03.c b/testcases/kernel/mem/hugetlb/hugeshmctl/hugeshmctl03.c
index 30353b8..e0e8606 100644
--- a/testcases/kernel/mem/hugetlb/hugeshmctl/hugeshmctl03.c
+++ b/testcases/kernel/mem/hugetlb/hugeshmctl/hugeshmctl03.c
@@ -61,7 +61,8 @@
#include <sys/types.h>
#include <sys/wait.h>
#include "ipcshm.h"
-#include "system_specific_hugepages_info.h"
+#include "safe_macros.h"
+#include "mem.h"
char *TCID = "hugeshmctl03";
int TST_TOTAL = 3;
@@ -72,6 +73,12 @@ static struct shmid_ds buf;
static uid_t ltp_uid;
static char *ltp_user = "nobody";
+static long hugepages = 128;
+static option_t options[] = {
+ { "s:", &sflag, &nr_opt },
+ { NULL, NULL, NULL }
+};
+
struct test_case_t {
int *shmid;
int cmd;
@@ -96,14 +103,11 @@ int main(int ac, char **av)
pid_t pid;
int status;
- msg = parse_opts(ac, av, NULL, NULL);
+ msg = parse_opts(ac, av, options, &help);
if (msg != NULL)
tst_brkm(TBROK, NULL, "OPTION PARSING ERROR - %s", msg);
-
- if (get_no_of_hugepages() <= 0 || hugepages_size() <= 0)
- tst_brkm(TCONF, cleanup, "Not enough available Hugepages");
- else
- shm_size = (get_no_of_hugepages()*hugepages_size()*1024) / 2;
+ if (sflag)
+ hugepages = SAFE_STRTOL(NULL, nr_opt, 0, LONG_MAX);
setup();
@@ -145,10 +149,17 @@ static void do_child(void)
void setup(void)
{
+ long hpage_size;
+
tst_require_root(NULL);
tst_sig(FORK, DEF_HANDLER, cleanup);
tst_tmpdir();
+ orig_hugepages = get_sys_tune("nr_hugepages");
+ set_sys_tune("nr_hugepages", hugepages, 1);
+ hpage_size = read_meminfo("Hugepagesize:") * 1024;
+
+ shm_size = hpage_size * hugepages / 2;
shmkey = getipckey();
shm_id_1 = shmget(shmkey, shm_size,
SHM_HUGETLB|IPC_CREAT|IPC_EXCL|SHM_RW);
@@ -167,5 +178,7 @@ void cleanup(void)
rm_shm(shm_id_1);
+ set_sys_tune("nr_hugepages", orig_hugepages, 0);
+
tst_rmdir();
}
------------------------------------------------------------------------------
Keep Your Developer Skills Current with LearnDevNow!
The most comprehensive online learning library for Microsoft developers
is just $99.99! Visual Studio, SharePoint, SQL - plus HTML5, CSS3, MVC3,
Metro Style Apps, more. Free future releases when you subscribe now!
http://p.sf.net/sfu/learndevnow-d2d
_______________________________________________
Ltp-list mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/ltp-list