| 58 | } |
| 59 | |
| 60 | BAN::ErrorOr<void> VirtualRange::initialize() |
| 61 | { |
| 62 | const size_t page_count = size() / PAGE_SIZE; |
| 63 | for (size_t i = 0; i < page_count; i++) |
| 64 | { |
| 65 | const auto paddr = Heap::get().take_free_page(); |
| 66 | if (paddr == 0) |
| 67 | return BAN::Error::from_errno(ENOMEM); |
| 68 | PageTable::with_fast_page(paddr, [] { |
| 69 | memset(PageTable::fast_page_as_ptr(), 0, PAGE_SIZE); |
| 70 | }); |
| 71 | m_page_table.map_page_at(paddr, vaddr() + i * PAGE_SIZE, m_flags, PageTable::MemoryType::Normal, false); |
| 72 | } |
| 73 | m_page_table.invalidate_range(m_vaddr, page_count, true); |
| 74 | return {}; |
| 75 | } |
| 76 | |
| 77 | } |
no test coverage detected