| 1 | |
| 2 |
|
| 3 | static bool test_mmap_region_basic(void)
|
| 4 | {
|
| 5 | const vma_flags_t vma_flags = mk_vma_flags(VMA_READ_BIT, VMA_WRITE_BIT,
|
| 6 | VMA_MAYREAD_BIT, VMA_MAYWRITE_BIT);
|
| 7 | struct mm_struct mm = {};
|
| 8 | unsigned long addr;
|
| 9 | struct vm_area_struct *vma;
|
| 10 | VMA_ITERATOR(vmi, &mm, 0);
|
| 11 |
|
| 12 | current->mm = &mm;
|
| 13 |
|
| 14 |
|
| 15 | addr = __mmap_region(NULL, 0x300000, 0x3000, vma_flags, 0x300, NULL);
|
| 16 | ASSERT_EQ(addr, 0x300000);
|
| 17 |
|
| 18 |
|
| 19 | addr = __mmap_region(NULL, 0x250000, 0x3000, vma_flags, 0x250, NULL);
|
| 20 | ASSERT_EQ(addr, 0x250000);
|
| 21 |
|
| 22 |
|
| 23 | addr = __mmap_region(NULL, 0x303000, 0x3000, vma_flags, 0x303, NULL);
|
| 24 | ASSERT_EQ(addr, 0x303000);
|
| 25 |
|
| 26 |
|
| 27 | addr = __mmap_region(NULL, 0x24d000, 0x3000, vma_flags, 0x24d, NULL);
|
| 28 | ASSERT_EQ(addr, 0x24d000);
|
| 29 |
|
| 30 | ASSERT_EQ(mm.map_count, 2);
|
| 31 |
|
| 32 | for_each_vma(vmi, vma) {
|
| 33 | if (vma->vm_start == 0x300000) {
|
| 34 | ASSERT_EQ(vma->vm_end, 0x306000);
|
| 35 | ASSERT_EQ(vma->vm_pgoff, 0x300);
|
| 36 | } else if (vma->vm_start == 0x24d000) {
|
| 37 | ASSERT_EQ(vma->vm_end, 0x253000);
|
| 38 | ASSERT_EQ(vma->vm_pgoff, 0x24d);
|
| 39 | } else {
|
| 40 | ASSERT_FALSE(true);
|
| 41 | }
|
| 42 | }
|
| 43 |
|
| 44 | cleanup_mm(&mm, &vmi);
|
| 45 | return true;
|
| 46 | }
|
| 47 |
|
| 48 | static void run_mmap_tests(int *num_tests, int *num_fail)
|
| 49 | {
|
| 50 | TEST(mmap_region_basic);
|
| 51 | }
|