9os

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README | LICENSE

commit 43be64fccc4807ec2802d7424818d6392e2c38e8
parent 9469372d1915f951022b6e83a77cfa02cd5d0419
Author: Roberto E. Vargas Caballero <roberto.vargas@midokura.com>
Date:   Sat, 19 Nov 2022 08:26:25 +0100

os9: Add unmapseg()

This function is needed if we want to unmap a segment, that is
for example needed in rfork or when a task is destroyed.

Diffstat:
Minclude/os9/os9.h | 1+
Msrc/os9/arch/arm64/mmu.c | 10++++++++++
Msrc/os9/hosted/mmu.c | 7+++++++
Msrc/os9/proc.c | 13+++++++++++++
4 files changed, 31 insertions(+), 0 deletions(-)

diff --git a/include/os9/os9.h b/include/os9/os9.h @@ -279,6 +279,7 @@ extern int debug(void); /* arch mmu.c */ extern int vmap(phyaddr_t, uintptr_t, int); +extern int vunmap(phyaddr_t); /* arch functions */ extern Context *getctx(Context *ctx); diff --git a/src/os9/arch/arm64/mmu.c b/src/os9/arch/arm64/mmu.c @@ -261,6 +261,16 @@ vmap(phyaddr_t pa, uintptr_t va, int perm) return 0; } + +int +vunmap(phyaddr_t pa) +{ + /& TODO */ + return 0; +} + + + void taskmap(void) { diff --git a/src/os9/hosted/mmu.c b/src/os9/hosted/mmu.c @@ -9,6 +9,13 @@ vmap(phyaddr_t pa, uintptr_t va, int flags) return 0; } +int +vunmap(phyaddr_t pa) +{ + dbg("vunmap %llx\n", (long long) pa); + return 0; +} + Ptable * initptable(Task *tp) { diff --git a/src/os9/proc.c b/src/os9/proc.c @@ -110,6 +110,19 @@ gettask(int pid) int unmapseg(Map *mp) { + Page *p; + + dbg("unmap %s: %llx -> %llx\n", + (mp->name) ? mp->name : "unnamed", + mp->va, mp->pa); + + for (p = mp->pages; p; p = p->next) { + vunmap(p->pa); + freep(p); + } + + mp->pages = NULL; + return 0; }