Draft: lab 5 failed

This commit is contained in:
2025-05-03 20:45:34 +08:00
parent 981cae803b
commit e73f90395d
39 changed files with 588 additions and 429 deletions

View File

@@ -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;