xref: /haiku/src/tests/system/kernel/mlock_test.cpp (revision 0fae96c5a349db3761ac2a4ab4a7fbbf23a3b76c)
1 #include <sys/mman.h>
2 #include <stdio.h>
3 #include <stdlib.h>
4 #include <kernel/OS.h>
5 
6 #define SPACE_SIZE (B_PAGE_SIZE * 9)
7 
8 int
9 main()
10 {
11 	void* space = NULL;
12 	area_id area = create_area("mlock test area", &space, B_EXACT_ADDRESS,
13 		SPACE_SIZE, B_NO_LOCK, B_READ_AREA | B_WRITE_AREA);
14 
15 	/* --------- */
16 	int result = mlock(space + B_PAGE_SIZE, B_PAGE_SIZE * 7);
17 	/* -xxxxxxx- */
18 	assert(result == 0);
19 	result = munlock(space + 2 * B_PAGE_SIZE, B_PAGE_SIZE * 5);
20 	/* -x-----x- */
21 	assert(result == 0);
22 	result = mlock(space + 2 * B_PAGE_SIZE, B_PAGE_SIZE * 3);
23 	/* -xxxx--x- */
24 	assert(result == 0);
25 	result = mlock(space, B_PAGE_SIZE * 9);
26 	/* xxxxxxxxx */
27 	assert(result == 0);
28 	result = munlock(space + 4 * B_PAGE_SIZE, B_PAGE_SIZE * 5);
29 	/* xxxx----- */
30 	assert(result == 0);
31 	result = munlock(space, B_PAGE_SIZE * 9);
32 	assert(result == 0);
33 
34 	delete_area(area);
35 	return 0;
36 }
37