summaryrefslogtreecommitdiff
path: root/kernel/memory
diff options
context:
space:
mode:
authorIan McFarlane <i.mcfarlane2002@gmail.com>2025-04-25 11:51:09 -0400
committerIan McFarlane <i.mcfarlane2002@gmail.com>2025-04-25 11:51:09 -0400
commit25359ed1cb1a6131e9d3d26c8f2c8634670ed864 (patch)
tree559750220ff5084e33a2e1f5bc4f0c90b959a4f8 /kernel/memory
parentfix freeing of virtual memory (diff)
parentpoweroff syscall (diff)
downloadcomus-25359ed1cb1a6131e9d3d26c8f2c8634670ed864.tar.gz
comus-25359ed1cb1a6131e9d3d26c8f2c8634670ed864.tar.bz2
comus-25359ed1cb1a6131e9d3d26c8f2c8634670ed864.zip
resolve format conflict
Diffstat (limited to 'kernel/memory')
-rw-r--r--kernel/memory/paging.c4
-rw-r--r--kernel/memory/physalloc.c12
-rw-r--r--kernel/memory/virtalloc.c14
3 files changed, 21 insertions, 9 deletions
diff --git a/kernel/memory/paging.c b/kernel/memory/paging.c
index 8de1a24..b23e39b 100644
--- a/kernel/memory/paging.c
+++ b/kernel/memory/paging.c
@@ -704,8 +704,8 @@ volatile void *pgdir_alloc(void)
volatile void *pgdir_clone(volatile const void *old_pgdir, bool cow)
{
// TODO:
- (void) old_pgdir;
- (void) cow;
+ (void)old_pgdir;
+ (void)cow;
return NULL;
}
diff --git a/kernel/memory/physalloc.c b/kernel/memory/physalloc.c
index 856a627..9fcbe8f 100644
--- a/kernel/memory/physalloc.c
+++ b/kernel/memory/physalloc.c
@@ -1,3 +1,4 @@
+#include "lib/kio.h"
#include <lib.h>
#include <comus/memory.h>
#include <comus/asm.h>
@@ -11,13 +12,13 @@ extern char kernel_end;
// between memory_start and kernel_start will be the bitmap
static uintptr_t memory_start = 0;
-static uint64_t *bitmap;
+static uint64_t *bitmap = NULL;
static uint64_t total_memory;
static uint64_t free_memory;
static uint64_t page_count;
static uint64_t segment_count;
struct memory_map phys_mmap;
-struct memory_segment *page_start;
+struct memory_segment *page_start = NULL;
static const char *segment_type_str[] = {
[SEG_TYPE_FREE] = "Free", [SEG_TYPE_RESERVED] = "Reserved",
@@ -84,6 +85,13 @@ void *alloc_phys_pages_exact(size_t pages)
if (pages < 1)
return NULL;
+ if (bitmap == NULL || page_start == NULL) {
+ // temporary bump allocator
+ void *addr = (void *)memory_start;
+ memory_start += PAGE_SIZE;
+ return addr;
+ }
+
size_t n_contiguous = 0;
size_t free_region_start = 0;
for (size_t i = 0; i < page_count; i++) {
diff --git a/kernel/memory/virtalloc.c b/kernel/memory/virtalloc.c
index a077532..cbde9b4 100644
--- a/kernel/memory/virtalloc.c
+++ b/kernel/memory/virtalloc.c
@@ -79,7 +79,7 @@ static void free_node(struct virt_ctx *ctx, struct virt_addr_node *node)
void virtaddr_init(struct virt_ctx *ctx)
{
struct virt_addr_node init = {
- .start = 0x40005000, // map after paging pt
+ .start = 0x50000000,
.end = 0x1000000000000, // 48bit memory address max
.next = NULL,
.prev = NULL,
@@ -102,12 +102,14 @@ int virtaddr_clone(struct virt_ctx *old, struct virt_ctx *new)
memcpy(new, old, sizeof(struct virt_ctx));
// allocate new space
- new->alloc_nodes = kalloc(sizeof(struct virt_addr_node) * new->alloc_node_count);
+ new->alloc_nodes =
+ kalloc(sizeof(struct virt_addr_node) * new->alloc_node_count);
if (new->alloc_nodes == NULL)
return 1;
// update prev/next in new allocation space
- update_node_ptrs(old->alloc_nodes, new->alloc_nodes, old->alloc_node_count, new->alloc_node_count);
+ update_node_ptrs(old->alloc_nodes, new->alloc_nodes, old->alloc_node_count,
+ new->alloc_node_count);
// update bootstrap nodes
for (size_t i = 0; i < new->used_node_count; i++) {
@@ -117,8 +119,10 @@ int virtaddr_clone(struct virt_ctx *old, struct virt_ctx *new)
break;
// get prev
- prev = i > 0 ? &new->bootstrap_nodes[i-1] : NULL;
- next = i < BOOTSTRAP_VIRT_ALLOC_NODES - 1 ? &new->bootstrap_nodes[i+1] : NULL;
+ prev = i > 0 ? &new->bootstrap_nodes[i - 1] : NULL;
+ next = i < BOOTSTRAP_VIRT_ALLOC_NODES - 1 ?
+ &new->bootstrap_nodes[i + 1] :
+ NULL;
new->bootstrap_nodes[i].prev = prev;
new->bootstrap_nodes[i].next = next;