| From 4a8579ad8629b57a43daa62e46cc7af6e1078116 Mon Sep 17 00:00:00 2001 |
| From: Richard Henderson <richard.henderson@linaro.org> |
| Date: Tue, 13 Feb 2024 10:20:27 -1000 |
| Subject: [PATCH] linux-user: Split out do_munmap |
| MIME-Version: 1.0 |
| Content-Type: text/plain; charset=UTF-8 |
| Content-Transfer-Encoding: 8bit |
| |
| Upstream-Status: Submitted [https://gitlab.com/rth7680/qemu/-/commit/4a8579ad8629b57a43daa62e46cc7af6e1078116] |
| |
| Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org> |
| Signed-off-by: Richard Henderson <richard.henderson@linaro.org> |
| --- |
| linux-user/mmap.c | 23 ++++++++++++++++------- |
| 1 file changed, 16 insertions(+), 7 deletions(-) |
| |
| diff --git a/linux-user/mmap.c b/linux-user/mmap.c |
| index 1bbfeb25b14..8ebcca44444 100644 |
| --- a/linux-user/mmap.c |
| +++ b/linux-user/mmap.c |
| @@ -267,6 +267,21 @@ int target_mprotect(abi_ulong start, abi_ulong len, int target_prot) |
| return ret; |
| } |
| |
| +/* |
| + * Perform munmap on behalf of the target, with host parameters. |
| + * If reserved_va, we must replace the memory reservation. |
| + */ |
| +static int do_munmap(void *addr, size_t len) |
| +{ |
| + if (reserved_va) { |
| + void *ptr = mmap(addr, len, PROT_NONE, |
| + MAP_FIXED | MAP_ANONYMOUS |
| + | MAP_PRIVATE | MAP_NORESERVE, -1, 0); |
| + return ptr == addr ? 0 : -1; |
| + } |
| + return munmap(addr, len); |
| +} |
| + |
| /* map an incomplete host page */ |
| static bool mmap_frag(abi_ulong real_start, abi_ulong start, abi_ulong last, |
| int prot, int flags, int fd, off_t offset) |
| @@ -854,13 +869,7 @@ static int mmap_reserve_or_unmap(abi_ulong start, abi_ulong len) |
| real_len = real_last - real_start + 1; |
| host_start = g2h_untagged(real_start); |
| |
| - if (reserved_va) { |
| - void *ptr = mmap(host_start, real_len, PROT_NONE, |
| - MAP_FIXED | MAP_ANONYMOUS |
| - | MAP_PRIVATE | MAP_NORESERVE, -1, 0); |
| - return ptr == host_start ? 0 : -1; |
| - } |
| - return munmap(host_start, real_len); |
| + return do_munmap(host_start, real_len); |
| } |
| |
| int target_munmap(abi_ulong start, abi_ulong len) |
| -- |
| GitLab |
| |