From: Cyril H. <ch...@su...> - 2010-12-03 15:05:11
|
Hi! > - mlock all lines on /proc/self/maps > - show mapping > - munlock all lines on /proc/self/maps > - show again > > Signed-off-by: CAI Qian <ca...@re...> > --- > runtest/mm | 1 + > testcases/kernel/syscalls/mlock/mlock03.c | 106 +++++++++++++++++++++++++++++ > 2 files changed, 107 insertions(+), 0 deletions(-) > create mode 100644 testcases/kernel/syscalls/mlock/mlock03.c > > diff --git a/runtest/mm b/runtest/mm > index 16e60d4..09a339d 100644 > --- a/runtest/mm > +++ b/runtest/mm > @@ -70,3 +70,4 @@ hugemmap05_3 hugemmap05 -s -m > cpuset01 cpuset01 -I 3600 > > mbind01 mbind01 > +mlock01 mlock01 -i 20 Here you are adding mlock01 but the test name below is mlock03. > diff --git a/testcases/kernel/syscalls/mlock/mlock03.c b/testcases/kernel/syscalls/mlock/mlock03.c > new file mode 100644 > index 0000000..7e66053 > --- /dev/null > +++ b/testcases/kernel/syscalls/mlock/mlock03.c > @@ -0,0 +1,106 @@ > +/* > + * Stack size mapping is decreased through mlock/munlock call. > + * > + * - mlock all lines on /proc/self/maps > + * - show mapping > + * - munlock all lines on /proc/self/maps > + * - show again > + * > + * Copyright (C) 2010 Red Hat, Inc. > + * This program is free software; you can redistribute it and/or > + * modify it under the terms of version 2 of the GNU General Public > + * License as published by the Free Software Foundation. > + * > + * This program is distributed in the hope that it would be useful, > + * but WITHOUT ANY WARRANTY; without even the implied warranty of > + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. > + * > + * Further, this software is distributed without any warranty that it > + * is free of the rightful claim of any third person regarding > + * infringement or the like. Any license provided herein, whether > + * implied or otherwise, applies only to this software file. Patent > + * licenses, if any, provided herein do not apply to combinations of > + * this program with other software, or any other product whatsoever. > + * > + * You should have received a copy of the GNU General Public License > + * along with this program; if not, write the Free Software > + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA > + * 02110-1301, USA. > + */ > +#include <stdio.h> > +#include <string.h> > +#include <sys/mman.h> > +#include "test.h" > +#include "usctest.h" > + > +#define KB 1024 > + > +char *TCID = "mlock03"; > +int TST_TOTAL = 1; > +extern int Tst_count; > + > +int main(int argc, char *argv[]) > +{ > + int lc; > + char *msg; > + long from, to, first = -1, last = -1; > + char b[KB], pid[BUFSIZ]; > + FILE *fp; > + > + msg = parse_opts(argc, argv, NULL, NULL); > + if (msg != NULL) > + tst_brkm(TBROK, tst_exit, "OPTION PARSING ERROR - %s", > + msg); > + sprintf(pid, "cat /proc/%d/maps", getpid()); I suppose pid was used for opening maps before changing line below to open("/proc/self/maps", "r") so pid could be removed now. > + for (lc = 0; TEST_LOOPING(lc); lc++) { > + fp = fopen("/proc/self/maps", "r"); > + if (fp == NULL) > + tst_brkm(TBROK|TERRNO, tst_exit, "fopen"); > + > + while (!feof(fp)) { > + if (!fgets(b, KB - 1, fp)) > + break; > + b[strlen(b) - 1] = '\0'; > + sscanf(b, "%lx-%lx", &from, &to); > + > + /* Record the initial stack size. */ > + if ((lc == 0) && (strstr(b, "[stack]") != NULL)) > + first = (to - from)/KB; > + > + switch (lc & 1) { > + case 0: > + if (mlock((const void*)from, > + (to - from)) == -1) > + tst_resm(TINFO|TERRNO, "mlock"); > + break; > + case 1: > + if (munlock((const void*)from, > + (to - from)) == -1) > + tst_resm(TINFO|TERRNO, > + "munlock"); > + break; > + default: > + break; > + } > + tst_resm(TINFO, "%s from %lx to %0lx", > + (lc&1) ? "munlock" : "mlock ", > + from, to); > + > + /* Record the final stack size. */ > + if (strstr(b, "[stack]") != NULL) > + last = (to - from)/KB; > + } > + printf("\n"); > + fclose(fp); > + } > + tst_resm(TINFO, "starting stack size is %ld", first); > + tst_resm(TINFO, "final stack size is %ld", last); > + > + if (last < first) > + tst_resm(TFAIL, "stack size is decreased."); > + else > + tst_resm(TPASS, "stack size is not decreased."); > + > + tst_exit(); > +} Perhaps it would be more consistent to do both mlock() and munlock() for each test iteration. -- Cyril Hrubis ch...@su... |