18445709ba82f1e90bde58aa07128ac5048ea0daerobbiew/* IBM Corporation */ 28445709ba82f1e90bde58aa07128ac5048ea0daerobbiew/* 01/02/2003 Port to LTP avenkat@us.ibm.com */ 38445709ba82f1e90bde58aa07128ac5048ea0daerobbiew/* 06/30/2001 Port to Linux nsharoff@us.ibm.com */ 48445709ba82f1e90bde58aa07128ac5048ea0daerobbiew/* 58445709ba82f1e90bde58aa07128ac5048ea0daerobbiew * Copyright (c) International Business Machines Corp., 2003 68445709ba82f1e90bde58aa07128ac5048ea0daerobbiew * 78445709ba82f1e90bde58aa07128ac5048ea0daerobbiew * 88445709ba82f1e90bde58aa07128ac5048ea0daerobbiew * This program is free software; you can redistribute it and/or modify 98445709ba82f1e90bde58aa07128ac5048ea0daerobbiew * it under the terms of the GNU General Public License as published by 108445709ba82f1e90bde58aa07128ac5048ea0daerobbiew * the Free Software Foundation; either version 2 of the License, or 118445709ba82f1e90bde58aa07128ac5048ea0daerobbiew * (at your option) any later version. 128445709ba82f1e90bde58aa07128ac5048ea0daerobbiew * 138445709ba82f1e90bde58aa07128ac5048ea0daerobbiew * This program is distributed in the hope that it will be useful, 148445709ba82f1e90bde58aa07128ac5048ea0daerobbiew * but WITHOUT ANY WARRANTY; without even the implied warranty of 158445709ba82f1e90bde58aa07128ac5048ea0daerobbiew * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See 168445709ba82f1e90bde58aa07128ac5048ea0daerobbiew * the GNU General Public License for more details. 178445709ba82f1e90bde58aa07128ac5048ea0daerobbiew * 188445709ba82f1e90bde58aa07128ac5048ea0daerobbiew * You should have received a copy of the GNU General Public License 198445709ba82f1e90bde58aa07128ac5048ea0daerobbiew * along with this program; if not, write to the Free Software 204548c6cf9bcdd96d8303caa4130ab638b61f8a30Wanlong Gao * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 218445709ba82f1e90bde58aa07128ac5048ea0daerobbiew */ 228445709ba82f1e90bde58aa07128ac5048ea0daerobbiew 238445709ba82f1e90bde58aa07128ac5048ea0daerobbiew/* 248445709ba82f1e90bde58aa07128ac5048ea0daerobbiew * mfile_swap: 258445709ba82f1e90bde58aa07128ac5048ea0daerobbiew * Mmap a large (> ANON_GRAN_PAGES_MAX) shared, anonymous region before 268445709ba82f1e90bde58aa07128ac5048ea0daerobbiew * swapping to use the second half of the kernel primitive mfile_swap. 278445709ba82f1e90bde58aa07128ac5048ea0daerobbiew * However, this test does _NOT_ cause swapping to occur. Instead it should be 288445709ba82f1e90bde58aa07128ac5048ea0daerobbiew * run with waves or at the same time as a test which does cause swapping (i.e. 298445709ba82f1e90bde58aa07128ac5048ea0daerobbiew * vsswapin or vfork_swap) 308445709ba82f1e90bde58aa07128ac5048ea0daerobbiew */ 318445709ba82f1e90bde58aa07128ac5048ea0daerobbiew#define _KMEMUSER 328445709ba82f1e90bde58aa07128ac5048ea0daerobbiew#include <sys/types.h> 338445709ba82f1e90bde58aa07128ac5048ea0daerobbiew#include <sys/mman.h> 348445709ba82f1e90bde58aa07128ac5048ea0daerobbiew#include <unistd.h> 358445709ba82f1e90bde58aa07128ac5048ea0daerobbiew#include <stdio.h> 368445709ba82f1e90bde58aa07128ac5048ea0daerobbiew#include <errno.h> 378445709ba82f1e90bde58aa07128ac5048ea0daerobbiew 388445709ba82f1e90bde58aa07128ac5048ea0daerobbiew/***** LTP Port *****/ 398445709ba82f1e90bde58aa07128ac5048ea0daerobbiew#include "test.h" 408445709ba82f1e90bde58aa07128ac5048ea0daerobbiew#define FAILED 0 418445709ba82f1e90bde58aa07128ac5048ea0daerobbiew#define PASSED 1 428445709ba82f1e90bde58aa07128ac5048ea0daerobbiew 438445709ba82f1e90bde58aa07128ac5048ea0daerobbiewint local_flag = PASSED; 44354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gaochar *TCID = "mmapstress06"; //mfile_swap 458445709ba82f1e90bde58aa07128ac5048ea0daerobbiewFILE *temp; 468445709ba82f1e90bde58aa07128ac5048ea0daerobbiewint TST_TOTAL = 1; 478445709ba82f1e90bde58aa07128ac5048ea0daerobbiew 488445709ba82f1e90bde58aa07128ac5048ea0daerobbiewint anyfail(); 498445709ba82f1e90bde58aa07128ac5048ea0daerobbiewvoid ok_exit(); 508445709ba82f1e90bde58aa07128ac5048ea0daerobbiew/***** ** ** *****/ 518445709ba82f1e90bde58aa07128ac5048ea0daerobbiew 528445709ba82f1e90bde58aa07128ac5048ea0daerobbiew#define ANON_GRAN_PAGES_MAX (32U) 538445709ba82f1e90bde58aa07128ac5048ea0daerobbiew 54354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gaoextern time_t time(time_t *); 55354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gaoextern char *ctime(const time_t *); 568445709ba82f1e90bde58aa07128ac5048ea0daerobbiewextern int atoi(const char *); 578445709ba82f1e90bde58aa07128ac5048ea0daerobbiew 588445709ba82f1e90bde58aa07128ac5048ea0daerobbiew#define NMFPTEPG (1024) 598445709ba82f1e90bde58aa07128ac5048ea0daerobbiew#define ERROR(M) (void)fprintf(stderr, "%s: errno = %d; " M "\n", \ 608445709ba82f1e90bde58aa07128ac5048ea0daerobbiew argv[0], errno); 618445709ba82f1e90bde58aa07128ac5048ea0daerobbiew 62354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gaoint main(int argc, char *argv[]) 63354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao{ 64354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao caddr_t mmapaddr; 65354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao size_t pagesize = sysconf(_SC_PAGE_SIZE); 66354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao time_t t; 67354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao int sleep_time = 0; 688445709ba82f1e90bde58aa07128ac5048ea0daerobbiew 698445709ba82f1e90bde58aa07128ac5048ea0daerobbiew if (!argc) { 708445709ba82f1e90bde58aa07128ac5048ea0daerobbiew (void)fprintf(stderr, "argc == 0\n"); 718445709ba82f1e90bde58aa07128ac5048ea0daerobbiew anyfail(); 728445709ba82f1e90bde58aa07128ac5048ea0daerobbiew } 738445709ba82f1e90bde58aa07128ac5048ea0daerobbiew if (argc != 2 || !(sleep_time = atoi(argv[1]))) { 748445709ba82f1e90bde58aa07128ac5048ea0daerobbiew (void)fprintf(stderr, "usage: %s sleep_time\n", argv[0]); 758445709ba82f1e90bde58aa07128ac5048ea0daerobbiew anyfail(); 768445709ba82f1e90bde58aa07128ac5048ea0daerobbiew } 778445709ba82f1e90bde58aa07128ac5048ea0daerobbiew (void)time(&t); 78354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao// (void)printf("%s: Started %s", argv[0], ctime(&t)); LTP Port 79354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao if (sbrk(pagesize - ((ulong) sbrk(0) & (pagesize - 1))) == (char *)-1) { 808445709ba82f1e90bde58aa07128ac5048ea0daerobbiew ERROR("couldn't round up brk"); 81354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao anyfail(); 828445709ba82f1e90bde58aa07128ac5048ea0daerobbiew } 838445709ba82f1e90bde58aa07128ac5048ea0daerobbiew if ((mmapaddr = sbrk(0)) == (char *)-1) { 848445709ba82f1e90bde58aa07128ac5048ea0daerobbiew ERROR("couldn't find top of brk"); 85354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao anyfail(); 868445709ba82f1e90bde58aa07128ac5048ea0daerobbiew } 878445709ba82f1e90bde58aa07128ac5048ea0daerobbiew /* mmapaddr is now on a page boundary after the brk segment */ 88354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao if (mmap 89354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao (mmapaddr, (ANON_GRAN_PAGES_MAX * NMFPTEPG + 1) * pagesize, 90354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao PROT_READ | PROT_WRITE, MAP_ANONYMOUS | MAP_SHARED, 0, 91354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao 0) == (caddr_t) - 1) { 928445709ba82f1e90bde58aa07128ac5048ea0daerobbiew ERROR("large mmap failed"); 93354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao printf("for this test to run, it needs a mmap space of\n"); 94354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao printf("%d pages\n", (ANON_GRAN_PAGES_MAX * NMFPTEPG + 1)); 958445709ba82f1e90bde58aa07128ac5048ea0daerobbiew return 1; 968445709ba82f1e90bde58aa07128ac5048ea0daerobbiew } 978445709ba82f1e90bde58aa07128ac5048ea0daerobbiew (void)sleep(sleep_time); 988445709ba82f1e90bde58aa07128ac5048ea0daerobbiew (void)time(&t); 99354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao// (void)printf("%s: Finished %s", argv[0], ctime(&t)); LTP Port 1008445709ba82f1e90bde58aa07128ac5048ea0daerobbiew ok_exit(); 1012c28215423293e443469a07ae7011135d058b671Garrett Cooper tst_exit(); 1028445709ba82f1e90bde58aa07128ac5048ea0daerobbiew} 1038445709ba82f1e90bde58aa07128ac5048ea0daerobbiew 1048445709ba82f1e90bde58aa07128ac5048ea0daerobbiew/***** LTP Port *****/ 105829ac9d177bb1c713f1fe4266bdc44792b8c556dMike Frysingervoid ok_exit(void) 1068445709ba82f1e90bde58aa07128ac5048ea0daerobbiew{ 107354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao tst_resm(TPASS, "Test passed\n"); 1088445709ba82f1e90bde58aa07128ac5048ea0daerobbiew tst_exit(); 1098445709ba82f1e90bde58aa07128ac5048ea0daerobbiew} 1108445709ba82f1e90bde58aa07128ac5048ea0daerobbiew 111829ac9d177bb1c713f1fe4266bdc44792b8c556dMike Frysingerint anyfail(void) 1128445709ba82f1e90bde58aa07128ac5048ea0daerobbiew{ 113526fdf8d8ea3b43b73de7cc25eb754f12702c8d2Cyril Hrubis tst_brkm(TFAIL, NULL, "Test failed\n"); 1148445709ba82f1e90bde58aa07128ac5048ea0daerobbiew} 1158445709ba82f1e90bde58aa07128ac5048ea0daerobbiew 116ec6edca7aa42b6affd989ef91b5897f96795e40fChris Dearman/***** ** ** *****/ 117