Draft: lab 5 failed
This commit is contained in:
@@ -66,7 +66,7 @@ void _pull(int idx, size_t sz)
|
||||
CUR->size = 0;
|
||||
break;
|
||||
default:
|
||||
exit(ERR_UNREACHABLE);
|
||||
panic(ERR_UNREACHABLE);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -96,6 +96,7 @@ void mman_init()
|
||||
(void *)ntoh64(entry->address) + ntoh64(entry->size));
|
||||
}
|
||||
|
||||
reserve_page((void *)0x00000000, (void *)0x00001000);
|
||||
reserve_page(&__kernel_start, &__kernel_end);
|
||||
reserve_page(&__heap_start, &__stack_end);
|
||||
reserve_page(dtb_start, dtb_end);
|
||||
@@ -132,7 +133,7 @@ uint64_t _allocate_page(size_t req, int idx, uint64_t l, uint64_t r)
|
||||
case PAGE_RESERVED:
|
||||
return MMAN_NO_PAGE;
|
||||
default:
|
||||
exit(ERR_UNREACHABLE);
|
||||
panic(ERR_UNREACHABLE);
|
||||
}
|
||||
|
||||
uint64_t ret = MMAN_NO_PAGE;
|
||||
@@ -162,12 +163,12 @@ uint64_t _allocate_page(size_t req, int idx, uint64_t l, uint64_t r)
|
||||
void *allocate_page(size_t page_cnt)
|
||||
{
|
||||
if (msb64(page_cnt) != page_cnt)
|
||||
exit(ERR_INVALID_OP);
|
||||
panic(ERR_INVALID_OP);
|
||||
|
||||
uint64_t offset = _allocate_page(page_cnt, 0, 0, mman_page_cnt);
|
||||
|
||||
if (offset == MMAN_NO_PAGE)
|
||||
exit(ERR_NO_MEM);
|
||||
panic(ERR_NO_MEM);
|
||||
// return (void *)0x0;
|
||||
|
||||
return mman_memory_start + offset * (1 << 12);
|
||||
@@ -192,7 +193,7 @@ void _free_page(uint64_t req, int idx, uint64_t l, uint64_t r)
|
||||
break;
|
||||
case PAGE_RESERVED:
|
||||
default:
|
||||
exit(ERR_UNREACHABLE);
|
||||
panic(ERR_UNREACHABLE);
|
||||
}
|
||||
|
||||
uint64_t m = l + ((msb64(sz) == sz) ? (sz >> 1) : msb64(sz));
|
||||
@@ -206,7 +207,7 @@ void _free_page(uint64_t req, int idx, uint64_t l, uint64_t r)
|
||||
void free_page(void *page)
|
||||
{
|
||||
if (ALIGN4K(page) != page)
|
||||
exit(ERR_INVALID_OP);
|
||||
panic(ERR_INVALID_OP);
|
||||
|
||||
uint64_t start = ((uint64_t)page - (uint64_t)mman_memory_start) >> 12;
|
||||
_free_page(start, 0, 0, mman_page_cnt);
|
||||
@@ -223,7 +224,7 @@ void _reserve_page(uint64_t ql, uint64_t qr, int idx, uint64_t l, uint64_t r)
|
||||
if (CUR->state == PAGE_RESERVED)
|
||||
return;
|
||||
if (CUR->state != PAGE_FREE)
|
||||
exit(ERR_INVALID_MEM);
|
||||
panic(ERR_INVALID_MEM);
|
||||
|
||||
LOG("page reserved"); LOG(l); DEBUG_MEM(r);
|
||||
CUR->state = PAGE_RESERVED;
|
||||
|
||||
Reference in New Issue
Block a user