From 2c6ffe34a171c79ad25bbe0ef1f4e641a20bf3a3 Mon Sep 17 00:00:00 2001 From: Mathieu Maret Date: Tue, 26 Oct 2021 22:08:36 +0200 Subject: [PATCH] Allow to unref unrefered page --- core/mem.c | 8 +++++--- core/mem.h | 2 ++ 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/core/mem.c b/core/mem.c index d74b31f..de471b0 100644 --- a/core/mem.c +++ b/core/mem.c @@ -1,8 +1,9 @@ -#include "mem.h" #include "assert.h" +#include "errno.h" #include "kernel.h" #include "klibc.h" #include "list.h" +#include "mem.h" #include "types.h" static struct phyMemDesc *pageDesc = (struct phyMemDesc *)&__ld_kernel_end; @@ -139,9 +140,10 @@ int unrefPhyPage(paddr_t addr) { struct phyMemDesc *mem = addr2memDesc(addr); if (!mem) { - return -1; + return -EINVAL; } - assert(mem->ref > 0); + if(mem->ref <= 0) + return -EINVAL; mem->ref--; if (mem->ref == 0) { allocatedPage--; diff --git a/core/mem.h b/core/mem.h index b16fdb6..278c930 100644 --- a/core/mem.h +++ b/core/mem.h @@ -7,6 +7,8 @@ #define PAGE_SHIFT 12U #define PAGE_SIZE (1U << PAGE_SHIFT) +#define PAGE_MASK (PAGE_SIZE - 1) + // Defined in linker.ld script extern uint32_t __ld_kernel_begin;