On 02/07/2012 10:20 AM, Wanlong Gao wrote:
> Auto mount the temporary directory for testing:
> 1. auto mount can reduce bugs
> 2. add a option to change the default hugepages to be allocated
> 
> Signed-off-by: Wanlong Gao <[email protected]>
> ---
>  runtest/hugetlb                                    |    2 +-
>  testcases/kernel/mem/hugetlb/hugemmap/Makefile     |   11 +++++
>  testcases/kernel/mem/hugetlb/hugemmap/hugemmap01.c |   47 
> ++++++++++++--------
>  3 files changed, 40 insertions(+), 20 deletions(-)
> 
> diff --git a/runtest/hugetlb b/runtest/hugetlb
> index a316043..2cbd410 100644
> --- a/runtest/hugetlb
> +++ b/runtest/hugetlb
> @@ -1,4 +1,4 @@
> -hugemmap01 hugemmap01 -H/tmp
> +hugemmap01 hugemmap01
>  hugemmap02 hugemmap02 -H/tmp -c10
>  hugemmap03 hugemmap03 -H/tmp -I2 -c10
>  hugemmap04 hugemmap04 -H/tmp
> diff --git a/testcases/kernel/mem/hugetlb/hugemmap/Makefile 
> b/testcases/kernel/mem/hugetlb/hugemmap/Makefile
> index a1ba46e..ce9c571 100644
> --- a/testcases/kernel/mem/hugetlb/hugemmap/Makefile
> +++ b/testcases/kernel/mem/hugetlb/hugemmap/Makefile
> @@ -24,4 +24,15 @@ top_srcdir              ?= ../../../../..
>  
>  include $(top_srcdir)/include/mk/testcases.mk
>  include $(abs_srcdir)/../Makefile.inc
> +
> +LIBMEMDIR            := ../../lib
> +LIBMEM                       := $(LIBMEMDIR)/libmem.a
> +$(LIBMEM):
> +     $(MAKE) -C "$^" -f "$(abs_srcdir)/$^/Makefile" all
> +
> +CPPFLAGS             += -I$(abs_srcdir)/$(LIBMEMDIR)
> +LDFLAGS                      += -L$(abs_builddir)/$(LIBMEMDIR)
> +LDLIBS                       += -lmem
> +MAKE_DEPS            += $(LIBMEM)
> +
>  include $(top_srcdir)/include/mk/generic_leaf_target.mk
> diff --git a/testcases/kernel/mem/hugetlb/hugemmap/hugemmap01.c 
> b/testcases/kernel/mem/hugetlb/hugemmap/hugemmap01.c
> index 35da0a4..1eeebf4 100644
> --- a/testcases/kernel/mem/hugetlb/hugemmap/hugemmap01.c
> +++ b/testcases/kernel/mem/hugetlb/hugemmap/hugemmap01.c
> @@ -57,24 +57,26 @@
>  #include <sys/stat.h>
>  #include <sys/mman.h>
>  #include <sys/types.h>
> +#include <sys/mount.h>
>  
>  #include "test.h"
>  #include "usctest.h"
>  #include "system_specific_hugepages_info.h"
> +#include "../../include/mem.h"
>  
> -static char *TEMPFILE = "mmapfile";
> +static char TEMPFILE[MAXPATHLEN];
>  
>  char *TCID = "hugemmap01";
>  int TST_TOTAL = 1;
>  static long *addr;
>  static int fildes;
>  static char *Hopt;
> +static char *nr_opt;
>  static int beforetest;
>  static int aftertest;
>  static int hugepagesmapped;
> +static long hugepages = 1024;

Hmmm, I prefer to use something like #define DEFAULT_HUGE_NR 10 (maybe
in include/mem.h), instead of a number here.

>  
> -static void setup(void);
> -static void cleanup(void);
>  static void help(void);
>  
>  int main(int ac, char **av)
> @@ -83,9 +85,11 @@ int main(int ac, char **av)
>       char *msg;
>       int Hflag = 0;
>       int page_sz = 0;
> +     int sflag = 0;
>  
>       option_t options[] = {
> -             { "H:",   &Hflag, &Hopt },
> +             { "H:", &Hflag, &Hopt },
> +             { "s:", &sflag, &nr_opt },
>               { NULL, NULL, NULL }
>       };
>  
> @@ -94,9 +98,13 @@ int main(int ac, char **av)
>               tst_brkm(TBROK, NULL, "OPTION PARSING ERROR - %s,"
>                        "use -help", msg);
>  
> -     if (!Hflag)
> -             tst_brkm(TBROK, NULL, "-H option is REQUIRED for this test, "
> -                      "use -h for options help");
> +     if (!Hflag) {
> +             tst_tmpdir();
> +             Hopt = get_tst_tmpdir();
> +     }
> +
> +     if (sflag)
> +             hugepages = strtol(nr_opt, NULL, 10);

I think we need some error check mechanism here.

(@Cyril: Looks like we need a strtol wrapper in LTP lib? we have several
examples before, like:

    val = strtol(str, &endptr, 10);
    if (((val == LONG_MAX || val == LONG_MIN) && errno == ERANGE) ||
            (errno != 0 && val == 0))
        tst_brkm(TBROK|TERRNO, cleanup, "strtol");
    if (endptr == str || *endptr != '\0')
        tst_brkm(TBROK, cleanup, "Invalid number parameter: %s", str);

>  
>       setup();
>  
> @@ -150,29 +158,30 @@ int main(int ac, char **av)
>       tst_exit();
>  }
>  
> -static void setup(void)
> +void setup(void)
>  {
> -     char mypid[40];
> -
> -     sprintf(mypid, "/%d", getpid());
> -     TEMPFILE = strcat(mypid, TEMPFILE);
> -     TEMPFILE = strcat(Hopt, TEMPFILE);
> -
> -     tst_sig(FORK, DEF_HANDLER, cleanup);
> -
> -     TEST_PAUSE;

better to keep TEST_PAUSE;

> -
> +     tst_require_root(NULL);
> +     if (mount("none", Hopt, "hugetlbfs", 0, NULL) < 0)
> +             tst_brkm(TBROK|TERRNO, NULL,
> +                      "mount failed on %s", Hopt);
> +
> +     set_sys_tune("nr_hugepages", hugepages, 1);
> +     snprintf(TEMPFILE, sizeof(TEMPFILE), "%s/mmapfile%d",
> +              Hopt, getpid());
>  }
>  
> -static void cleanup(void)
> +void cleanup(void)
>  {
>       TEST_CLEANUP;
>  
>       unlink(TEMPFILE);
>  
> +     umount(Hopt);
> +     tst_rmdir();
>  }
>  
>  static void help(void)
>  {
>       printf("    -H /..  Location of hugetlbfs, i.e. -H /var/hugetlbfs\n");
> +     printf("    -s num  Set the number of the been allocated hugepages\n");
>  }


------------------------------------------------------------------------------
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

Reply via email to