many low memory boards don't have 1G memory,so add get_free_mem function
for low memory target,limit 1000M for n32 file system test.

signed-off-by: YanFeng.Shang  <[email protected]>
---
 testcases/kernel/mem/mtest06/mmap2.c |   51 ++++++++++++++++++++++++++-------
 1 files changed, 40 insertions(+), 11 deletions(-)

diff --git a/testcases/kernel/mem/mtest06/mmap2.c 
b/testcases/kernel/mem/mtest06/mmap2.c
index aa9dc33..fdfad05 100644
--- a/testcases/kernel/mem/mtest06/mmap2.c
+++ b/testcases/kernel/mem/mtest06/mmap2.c
@@ -69,13 +69,14 @@
 #include <signal.h>
 #include <sys/time.h>
 #include <sys/wait.h>
+#include <sys/sysinfo.h>
 #include <signal.h>
 #include <string.h>
 #include "test.h"
 #include "usctest.h"
 
 /* Defines                                                                   */
-#define GB 1000000000
+#define MB 1048576 
 #ifndef TRUE
 #define TRUE 1
 #endif
@@ -96,7 +97,7 @@
 /*                                                                            
*/
 
/******************************************************************************/
 static int
-mkfile(int size)               /* size of the file to be generated in GB     */
+mkfile(int size)               /* size of the file to be generated in MB     */
 {
     int  fd;                   /* file descriptior of tmpfile                */
     int  index = 0;            /* index into the file, fill it with a's      */
@@ -118,7 +119,7 @@ mkfile(int size)            /* size of the file to be 
generated in GB     */
     }
 
     /* fill the file with the character a */
-    while (index < (size * GB))
+    while (index < (size * MB))
     {
         index += 4096;
         if (write(fd, buff, 4096) == -1)
@@ -165,6 +166,22 @@ sig_handler(int signal)         /* signal number, set to 
handle SIGALRM       */
     exit(0);
 }
 
+/*******************************************************************************/
+/* Finction get_free_mem
+Description: get the free memory . 
+Return: free memory with M
+/ 
*******************************************************************************/
+unsigned long get_free_mem()
+{
+       struct sysinfo board_sysinfo;
+       unsigned long avail_mem;
+       int error;
+       error = sysinfo(&board_sysinfo);
+       printf("\n\ncode error=%d\n",error);
+       avail_mem = board_sysinfo.freeram/MB;
+       return avail_mem;
+}
+
 
/******************************************************************************//*
                                                                           */
 /* Function:   usage                                                         */
 /*                                                                           */
@@ -180,7 +197,7 @@ usage(char *progname)           /* name of this program     
                  */
               "\t -a set map_flags to MAP_ANONYMOUS\n"
                "\t -h help, usage message.\n"
                "\t -p set map_flag to MAP_PRIVATE.\tdefault: MAP_SHARED\n"
-               "\t -s size of the file/memory to be mmaped.\tdefault: 1GB\n"
+               "\t -s size of the file/memory to be mmaped.\tdefault: 1000MB\n"
                "\t -x time for which test is to be run.\tdefault: 24 Hrs\n",
                     progname);
     exit(-1);
@@ -204,7 +221,7 @@ int main(int argc,      /* number of input parameters.      
              */
      char **argv)          /* pointer to the command line arguments.         */
 {
     int   fd;              /* descriptor of temp file.                       */
-    int   fsize = 1;       /* size of the temp file created. default 1GB     */
+    unsigned long  fsize = 1000;           /* size of the temp file created. 
default 1000MB     */
     float exec_time = 24;    /* period of execution, default 24 hours.       */
     int   c;               /* command line options                           */
     int   sig_ndx;         /* index into signal handler structure.           */
@@ -234,6 +251,13 @@ int main(int argc,     /* number of input parameters.      
              */
                           {-1,     "ENDSIG"}
                   };
 
+       fsize = get_free_mem()/2;
+
+#if __WORDSIZE==32
+       if ( fsize > 1000 )
+               fprintf(stderr, "Using default fsize %ld MB\n", fsize = 1000);
+#endif
+
     while ((c =  getopt(argc, argv, "ahps:x:")) != -1)
     {
         switch(c)
@@ -249,8 +273,13 @@ int main(int argc,     /* number of input parameters.      
              */
                map_flags = MAP_PRIVATE;
                break;
            case 's':
+#if __WORDSIZE==32
+               if ((fsize = atoi(optarg)) == 0 || (fsize = atoi(optarg)) > 
1000 )
+                   fprintf(stderr, "Using default fsize %ld MB\n", fsize = 
1000);
+#else
                if ((fsize = atoi(optarg)) == 0)
-                   fprintf(stderr, "Using default fsize %d GB\n", fsize = 1);
+                       fprintf(stderr,"Using default fsize %ld MB\n", fsize = 
1000);
+#endif
                break;
             case 'x':
                if ((exec_time = atof(optarg)) == 0)
@@ -266,7 +295,7 @@ int main(int argc,      /* number of input parameters.      
              */
 
     fprintf(stdout, "MM Stress test, map/write/unmap large file\n"
                    "\tTest scheduled to run for:       %f\n"
-                   "\tSize of temp file in GB:         %d\n",
+                   "\tSize of temp file in MB:         %ld\n",
                        exec_time, fsize);
 
     /* set up time for which test has to be run */
@@ -308,7 +337,7 @@ int main(int argc,      /* number of input parameters.      
              */
            map_flags = map_flags|MAP_ANONYMOUS;
         }
 
-        if ((memptr = (char *)mmap(0,(fsize * GB), PROT_READ|PROT_WRITE,
+        if ((memptr = (char *)mmap(0,(fsize * MB), PROT_READ|PROT_WRITE,
                     map_flags, fd, 0)) == (char *)-1)
         {
             perror("main(): mmap()");
@@ -319,16 +348,16 @@ int main(int argc,            /* number of input 
parameters.                    */
                            "changing file content to 'A'\n", memptr);
 
         /* Change the content of the file with A's, and commit changes */
-        memset(memptr, 'A', ((fsize * GB)/sizeof(char)));
+        memset(memptr, 'A', ((fsize * MB)/sizeof(char)));
 
-        if (msync(memptr, ((fsize * GB)/sizeof(char)),
+        if (msync(memptr, ((fsize * MB)/sizeof(char)),
                         MS_SYNC|MS_INVALIDATE) == -1)
         {
             perror("main(): msync()");
             exit (-1);
         }
 
-        if (munmap(memptr, (fsize * GB)/sizeof(char)) == -1)
+        if (munmap(memptr, (fsize * MB)/sizeof(char)) == -1)
         {
             perror("main(): munmap()");
             exit (-1);
-- 
1.6.3.1


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