On Tue, Jan 02, 2024 at 12:57:40PM +1100, Richard Henderson wrote: > If reserved_va, then we have already reserved the entire > guest virtual address space; no need to remap page. > If !reserved_va, then use MAP_FIXED_NOREPLACE. > > Signed-off-by: Richard Henderson <richard.hender...@linaro.org> > --- > linux-user/elfload.c | 23 ++++++++++++++--------- > 1 file changed, 14 insertions(+), 9 deletions(-) > > diff --git a/linux-user/elfload.c b/linux-user/elfload.c > index c166faabab..96d8d4f84c 100644 > --- a/linux-user/elfload.c > +++ b/linux-user/elfload.c > @@ -1969,16 +1969,21 @@ static inline void init_thread(struct target_pt_regs > *regs, > > static bool init_guest_commpage(void) > { > - void *want = g2h_untagged(LO_COMMPAGE); > - void *addr = mmap(want, qemu_host_page_size, PROT_NONE, > - MAP_ANONYMOUS | MAP_PRIVATE | MAP_FIXED, -1, 0); > + /* If reserved_va, then we have already mapped 0 page on the host. */ > + if (!reserved_va) { > + int host_page_size = qemu_real_host_page_size(); > + void *want, *addr; > > - if (addr == MAP_FAILED) { > - perror("Allocating guest commpage"); > - exit(EXIT_FAILURE); > - } > - if (addr != want) { > - return false; > + want = g2h_untagged(LO_COMMPAGE); > + addr = mmap(want, host_page_size, PROT_NONE, > + MAP_ANONYMOUS | MAP_PRIVATE | MAP_FIXED_NOREPLACE, -1, > 0); > + if (addr == MAP_FAILED) { > + perror("Allocating guest commpage"); > + exit(EXIT_FAILURE); > + } > + if (addr != want) { > + return false; > + } > } > > /* > -- > 2.34.1
Reviewed-by: Ilya Leoshkevich <i...@linux.ibm.com>