From 8a7653bcfadc48e400ad7c6b1346a6c6d7f73deb Mon Sep 17 00:00:00 2001 From: Freya Murphy Date: Thu, 1 May 2025 20:19:38 -0400 Subject: ramdisk --- config/grub.cfg | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'config') diff --git a/config/grub.cfg b/config/grub.cfg index 62c9792..b4e395d 100644 --- a/config/grub.cfg +++ b/config/grub.cfg @@ -1,8 +1,9 @@ set timeout=1 set default=0 insmod all_video +insmod normal menuentry "kern" { multiboot2 /boot/kernel - boot + module2 /boot/initrd.tar } -- cgit v1.2.3-freya From d5a0abc2fe0ab570ab9e0de9607fec1e951cb933 Mon Sep 17 00:00:00 2001 From: Freya Murphy Date: Fri, 2 May 2025 12:37:40 -0400 Subject: temp badness --- config/grub.cfg | 2 +- kernel/lib/kalloc.c | 44 ++++++++++++++++++++++++++------------------ 2 files changed, 27 insertions(+), 19 deletions(-) (limited to 'config') diff --git a/config/grub.cfg b/config/grub.cfg index b4e395d..82c5db7 100644 --- a/config/grub.cfg +++ b/config/grub.cfg @@ -5,5 +5,5 @@ insmod normal menuentry "kern" { multiboot2 /boot/kernel - module2 /boot/initrd.tar + # module2 /boot/initrd.tar } diff --git a/kernel/lib/kalloc.c b/kernel/lib/kalloc.c index 8dca46b..f4cd097 100644 --- a/kernel/lib/kalloc.c +++ b/kernel/lib/kalloc.c @@ -35,8 +35,7 @@ static struct page_header *get_header(void *ptr) static void *alloc_new(size_t size) { - size_t pages = - ((size + header_len + PAGE_SIZE - 1) / PAGE_SIZE) * PAGE_SIZE; + size_t pages = ((size + header_len + PAGE_SIZE - 1) / PAGE_SIZE); void *addr = kalloc_pages(pages); void *mem = (char *)addr + header_len; @@ -91,6 +90,8 @@ static void *alloc_block(size_t size, struct page_header *block) header->prev = block; header->next = block->next; block->next = header; + if (header->next) + header->next->prev = header; header->node_number = block->node_number; void *mem = (char *)header + header_len; @@ -163,7 +164,7 @@ void *krealloc(void *src, size_t dst_len) void kfree(void *ptr) { - struct page_header *header; + struct page_header *header, *neighbor; if (ptr == NULL) return; @@ -176,17 +177,17 @@ void kfree(void *ptr) header->free += header->used; header->used = 0; - struct page_header *neighbor; - // merge left for (neighbor = header->prev; neighbor != NULL; neighbor = neighbor->prev) { if (neighbor->node_number != header->node_number) break; - if (neighbor->used || header->used) - break; neighbor->free += header->free + header_len; neighbor->next = header->next; + if (neighbor->next) + neighbor->next->prev = neighbor; header = neighbor; + if (header->used) + break; } // merge right @@ -197,17 +198,24 @@ void kfree(void *ptr) break; header->free += neighbor->free + header_len; header->next = neighbor->next; - } - - if ((header->next == NULL || - header->next->node_number != header->node_number) && - (header->prev == NULL || - header->prev->node_number != header->node_number) && - header->used == 0) { if (header->next) - header->next->prev = header->prev; - if (header->prev) - header->prev->next = header->next; - kfree_pages(header); + header->next->prev = header; } + + // ignore if node on left + if (header->prev != NULL && + header->prev->node_number == header->node_number) + return; + + // ignore if node on right + if (header->next != NULL && + header->next->node_number == header->node_number) + return; + + // ignore if still used + if (header->used) + return; + + // FIXME: huh?! + // kfree_pages(header); } -- cgit v1.2.3-freya From f14e707144e805611ea01a8f2fd7f1e1beeb65c1 Mon Sep 17 00:00:00 2001 From: Freya Murphy Date: Tue, 6 May 2025 13:21:53 -0400 Subject: fixes --- config/grub.cfg | 3 +-- kernel/user.c | 1 + 2 files changed, 2 insertions(+), 2 deletions(-) (limited to 'config') diff --git a/config/grub.cfg b/config/grub.cfg index 82c5db7..13c5167 100644 --- a/config/grub.cfg +++ b/config/grub.cfg @@ -1,9 +1,8 @@ set timeout=1 set default=0 insmod all_video -insmod normal menuentry "kern" { multiboot2 /boot/kernel - # module2 /boot/initrd.tar + module2 /boot/initrd.tar } diff --git a/kernel/user.c b/kernel/user.c index 97d8f0f..27b46df 100644 --- a/kernel/user.c +++ b/kernel/user.c @@ -79,6 +79,7 @@ static int user_load_segment(struct pcb *pcb, struct file *file, int idx) ERROR("Could not load elf segment"); return 1; } + TRACE("Read %zu bytes", read); memcpyv(mapADDR + total_read, load_buffer, read); total_read += read; } -- cgit v1.2.3-freya