mirror of
https://github.com/usatiuk/ficus.git
synced 2025-10-29 00:27:52 +01:00
PAGE_SIZE
This commit is contained in:
@@ -65,7 +65,7 @@ extern "C" void _start(void) {
|
||||
|
||||
// TODO: Accurate kernel length
|
||||
for (int i = 0; i < 100000; i++) {
|
||||
KERN_AddressSpace->map((void *) (kernel_virt_base + i * 4096), (void *) (kernel_phys_base + i * 4096), PAGE_RW);
|
||||
KERN_AddressSpace->map((void *) (kernel_virt_base + i * PAGE_SIZE), (void *) (kernel_phys_base + i * PAGE_SIZE), PAGE_RW);
|
||||
}
|
||||
|
||||
uint64_t real_new_cr3 = (uint64_t) HHDM_V2P(KERN_AddressSpace_PML4);
|
||||
|
||||
@@ -29,14 +29,14 @@ static Spinlock kmem_lock;
|
||||
|
||||
void init_kern_heap() {
|
||||
KERN_HeapBegin = static_cast<HeapEntry *>(get4k());
|
||||
allocated.fetch_add(4096);
|
||||
allocated.fetch_add(PAGE_SIZE);
|
||||
KERN_HeapBegin->magic = KERN_HeapMagicFree;
|
||||
KERN_HeapBegin->len = 4096 - (sizeof(struct HeapEntry));
|
||||
KERN_HeapBegin->len = PAGE_SIZE - (sizeof(struct HeapEntry));
|
||||
KERN_HeapBegin->next = NULL;
|
||||
KERN_HeapBegin->prev = NULL;
|
||||
KERN_AddressSpace->map((void *) KERN_HeapVirtBegin, (void *) HHDM_V2P(KERN_HeapBegin), PAGE_RW);
|
||||
KERN_HeapBegin = (struct HeapEntry *) KERN_HeapVirtBegin;
|
||||
KERN_HeapEnd = (KERN_HeapVirtBegin + 4096);
|
||||
KERN_HeapEnd = (KERN_HeapVirtBegin + PAGE_SIZE);
|
||||
initialized = true;
|
||||
}
|
||||
|
||||
@@ -45,9 +45,9 @@ static void extend_heap(size_t n_pages) {
|
||||
void *p = get4k();
|
||||
assert2(p != NULL, "Kernel out of memory!");
|
||||
KERN_AddressSpace->map((void *) KERN_HeapEnd, (void *) HHDM_V2P(p), PAGE_RW);
|
||||
KERN_HeapEnd += 4096;
|
||||
KERN_HeapEnd += PAGE_SIZE;
|
||||
}
|
||||
allocated.fetch_add(n_pages * 4096);
|
||||
allocated.fetch_add(n_pages * PAGE_SIZE);
|
||||
}
|
||||
|
||||
// n is required length!
|
||||
@@ -126,7 +126,7 @@ void *kmalloc(size_t n) {
|
||||
KERN_HeapBegin->next = NULL;
|
||||
KERN_HeapBegin->prev = NULL;
|
||||
KERN_HeapBegin->magic = KERN_HeapMagicFree;
|
||||
KERN_HeapBegin->len = 4096 - (sizeof(struct HeapEntry));
|
||||
KERN_HeapBegin->len = PAGE_SIZE - (sizeof(struct HeapEntry));
|
||||
}
|
||||
}
|
||||
break;
|
||||
@@ -168,7 +168,7 @@ void *kmalloc(size_t n) {
|
||||
new_entry->next = NULL;
|
||||
new_entry->prev = entry;
|
||||
new_entry->magic = KERN_HeapMagicFree;
|
||||
new_entry->len = (pages_needed * 4096) - (sizeof(struct HeapEntry));
|
||||
new_entry->len = (pages_needed * PAGE_SIZE) - (sizeof(struct HeapEntry));
|
||||
assert2(new_entry->len >= n, "Expected allocated heap entry to fit what we wanted");
|
||||
res = new_entry;
|
||||
if (new_entry->len > n) {
|
||||
@@ -232,7 +232,7 @@ static struct HeapEntry *try_shrink_heap(struct HeapEntry *entry) {
|
||||
assert(entry->prev == NULL);
|
||||
if ((uint64_t) entry + sizeof(struct HeapEntry) + entry->len == KERN_HeapEnd) {
|
||||
// Shrink it if it's at least three pages
|
||||
if (entry->len + sizeof(struct HeapEntry) < 4096 * 3) {
|
||||
if (entry->len + sizeof(struct HeapEntry) < PAGE_SIZE * 3) {
|
||||
return entry;
|
||||
}
|
||||
|
||||
@@ -261,11 +261,11 @@ static struct HeapEntry *try_shrink_heap(struct HeapEntry *entry) {
|
||||
KERN_HeapEnd = (uintptr_t) entry;
|
||||
uint64_t totallen = entry->len + sizeof(struct HeapEntry);
|
||||
assert(((uint64_t) totallen & 0xFFF) == 0);
|
||||
uint64_t total_pages = totallen / 4096;
|
||||
uint64_t total_pages = totallen / PAGE_SIZE;
|
||||
for (uint64_t i = 0; i < total_pages; i++) {
|
||||
free4k((void *) HHDM_P2V(KERN_AddressSpace->virt2real((void *) (KERN_HeapEnd + 4096 * i))));
|
||||
allocated.fetch_sub(4096);
|
||||
KERN_AddressSpace->unmap((void *) (KERN_HeapEnd + 4096 * i));
|
||||
free4k((void *) HHDM_P2V(KERN_AddressSpace->virt2real((void *) (KERN_HeapEnd + PAGE_SIZE * i))));
|
||||
allocated.fetch_sub(PAGE_SIZE);
|
||||
KERN_AddressSpace->unmap((void *) (KERN_HeapEnd + PAGE_SIZE * i));
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -39,7 +39,7 @@ void limine_fb_remap(AddressSpace *space) {
|
||||
void *realbase = framebufferAddrs[i].base;
|
||||
// TODO: Proper map
|
||||
for (int i = 0; i < 100000; i++) {
|
||||
space->map(base + i * 4096, realbase + i * 4096, PAGE_RW);
|
||||
space->map(base + i * PAGE_SIZE, realbase + i * PAGE_SIZE, PAGE_RW);
|
||||
}
|
||||
}
|
||||
_tlb_flush();
|
||||
|
||||
@@ -169,7 +169,7 @@ void limine_kern_save_response() {
|
||||
}
|
||||
|
||||
#define EARLY_PAGES_SIZE ((HHDM_SIZE + 1) * 2)
|
||||
static uint64_t early_pages[EARLY_PAGES_SIZE][512] __attribute__((aligned(4096)));
|
||||
static uint64_t early_pages[EARLY_PAGES_SIZE][512] __attribute__((aligned(PAGE_SIZE)));
|
||||
static uint64_t early_pages_used = 0;
|
||||
|
||||
uintptr_t kernel_phys_base;
|
||||
|
||||
@@ -29,6 +29,8 @@ extern uintptr_t kernel_phys_base;
|
||||
extern uintptr_t kernel_virt_base;
|
||||
void limine_kern_save_response();
|
||||
|
||||
#define PAGE_SIZE 4096
|
||||
|
||||
#define KERN_V2P(a) ((((uintptr_t) (a) + kernel_phys_base) & ~kernel_virt_base))
|
||||
#define KERN_P2V(a) ((((uintptr_t) (a) -kernel_phys_base) | kernel_virt_base))
|
||||
|
||||
|
||||
Reference in New Issue
Block a user