From: Laurent Vivier <laurent@vivier.eu>
To: Richard Henderson <richard.henderson@linaro.org>, qemu-devel@nongnu.org
Subject: Re: [PULL 35/47] linux-user: Use page_find_range_empty for mmap_find_vma_reserved
Date: Tue, 18 Jul 2023 11:07:17 +0200 [thread overview]
Message-ID: <30185dea-cab4-3b01-4fb2-bf1f87de2351@vivier.eu> (raw)
In-Reply-To: <20230715135317.7219-36-richard.henderson@linaro.org>
Hi Richard,
thank you for the linux-user PR (I have really no time to do that).
I've run the LTP test suite (20230127) on master and found some problems introduced by
this patch.
With armhf and Debian bionic and stretch, brk01 brk02 recvmsg01 fail:
tst_test.c:1560: TINFO: Timeout per run is 0h 00m 30s
brk01.c:24: TINFO: Testing libc variant
brk01.c:54: TFAIL: brk() failed: ENOMEM (12)
brk01.c:61: TFAIL: brk() failed to set address have 0x40049000 expected 0x4004afff
brk01.c:21: TINFO: Testing syscall variant
brk01.c:61: TFAIL: brk() failed to set address have 0x40049000 expected 0x4004afff
tst_test.c:1560: TINFO: Timeout per run is 0h 00m 30s
brk02.c:42: TINFO: Testing libc variant
brk02.c:27: TFAIL: brk() failed: ENOMEM (12)
brk02.c:60: TFAIL: Cannot expand brk() by page size: ENOMEM (12)
brk02.c:39: TINFO: Testing syscall variant
brk02.c:60: TFAIL: Cannot expand brk() by page size: EFAULT (14)
recvmsg01 1 TPASS : bad file descriptor successful
recvmsg01 2 TPASS : invalid socket successful
recvmsg01 3 TPASS : invalid socket buffer successful
recvmsg01 4 TPASS : invalid socket length successful
recvmsg01 5 TPASS : invalid recv buffer successful
recvmsg01 6 TPASS : invalid iovec buffer successful
recvmsg01 7 TPASS : invalid iovec count successful
recvmsg01 8 TPASS : rights reception successful
recvmsg01 9 TPASS : invalid MSG_OOB flag set successful
recvmsg01 10 TPASS : invalid MSG_ERRQUEUE flag set successful
recvmsg01 11 TPASS : invalid cmsg length successful
recvmsg01 12 TFAIL : recvmsg01.c:236: large cmesg length ; returned -1 (expected 0),
errno 14 (expected 0)
With mips/stretch and mipsel/stretch I have one more, sbrk01:
sbrk01 1 TFAIL : sbrk01.c:102: sbrk - Increase by 8192 bytes failed:
TEST_ERRNO=ENOMEM(12): Cannot allocate memory
sbrk01 2 TPASS : sbrk - Increase by -8192 bytes returned 0x4005f000
Thanks,
Laurent
On 7/15/23 15:53, Richard Henderson wrote:
> Use the interval tree to find empty space, rather than
> probing each page in turn.
>
> Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
> Message-Id: <20230707204054.8792-19-richard.henderson@linaro.org>
> ---
> linux-user/mmap.c | 52 ++++++-----------------------------------------
> 1 file changed, 6 insertions(+), 46 deletions(-)
>
> diff --git a/linux-user/mmap.c b/linux-user/mmap.c
> index c4b2515271..738b9b797d 100644
> --- a/linux-user/mmap.c
> +++ b/linux-user/mmap.c
> @@ -318,55 +318,15 @@ unsigned long last_brk;
> static abi_ulong mmap_find_vma_reserved(abi_ulong start, abi_ulong size,
> abi_ulong align)
> {
> - abi_ulong addr, end_addr, incr = qemu_host_page_size;
> - int prot;
> - bool looped = false;
> + target_ulong ret;
>
> - if (size > reserved_va) {
> - return (abi_ulong)-1;
> + ret = page_find_range_empty(start, reserved_va, size, align);
> + if (ret == -1 && start > mmap_min_addr) {
> + /* Restart at the beginning of the address space. */
> + ret = page_find_range_empty(mmap_min_addr, start - 1, size, align);
> }
>
> - /* Note that start and size have already been aligned by mmap_find_vma. */
> -
> - end_addr = start + size;
> - /*
> - * Start at the top of the address space, ignoring the last page.
> - * If reserved_va == UINT32_MAX, then end_addr wraps to 0,
> - * throwing the rest of the calculations off.
> - * TODO: rewrite using last_addr instead.
> - * TODO: use the interval tree instead of probing every page.
> - */
> - if (start > reserved_va - size) {
> - end_addr = ((reserved_va - size) & -align) + size;
> - looped = true;
> - }
> -
> - /* Search downward from END_ADDR, checking to see if a page is in use. */
> - addr = end_addr;
> - while (1) {
> - addr -= incr;
> - if (addr > end_addr) {
> - if (looped) {
> - /* Failure. The entire address space has been searched. */
> - return (abi_ulong)-1;
> - }
> - /* Re-start at the top of the address space (see above). */
> - addr = end_addr = ((reserved_va - size) & -align) + size;
> - looped = true;
> - } else {
> - prot = page_get_flags(addr);
> - if (prot) {
> - /* Page in use. Restart below this page. */
> - addr = end_addr = ((addr - size) & -align) + size;
> - } else if (addr && addr + size == end_addr) {
> - /* Success! All pages between ADDR and END_ADDR are free. */
> - if (start == mmap_next_start) {
> - mmap_next_start = addr;
> - }
> - return addr;
> - }
> - }
> - }
> + return ret;
> }
>
> /*
next prev parent reply other threads:[~2023-07-18 9:08 UTC|newest]
Thread overview: 59+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-07-15 13:52 [PULL 00/47] tcg + linux-user patch queue Richard Henderson
2023-07-15 13:52 ` [PULL 01/47] linux-user: Reformat syscall_defs.h Richard Henderson
2023-07-15 13:52 ` [PULL 02/47] linux-user: Remove #if 0 block in syscall_defs.h Richard Henderson
2023-07-15 13:52 ` [PULL 03/47] linux-user: Use abi_uint not uint32_t " Richard Henderson
2023-07-15 13:52 ` [PULL 04/47] linux-user: Use abi_int not int32_t " Richard Henderson
2023-07-15 13:52 ` [PULL 05/47] linux-user: Use abi_ullong not uint64_t " Richard Henderson
2023-07-15 13:52 ` [PULL 06/47] linux-user: Use abi_llong not int64_t " Richard Henderson
2023-07-15 13:52 ` [PULL 07/47] linux-user: Use abi_uint not unsigned int " Richard Henderson
2023-07-15 13:52 ` [PULL 08/47] linux-user: Use abi_ullong not unsigned long long " Richard Henderson
2023-07-15 13:52 ` [PULL 09/47] linux-user: Use abi_llong not " Richard Henderson
2023-07-15 13:52 ` [PULL 10/47] linux-user: Use abi_int not int " Richard Henderson
2023-07-15 13:52 ` [PULL 11/47] linux-user: Use abi_ushort not unsigned short " Richard Henderson
2023-07-15 13:52 ` [PULL 12/47] linux-user: Use abi_short not " Richard Henderson
2023-07-15 13:52 ` [PULL 13/47] linux-user: Use abi_uint not unsigned " Richard Henderson
2023-07-15 13:52 ` [PULL 14/47] include/exec/user: Set ABI_LLONG_ALIGNMENT to 4 for microblaze Richard Henderson
2023-07-15 13:52 ` [PULL 15/47] include/exec/user: Set ABI_LLONG_ALIGNMENT to 4 for nios2 Richard Henderson
2023-08-08 7:19 ` Michael Tokarev
2023-07-15 13:52 ` [PULL 16/47] linux-user/syscall: Implement execve without execveat Richard Henderson
2023-07-15 13:52 ` [PULL 17/47] linux-user: Fix do_shmat type errors Richard Henderson
2023-07-15 13:52 ` [PULL 18/47] accel/tcg: Split out cpu_exec_longjmp_cleanup Richard Henderson
2023-07-15 13:52 ` [PULL 19/47] tcg: Fix info_in_idx increment in layout_arg_by_ref Richard Henderson
2023-07-15 13:52 ` [PULL 20/47] linux-user: Make sure initial brk(0) is page-aligned Richard Henderson
2023-07-16 18:15 ` Michael Tokarev
2023-07-17 14:42 ` Richard Henderson
2023-07-17 14:57 ` Michael Tokarev
2023-07-18 11:51 ` Michael Tokarev
2023-07-15 13:52 ` [PULL 21/47] linux-user: Fix formatting of mmap.c Richard Henderson
2023-07-15 13:52 ` [PULL 22/47] linux-user/strace: Expand struct flags to hold a mask Richard Henderson
2023-07-15 13:52 ` [PULL 23/47] linux-user: Split TARGET_MAP_* out of syscall_defs.h Richard Henderson
2023-07-15 13:52 ` [PULL 24/47] linux-user: Split TARGET_PROT_* " Richard Henderson
2023-07-15 13:52 ` [PULL 25/47] linux-user: Populate more bits in mmap_flags_tbl Richard Henderson
2023-07-15 13:52 ` [PULL 26/47] accel/tcg: Introduce page_check_range_empty Richard Henderson
2023-07-15 13:52 ` [PULL 27/47] bsd-user: Use page_check_range_empty for MAP_EXCL Richard Henderson
2023-07-15 13:52 ` [PULL 28/47] linux-user: Implement MAP_FIXED_NOREPLACE Richard Henderson
2023-07-15 13:52 ` [PULL 29/47] linux-user: Split out target_to_host_prot Richard Henderson
2023-07-15 13:53 ` [PULL 30/47] linux-user: Widen target_mmap offset argument to off_t Richard Henderson
2023-07-15 13:53 ` [PULL 31/47] linux-user: Rewrite target_mprotect Richard Henderson
2023-07-15 13:53 ` [PULL 32/47] linux-user: Rewrite mmap_frag Richard Henderson
2023-07-15 13:53 ` [PULL 33/47] accel/tcg: Introduce page_find_range_empty Richard Henderson
2023-07-15 13:53 ` [PULL 34/47] bsd-user: Use page_find_range_empty for mmap_find_vma_reserved Richard Henderson
2023-07-15 13:53 ` [PULL 35/47] linux-user: " Richard Henderson
2023-07-18 9:07 ` Laurent Vivier [this message]
2023-07-15 13:53 ` [PULL 36/47] linux-user: Use 'last' instead of 'end' in target_mmap Richard Henderson
2023-07-15 13:53 ` [PULL 37/47] linux-user: Rewrite mmap_reserve Richard Henderson
2023-07-15 13:53 ` [PULL 38/47] linux-user: Rename mmap_reserve to mmap_reserve_or_unmap Richard Henderson
2023-09-18 8:35 ` Andreas Schwab
2023-10-03 21:03 ` Richard Henderson
2023-07-15 13:53 ` [PULL 39/47] linux-user: Simplify target_munmap Richard Henderson
2023-07-15 13:53 ` [PULL 40/47] accel/tcg: Accept more page flags in page_check_range Richard Henderson
2023-07-15 13:53 ` [PULL 41/47] accel/tcg: Return bool from page_check_range Richard Henderson
2023-07-15 13:53 ` [PULL 42/47] linux-user: Remove can_passthrough_madvise Richard Henderson
2023-07-15 13:53 ` [PULL 43/47] linux-user: Simplify target_madvise Richard Henderson
2023-07-15 13:53 ` [PULL 44/47] linux-user: Drop uint and ulong Richard Henderson
2023-07-15 13:53 ` [PULL 45/47] linux-user/arm: Do not allocate a commpage at all for M-profile CPUs Richard Henderson
2023-07-16 18:13 ` Michael Tokarev
2023-07-17 14:42 ` Richard Henderson
2023-07-15 13:53 ` [PULL 46/47] accel/tcg: Always lock pages before translation Richard Henderson
2023-07-15 13:53 ` [PULL 47/47] tcg: Use HAVE_CMPXCHG128 instead of CONFIG_CMPXCHG128 Richard Henderson
2023-07-16 16:49 ` [PULL 00/47] tcg + linux-user patch queue Richard Henderson
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=30185dea-cab4-3b01-4fb2-bf1f87de2351@vivier.eu \
--to=laurent@vivier.eu \
--cc=qemu-devel@nongnu.org \
--cc=richard.henderson@linaro.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).