aboutsummaryrefslogtreecommitdiff
path: root/src/uapi/mem.c
diff options
context:
space:
mode:
authorKimplul <kimi.h.kuparinen@gmail.com>2024-08-30 19:20:21 +0300
committerKimplul <kimi.h.kuparinen@gmail.com>2024-08-30 19:20:21 +0300
commit314bca3dc19a864c76153bfcd5a58be8c40000f9 (patch)
tree9aba30284fce66e149a7472adea1cb4037e49463 /src/uapi/mem.c
parent1a2e1fff7ce4b8fd8db46549d81e71e76b842da3 (diff)
downloadkmi-314bca3dc19a864c76153bfcd5a58be8c40000f9.tar.gz
kmi-314bca3dc19a864c76153bfcd5a58be8c40000f9.zip
improvements to shared memory handling
+ Now each shared region is reference counter (technically each region is refernce counted, private regions just have a count of 1). Also, syscalls that touch the TLB get flushed, but should probably look into where else this flushing might be needed.
Diffstat (limited to 'src/uapi/mem.c')
-rw-r--r--src/uapi/mem.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/src/uapi/mem.c b/src/uapi/mem.c
index f7237d7..5c18797 100644
--- a/src/uapi/mem.c
+++ b/src/uapi/mem.c
@@ -29,6 +29,7 @@ SYSCALL_DEFINE2(req_mem)(struct tcb *t, sys_arg_t size, sys_arg_t flags)
if (ERR_CODE(start))
return_args1(t, start);
+ flush_tlb_all();
return_args2(t, OK, start);
}
@@ -52,6 +53,7 @@ SYSCALL_DEFINE3(req_fixmem)(struct tcb *t, sys_arg_t fixed, sys_arg_t size,
if (ERR_CODE(start))
return_args1(t, start);
+ flush_tlb_all();
return_args2(t, OK, start);
}
@@ -75,6 +77,7 @@ SYSCALL_DEFINE1(free_mem)(struct tcb *t, sys_arg_t start)
if (!(status = free_devmem(r, start)))
return_args1(t, OK);
+ flush_tlb_all();
return_args1(t, status);
}
@@ -102,6 +105,7 @@ SYSCALL_DEFINE3(req_pmem)(struct tcb *t, sys_arg_t paddr, sys_arg_t size,
if (ERR_CODE(start))
return_args1(t, start);
+ flush_tlb_all();
return_args2(t, OK, start);
}
@@ -131,6 +135,7 @@ SYSCALL_DEFINE2(req_page)(struct tcb *t, sys_arg_t size, sys_arg_t flags)
if (ERR_CODE(start))
return_args1(t, start);
+ flush_tlb_all();
return_args4(t, OK, start, addr, asize);
}
@@ -154,6 +159,7 @@ SYSCALL_DEFINE2(req_sharedmem)(struct tcb *t, sys_arg_t size, sys_arg_t flags)
if (ERR_CODE(start))
return_args1(t, start);
+ flush_tlb_all();
return_args2(t, OK, start);
}
@@ -184,5 +190,6 @@ SYSCALL_DEFINE3(ref_sharedmem)(struct tcb *t, sys_arg_t tid, sys_arg_t addr,
if (ERR_CODE(start))
return_args1(t, start);
+ flush_tlb_all();
return_args2(t, OK, start);
}