add function get_swap_mem() to check swap size,if no swap used,
using all free mem for mmap.

Signed-off-by: Shang Yanfeng <[email protected]>
---
 testcases/kernel/mem/mmapstress/mmapstress06.c |  110 +++++++++++++++---------
 1 files changed, 68 insertions(+), 42 deletions(-)

diff --git a/testcases/kernel/mem/mmapstress/mmapstress06.c 
b/testcases/kernel/mem/mmapstress/mmapstress06.c
index 9ef4dbd..ef11bc3 100644
--- a/testcases/kernel/mem/mmapstress/mmapstress06.c
+++ b/testcases/kernel/mem/mmapstress/mmapstress06.c
@@ -31,9 +31,11 @@
 #define _KMEMUSER
 #include <sys/types.h>
 #include <sys/mman.h>
+#include <sys/sysinfo.h>
 #include <unistd.h>
 #include <stdio.h>
 #include <errno.h>
+#include <time.h>
 
 /*****  LTP Port        *****/
 #include "test.h"
@@ -42,76 +44,100 @@
 #define PASSED 1
 
 int local_flag = PASSED;
-char *TCID = "mmapstress06"; //mfile_swap
+char *TCID = "mmapstress06"; /* mfile_swap */
 FILE *temp;
 int TST_TOTAL = 1;
 
-int anyfail();
-void ok_exit();
-/***** **      **      *****/
-
 #define ANON_GRAN_PAGES_MAX    (32U)
-
-extern time_t  time(time_t *);
-extern char    *ctime(const time_t *);
-extern int atoi(const char *);
-
 #define NMFPTEPG               (1024)
 #define ERROR(M)       (void)fprintf(stderr, "%s: errno = %d; " M "\n", \
                                argv[0], errno);
+void ok_exit()
+{
+       tst_resm(TPASS, "Test passed\n");
+       tst_exit();
+}
+
+int anyfail()
+{
+  tst_resm(TFAIL, "Test failed\n");
+  tst_exit();
+       return 0;
+}
 
-int
-main(int argc, char *argv[]) {
+unsigned long get_free_mem()
+{
+       struct sysinfo board_sysinfo;
+       unsigned long avail_mem;
+       if (sysinfo(&board_sysinfo))
+               perror("sysinfo failed\n");
+       avail_mem = board_sysinfo.freeram;
+       return avail_mem;
+}
+
+unsigned long get_swap_mem()
+{
+       struct sysinfo board_sysinfo;
+       unsigned long totalswap;
+       if (sysinfo(&board_sysinfo))
+               perror("sysinfo failed\n");
+       totalswap = board_sysinfo.totalswap;
+       return totalswap;
+}
+
+int main(int argc, char *argv[])
+{
        caddr_t mmapaddr;
        size_t  pagesize = sysconf(_SC_PAGE_SIZE);
        time_t  t;
-       int     sleep_time=0;
+       int     sleep_time = 0;
 
        if (!argc) {
                (void)fprintf(stderr, "argc == 0\n");
                anyfail();
        }
-       if (argc != 2 || !(sleep_time = atoi(argv[1]))) {
+       sleep_time = atoi(argv[1]);
+       if (argc != 2 || !(sleep_time)) {
                (void)fprintf(stderr, "usage: %s sleep_time\n", argv[0]);
                anyfail();
        }
        (void)time(&t);
-//     (void)printf("%s: Started %s", argv[0], ctime(&t));  LTP Port
+/* (void)printf("%s: Started %s", argv[0], ctime(&t));  LTP Port */
        if (sbrk(pagesize - ((ulong)sbrk(0) & (pagesize-1))) == (char *)-1) {
                ERROR("couldn't round up brk");
-                anyfail();
+               anyfail();
        }
-       if ((mmapaddr = sbrk(0)) == (char *)-1) {
+       mmapaddr = sbrk(0);
+       if (mmapaddr == (char *)-1) {
                ERROR("couldn't find top of brk");
-                anyfail();
+               anyfail();
        }
-       /* mmapaddr is now on a page boundary after the brk segment */
-       if (mmap(mmapaddr, (ANON_GRAN_PAGES_MAX*NMFPTEPG+1)*pagesize, 
PROT_READ|PROT_WRITE,MAP_ANONYMOUS|MAP_SHARED, 0, 0)==(caddr_t)-1)
-       {
-               ERROR("large mmap failed");
-               printf ("for this test to run, it needs a mmap space of\n");
-               printf ("%d pages\n", (ANON_GRAN_PAGES_MAX*NMFPTEPG+1));
-               return 1;
+/* mmapaddr is now on a page boundary after the brk segment */
+       if (get_swap_mem()) {
+               if (mmap(mmapaddr, (ANON_GRAN_PAGES_MAX*NMFPTEPG+1)*pagesize,
+                       PROT_READ|PROT_WRITE, MAP_ANONYMOUS|MAP_SHARED,
+                       0, 0) == (caddr_t)-1) {
+                       ERROR("large mmap failed");
+                       printf("for this test to run,"
+                               "it needs a mmap space of\n");
+                       printf("%d pages\n", (ANON_GRAN_PAGES_MAX*NMFPTEPG+1));
+                       return 1;
+               }
+       } else {
+               if (mmap(mmapaddr, get_free_mem(),
+                               PROT_READ|PROT_WRITE, MAP_ANONYMOUS|MAP_SHARED,
+                               0, 0) == (caddr_t)-1) {
+                       ERROR("large mmap failed");
+                       printf("for this test to run,"
+                               "it needs a mmap space of\n");
+                       printf("%ld K memory\n", get_free_mem());
+                       return 1;
+               }
        }
+
        (void)sleep(sleep_time);
        (void)time(&t);
-//     (void)printf("%s: Finished %s", argv[0], ctime(&t)); LTP Port
+/* (void)printf("%s: Finished %s", argv[0], ctime(&t)); LTP Porti */
        ok_exit();
        tst_exit();
 }
-
-/***** LTP Port        *****/
-void ok_exit()
-{
-        tst_resm(TPASS, "Test passed\n");
-       tst_exit();
-}
-
-int anyfail()
-{
-  tst_resm(TFAIL, "Test failed\n");
-  tst_exit();
-        return 0;
-}
-
-/***** **      **      *****/
\ No newline at end of file
-- 
1.6.3.1


------------------------------------------------------------------------------
Try before you buy = See our experts in action!
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-dev2
_______________________________________________
Ltp-list mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/ltp-list

Reply via email to