From 314bca3dc19a864c76153bfcd5a58be8c40000f9 Mon Sep 17 00:00:00 2001 From: Kimplul Date: Fri, 30 Aug 2024 19:20:21 +0300 Subject: 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. --- src/uapi/mem.c | 7 +++++++ 1 file changed, 7 insertions(+) (limited to 'src/uapi') 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); } -- cgit v1.3