* Private unmapping of address space */
| 119 | * Private unmapping of address space |
| 120 | */ |
| 121 | static void _pgmgr_pop_all(rt_varea_t varea) |
| 122 | { |
| 123 | rt_aspace_t aspace = varea->aspace; |
| 124 | char *iter = varea->start; |
| 125 | char *end_addr = iter + varea->size; |
| 126 | |
| 127 | RT_ASSERT(iter < end_addr); |
| 128 | RT_ASSERT(!((long)iter & ARCH_PAGE_MASK)); |
| 129 | RT_ASSERT(!((long)end_addr & ARCH_PAGE_MASK)); |
| 130 | |
| 131 | for (; iter != end_addr; iter += ARCH_PAGE_SIZE) |
| 132 | { |
| 133 | void *page_pa = rt_hw_mmu_v2p(aspace, iter); |
| 134 | char *page_va = rt_kmem_p2v(page_pa); |
| 135 | if (page_pa != ARCH_MAP_FAILED && page_va) |
| 136 | { |
| 137 | rt_varea_unmap_page(varea, iter); |
| 138 | rt_pages_free(page_va, 0); |
| 139 | } |
| 140 | } |
| 141 | } |
| 142 | |
| 143 | static void _pgmgr_pop_range(rt_varea_t varea, void *rm_start, void *rm_end) |
| 144 | { |
no test coverage detected