Use memory region map to discover the memory
This commit is contained in:
@@ -77,10 +77,8 @@ void mm_map_page(struct page_dir *pd, uptr_t vaddr, uptr_t paddr, uint32_t flags
|
||||
if (!(pd->pd[pd_idx] & PF_PRESENT)) {
|
||||
pt = (volatile uint32_t *)bba_alloc();
|
||||
if (pt == 0) {
|
||||
if (flags & PF_LOCK)
|
||||
sl_unlock(&pd->sl);
|
||||
dbgf("mm_map_page(): run out of BBA memory to alloc a PD\n");
|
||||
return;
|
||||
goto done;
|
||||
}
|
||||
|
||||
for (usize_t i = 0; i < PAGE_SIZE/sizeof(uint32_t); i++)
|
||||
@@ -94,6 +92,7 @@ void mm_map_page(struct page_dir *pd, uptr_t vaddr, uptr_t paddr, uint32_t flags
|
||||
|
||||
pt[pt_idx] = (paddr & ~(PAGE_SIZE - 1)) | (flags & ~PF_LOCK);
|
||||
|
||||
done:
|
||||
if (flags & PF_LOCK)
|
||||
sl_unlock(&pd->sl);
|
||||
}
|
||||
@@ -107,9 +106,7 @@ void mm_unmap_page(struct page_dir *pd, uptr_t vaddr, uint32_t flags) {
|
||||
volatile uint32_t *pt;
|
||||
|
||||
if (!(pd->pd[pd_idx] & PF_PRESENT)) {
|
||||
if (flags & PF_LOCK)
|
||||
sl_unlock(&pd->sl);
|
||||
return;
|
||||
goto done;
|
||||
} else {
|
||||
uptr_t pt_phys = pd->pd[pd_idx] & ~(PAGE_SIZE - 1);
|
||||
pt = (volatile uint32_t *)(pt_phys + VIRT_BASE);
|
||||
@@ -119,6 +116,7 @@ void mm_unmap_page(struct page_dir *pd, uptr_t vaddr, uint32_t flags) {
|
||||
|
||||
__asm__ volatile ("invlpg (%0)" :: "r"(vaddr) : "memory");
|
||||
|
||||
done:
|
||||
if (flags & PF_LOCK)
|
||||
sl_unlock(&pd->sl);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user