From 347cf9e458897814a66725c02832f9f15824fb88 Mon Sep 17 00:00:00 2001 From: Freya Murphy Date: Tue, 6 May 2025 12:36:10 -0400 Subject: virt alloc fixes --- kernel/memory/virtalloc.c | 36 +++++++++++++++++------------------- 1 file changed, 17 insertions(+), 19 deletions(-) (limited to 'kernel/memory/virtalloc.c') diff --git a/kernel/memory/virtalloc.c b/kernel/memory/virtalloc.c index da64f3b..3d60a9f 100644 --- a/kernel/memory/virtalloc.c +++ b/kernel/memory/virtalloc.c @@ -145,32 +145,31 @@ int virtaddr_clone(struct virt_ctx *old, struct virt_ctx *new) static void merge_back(struct virt_ctx *ctx, struct virt_addr_node *node) { - while (node->prev) { - if (node->is_alloc != node->prev->is_alloc) + struct virt_addr_node *prev; + for (prev = node->prev; prev != NULL; prev = prev->prev) { + if (prev->is_alloc) break; - struct virt_addr_node *temp = node->prev; - node->start = temp->start; - node->prev = temp->prev; - if (temp->prev) - temp->prev->next = node; - free_node(ctx, temp); + node->start = prev->start; + node->prev = prev->prev; + if (node->prev) + node->prev->next = node; + free_node(ctx, prev); } - if (node->prev == NULL) { + if (node->prev == NULL) ctx->start_node = node; - } } static void merge_forward(struct virt_ctx *ctx, struct virt_addr_node *node) { - while (node->next) { - if (node->is_alloc != node->next->is_alloc) + struct virt_addr_node *next; + for (next = node->next; next != NULL; next = next->next) { + if (next->is_alloc) break; - struct virt_addr_node *temp = node->next; - node->end = temp->end; - node->next = temp->next; - if (temp->next) - temp->next->prev = node; - free_node(ctx, temp); + node->end = next->end; + node->next = next->next; + if (node->next) + node->next->prev = node; + free_node(ctx, next); } } @@ -263,7 +262,6 @@ long virtaddr_free(struct virt_ctx *ctx, const void *virtaddr) if (node->start == virt) { int length = node->end - node->start; int pages = length / PAGE_SIZE; - // FIXME: ??? node->is_alloc = false; merge_back(ctx, node); merge_forward(ctx, node); -- cgit v1.2.3-freya