From: Richard Henderson <richard.henderson@linaro.org>
To: qemu-devel@nongnu.org
Subject: [PATCH v3 00/33] linux-user: Improve host and guest page size handling
Date: Tue, 2 Jan 2024 12:57:35 +1100 [thread overview]
Message-ID: <20240102015808.132373-1-richard.henderson@linaro.org> (raw)
Changes for v3:
* Rebase.
Blurb from v1:
While working on mmap issues for 8.1, I noticed a lot of corner
cases of host != guest page size that we implement poorly.
This seems to be particularly visible on Apple M1 with 16k pages,
more so than Power with 64k pages for some reason.
Objective 1 is to deprecate and (essentially) disable the -p option.
The effect of -p is apparently confusing, so much so that our own
testsuite misuses it. One cannot really change the host page size,
and pretending otherwise means that we don't treat the host memory
system correctly, and stuff breaks.
I have not yet done the same work for bsd-user.
Objective 2 is to allow the guest page size to change to match the host.
There are corner cases of host != guest page size will fail in odd ways.
For case of host > guest page size, the issues could be solved with
softmmu, allowing a non-linear mapping between host and guest addresses
and also disconnecting host and guest page permissions.
However, host < guest page has issues with SIGBUS which I believe to be
totally unfixable. At minimum one would need to monitor changes to all
files mapped in the address space, but I'm sure there is much more.
But as always the best behaviour is obtained when the host and guest
page sizes match -- there are no corner cases to contend with.
There are a set of guests which can be configured to use multiple page
sizes, and therefore software developed for those guests (usually) does
not hard-code a particular page size. For those, we can allow the
page size to vary and let the guest match the host.
I have only changed aarch64, alpha and ppc guests so far, as those
are both easy to test and, especially for the case of alpha's default
8k page size, prone to failure.
r~
Richard Henderson (33):
accel/tcg: Remove qemu_host_page_size from page_protect/page_unprotect
linux-user: Adjust SVr4 NULL page mapping
linux-user: Remove qemu_host_page_{size,mask} in probe_guest_base
linux-user: Remove qemu_host_page_size from create_elf_tables
linux-user/hppa: Simplify init_guest_commpage
linux-user/nios2: Remove qemu_host_page_size from init_guest_commpage
linux-user/arm: Remove qemu_host_page_size from init_guest_commpage
linux-user: Remove qemu_host_page_{size,mask} from mmap.c
linux-user: Remove REAL_HOST_PAGE_ALIGN from mmap.c
linux-user: Remove HOST_PAGE_ALIGN from mmap.c
migration: Remove qemu_host_page_size
hw/tpm: Remove HOST_PAGE_ALIGN from tpm_ppi_init
softmmu/physmem: Remove qemu_host_page_size
softmmu/physmem: Remove HOST_PAGE_ALIGN
linux-user: Remove qemu_host_page_size from main
linux-user: Split out target_mmap__locked
linux-user: Move some mmap checks outside the lock
linux-user: Fix sub-host-page mmap
linux-user: Split out mmap_end
linux-user: Do early mmap placement only for reserved_va
linux-user: Split out mmap_h_eq_g
linux-user: Split out mmap_h_lt_g
linux-user: Split out mmap_h_gt_g
tests/tcg: Remove run-test-mmap-*
tests/tcg: Extend file in linux-madvise.c
*-user: Deprecate and disable -p pagesize
cpu: Remove page_size_init
accel/tcg: Disconnect TargetPageDataNode from page size
linux-user: Allow TARGET_PAGE_BITS_VARY
target/arm: Enable TARGET_PAGE_BITS_VARY for AArch64 user-only
linux-user: Bound mmap_min_addr by host page size
target/ppc: Enable TARGET_PAGE_BITS_VARY for user-only
target/alpha: Enable TARGET_PAGE_BITS_VARY for user-only
docs/about/deprecated.rst | 7 +
docs/user/main.rst | 3 -
bsd-user/qemu.h | 7 +
include/exec/cpu-common.h | 7 -
include/hw/core/cpu.h | 2 -
target/alpha/cpu-param.h | 16 +-
target/arm/cpu-param.h | 6 +-
target/ppc/cpu-param.h | 9 +-
accel/tcg/translate-all.c | 1 -
accel/tcg/user-exec.c | 31 +-
bsd-user/main.c | 21 +-
cpu-target.c | 13 -
hw/tpm/tpm_ppi.c | 3 +-
linux-user/elfload.c | 67 +-
linux-user/main.c | 33 +-
linux-user/mmap.c | 714 +++++++++++++---------
migration/ram.c | 22 +-
system/physmem.c | 17 +-
system/vl.c | 1 -
target/arm/cpu.c | 51 +-
tests/tcg/multiarch/linux/linux-madvise.c | 2 +
tests/tcg/alpha/Makefile.target | 3 -
tests/tcg/arm/Makefile.target | 3 -
tests/tcg/hppa/Makefile.target | 3 -
tests/tcg/i386/Makefile.target | 3 -
tests/tcg/m68k/Makefile.target | 3 -
tests/tcg/multiarch/Makefile.target | 9 -
tests/tcg/ppc/Makefile.target | 12 -
tests/tcg/sh4/Makefile.target | 3 -
tests/tcg/sparc64/Makefile.target | 6 -
30 files changed, 626 insertions(+), 452 deletions(-)
delete mode 100644 tests/tcg/ppc/Makefile.target
delete mode 100644 tests/tcg/sparc64/Makefile.target
--
2.34.1
next reply other threads:[~2024-01-02 1:58 UTC|newest]
Thread overview: 100+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-01-02 1:57 Richard Henderson [this message]
2024-01-02 1:57 ` [PATCH v3 01/33] accel/tcg: Remove qemu_host_page_size from page_protect/page_unprotect Richard Henderson
2024-01-03 15:28 ` Philippe Mathieu-Daudé
2024-01-29 9:59 ` Ilya Leoshkevich
2024-01-02 1:57 ` [PATCH v3 02/33] linux-user: Adjust SVr4 NULL page mapping Richard Henderson
2024-01-08 8:54 ` Pierrick Bouvier
2024-01-29 10:03 ` Ilya Leoshkevich
2024-01-02 1:57 ` [PATCH v3 03/33] linux-user: Remove qemu_host_page_{size, mask} in probe_guest_base Richard Henderson
2024-01-08 9:35 ` Pierrick Bouvier
2024-01-29 10:15 ` Ilya Leoshkevich
2024-01-02 1:57 ` [PATCH v3 04/33] linux-user: Remove qemu_host_page_size from create_elf_tables Richard Henderson
2024-01-08 8:55 ` Pierrick Bouvier
2024-01-29 10:18 ` Ilya Leoshkevich
2024-01-02 1:57 ` [PATCH v3 05/33] linux-user/hppa: Simplify init_guest_commpage Richard Henderson
2024-01-08 8:56 ` Pierrick Bouvier
2024-01-29 10:28 ` Ilya Leoshkevich
2024-01-29 10:45 ` Ilya Leoshkevich
2024-01-02 1:57 ` [PATCH v3 06/33] linux-user/nios2: Remove qemu_host_page_size from init_guest_commpage Richard Henderson
2024-01-08 9:11 ` Pierrick Bouvier
2024-01-02 1:57 ` [PATCH v3 07/33] linux-user/arm: " Richard Henderson
2024-01-08 9:38 ` Pierrick Bouvier
2024-01-10 22:12 ` Richard Henderson
2024-01-02 1:57 ` [PATCH v3 08/33] linux-user: Remove qemu_host_page_{size, mask} from mmap.c Richard Henderson
2024-01-08 9:47 ` Pierrick Bouvier
2024-01-08 13:25 ` Philippe Mathieu-Daudé
2024-01-29 10:53 ` Ilya Leoshkevich
2024-01-02 1:57 ` [PATCH v3 09/33] linux-user: Remove REAL_HOST_PAGE_ALIGN " Richard Henderson
2024-01-29 10:55 ` Ilya Leoshkevich
2024-01-02 1:57 ` [PATCH v3 10/33] linux-user: Remove HOST_PAGE_ALIGN " Richard Henderson
2024-01-08 10:47 ` Pierrick Bouvier
2024-01-29 10:58 ` Ilya Leoshkevich
2024-01-02 1:57 ` [PATCH v3 11/33] migration: Remove qemu_host_page_size Richard Henderson
2024-01-08 10:48 ` Pierrick Bouvier
2024-01-29 10:58 ` Ilya Leoshkevich
2024-01-02 1:57 ` [PATCH v3 12/33] hw/tpm: Remove HOST_PAGE_ALIGN from tpm_ppi_init Richard Henderson
2024-01-02 19:12 ` Philippe Mathieu-Daudé
2024-01-29 11:04 ` Ilya Leoshkevich
2024-01-02 1:57 ` [PATCH v3 13/33] softmmu/physmem: Remove qemu_host_page_size Richard Henderson
2024-01-03 15:30 ` Philippe Mathieu-Daudé
2024-01-29 14:28 ` Ilya Leoshkevich
2024-01-02 1:57 ` [PATCH v3 14/33] softmmu/physmem: Remove HOST_PAGE_ALIGN Richard Henderson
2024-01-08 11:08 ` Pierrick Bouvier
2024-01-29 14:31 ` Ilya Leoshkevich
2024-01-02 1:57 ` [PATCH v3 15/33] linux-user: Remove qemu_host_page_size from main Richard Henderson
2024-01-03 15:31 ` Philippe Mathieu-Daudé
2024-01-29 14:44 ` Ilya Leoshkevich
2024-01-02 1:57 ` [PATCH v3 16/33] linux-user: Split out target_mmap__locked Richard Henderson
2024-01-08 10:50 ` Pierrick Bouvier
2024-01-29 14:45 ` Ilya Leoshkevich
2024-01-02 1:57 ` [PATCH v3 17/33] linux-user: Move some mmap checks outside the lock Richard Henderson
2024-01-29 14:52 ` Ilya Leoshkevich
2024-01-02 1:57 ` [PATCH v3 18/33] linux-user: Fix sub-host-page mmap Richard Henderson
2024-01-08 10:54 ` Pierrick Bouvier
2024-01-29 14:57 ` Ilya Leoshkevich
2024-01-02 1:57 ` [PATCH v3 19/33] linux-user: Split out mmap_end Richard Henderson
2024-01-29 14:59 ` Ilya Leoshkevich
2024-01-02 1:57 ` [PATCH v3 20/33] linux-user: Do early mmap placement only for reserved_va Richard Henderson
2024-01-08 11:05 ` Pierrick Bouvier
2024-01-29 15:06 ` Ilya Leoshkevich
2024-01-02 1:57 ` [PATCH v3 21/33] linux-user: Split out mmap_h_eq_g Richard Henderson
2024-01-08 11:13 ` Pierrick Bouvier
2024-01-29 15:12 ` Ilya Leoshkevich
2024-02-13 19:52 ` Richard Henderson
2024-01-02 1:57 ` [PATCH v3 22/33] linux-user: Split out mmap_h_lt_g Richard Henderson
2024-01-08 12:16 ` Pierrick Bouvier
2024-01-29 15:26 ` Ilya Leoshkevich
2024-02-13 19:54 ` Richard Henderson
2024-02-14 14:24 ` Ilya Leoshkevich
2024-02-13 19:59 ` Richard Henderson
2024-01-02 1:57 ` [PATCH v3 23/33] linux-user: Split out mmap_h_gt_g Richard Henderson
2024-01-08 11:21 ` Pierrick Bouvier
2024-01-30 10:45 ` Ilya Leoshkevich
2024-01-02 1:57 ` [PATCH v3 24/33] tests/tcg: Remove run-test-mmap-* Richard Henderson
2024-01-08 11:07 ` Pierrick Bouvier
2024-01-30 10:46 ` Ilya Leoshkevich
2024-01-02 1:58 ` [PATCH v3 25/33] tests/tcg: Extend file in linux-madvise.c Richard Henderson
2024-01-30 13:13 ` Ilya Leoshkevich
2024-02-03 22:58 ` Richard Henderson
2024-01-02 1:58 ` [PATCH v3 26/33] *-user: Deprecate and disable -p pagesize Richard Henderson
2024-01-02 19:13 ` Philippe Mathieu-Daudé
2024-01-30 13:16 ` Ilya Leoshkevich
2024-01-02 1:58 ` [PATCH v3 27/33] cpu: Remove page_size_init Richard Henderson
2024-01-30 13:17 ` Ilya Leoshkevich
2024-01-02 1:58 ` [PATCH v3 28/33] accel/tcg: Disconnect TargetPageDataNode from page size Richard Henderson
2024-01-30 13:22 ` Ilya Leoshkevich
2024-01-02 1:58 ` [PATCH v3 29/33] linux-user: Allow TARGET_PAGE_BITS_VARY Richard Henderson
2024-01-30 13:47 ` Ilya Leoshkevich
2024-02-14 0:38 ` Richard Henderson
2024-01-02 1:58 ` [PATCH v3 30/33] target/arm: Enable TARGET_PAGE_BITS_VARY for AArch64 user-only Richard Henderson
2024-01-08 11:02 ` Pierrick Bouvier
2024-01-02 1:58 ` [PATCH v3 31/33] linux-user: Bound mmap_min_addr by host page size Richard Henderson
2024-01-03 15:32 ` Philippe Mathieu-Daudé
2024-01-30 13:48 ` Ilya Leoshkevich
2024-01-02 1:58 ` [PATCH v3 32/33] target/ppc: Enable TARGET_PAGE_BITS_VARY for user-only Richard Henderson
2024-01-30 13:51 ` Ilya Leoshkevich
2024-01-02 1:58 ` [PATCH v3 33/33] target/alpha: " Richard Henderson
2024-01-08 11:03 ` Pierrick Bouvier
2024-01-30 13:52 ` Ilya Leoshkevich
2024-01-05 10:17 ` [PATCH v3 00/33] linux-user: Improve host and guest page size handling Helge Deller
2024-01-05 13:55 ` Philippe Mathieu-Daudé
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=20240102015808.132373-1-richard.henderson@linaro.org \
--to=richard.henderson@linaro.org \
--cc=qemu-devel@nongnu.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).