summaryrefslogtreecommitdiff
path: root/components
diff options
context:
space:
mode:
authorShell <[email protected]>2024-07-16 20:38:55 +0800
committerGitHub <[email protected]>2024-07-16 20:38:55 +0800
commit1d78d11567bc2187d10ca94e63c39cc95ff1195d (patch)
treed809e592a293e26527b4ad8e0c13da35b9d0d3d7 /components
parentd8294de64027696437bc4947c0eec28a3b4a17c4 (diff)
[smart] feat: add unmap for null mapper (#9186)
Do unmap before shrink so we don't see mapped entry on page table insertion, which is not acceptable for riscv implementation of architecture porting. Changes: - add un-mapping of pte on `_null_shrink()` Signed-off-by: Shell <[email protected]>
Diffstat (limited to 'components')
-rw-r--r--components/lwp/lwp_user_mm.c18
1 files changed, 18 insertions, 0 deletions
diff --git a/components/lwp/lwp_user_mm.c b/components/lwp/lwp_user_mm.c
index 01640d5a07..18f10e176f 100644
--- a/components/lwp/lwp_user_mm.c
+++ b/components/lwp/lwp_user_mm.c
@@ -70,11 +70,29 @@ static void _null_page_fault(struct rt_varea *varea,
static rt_err_t _null_shrink(rt_varea_t varea, void *new_start, rt_size_t size)
{
+ char *varea_start = varea->start;
+ void *rm_start;
+ void *rm_end;
+
+ if (varea_start == (char *)new_start)
+ {
+ rm_start = varea_start + size;
+ rm_end = varea_start + varea->size;
+ }
+ else /* if (varea_start < (char *)new_start) */
+ {
+ RT_ASSERT(varea_start < (char *)new_start);
+ rm_start = varea_start;
+ rm_end = new_start;
+ }
+
+ rt_varea_unmap_range(varea, rm_start, rm_end - rm_start);
return RT_EOK;
}
static rt_err_t _null_split(struct rt_varea *existed, void *unmap_start, rt_size_t unmap_len, struct rt_varea *subset)
{
+ rt_varea_unmap_range(existed, unmap_start, unmap_len);
return RT_EOK;
}