xref: /aosp_15_r20/external/ltp/testcases/kernel/controllers/memcg/regression/memcg_test_1.c (revision 49cdfc7efb34551c7342be41a7384b9c40d7cab7)
1 // SPDX-License-Identifier: GPL-2.0-or-later
2 // Copyright (c) 2009 FUJITSU LIMITED
3 // Author: Li Zefan <[email protected]>
4 
5 #include <stdio.h>
6 #include <stdlib.h>
7 #include <unistd.h>
8 #include <fcntl.h>
9 #include <sys/mman.h>
10 #include <sys/wait.h>
11 
12 #define MAP_FLAGS		(MAP_PRIVATE|MAP_ANONYMOUS|MAP_LOCKED)
13 
14 #define LOOP			40
15 
16 #define FORKED_PROC_COUNT	10
17 
main(int argc,char * argv[])18 int main(int argc, char *argv[])
19 {
20 	char buf[10];
21 	int i;
22 	int loop;
23 	int pid;
24 	int fd;
25 	int size = getpagesize();
26 
27 	if (argc != 2) {
28 		perror("Invalid num of args");
29 		exit(1);
30 	}
31 
32 	fd = open(argv[1], O_WRONLY);
33 	if (fd < 0) {
34 		perror("Could not open tasklist");
35 		exit(1);
36 	}
37 
38 	for (loop = 0; loop < LOOP; loop++) {
39 		for (i = 0; i < FORKED_PROC_COUNT; i++) {
40 			pid = fork();
41 			if (pid == 0) {
42 				char *p;
43 
44 				sprintf(buf, "%d", getpid());
45 				write(fd, buf, 10);
46 				fsync(fd);
47 
48 				p = mmap(NULL, size, PROT_READ | PROT_WRITE,
49 					 MAP_FLAGS, 0, 0);
50 
51 				if (p == MAP_FAILED) {
52 					perror("mmap failed");
53 					exit(1);
54 				} else
55 					exit(0);
56 			}
57 		}
58 
59 		for (i = 0; i < FORKED_PROC_COUNT; i++)
60 			wait(NULL);
61 	}
62 
63 	close(fd);
64 
65 	return 0;
66 }
67