Message ID | 20230901022331.115247-1-richard.henderson@linaro.org |
---|---|
Headers | show |
Series | linux-user: Improve host and guest page size handling | expand |
On Thu, Aug 31, 2023 at 8:23 PM Richard Henderson < richard.henderson@linaro.org> wrote: > This option controls the host page size. From the mis-usage in > our own testsuite, this is easily confused with guest page size. > > The only thing that occurs when changing the host page size is > that stuff breaks, because one cannot actually change the host > page size. Therefore reject all but the no-op setting as part > of the deprecation process. > > Cc: Warner Losh <imp@bsdimp.com> > Signed-off-by: Richard Henderson <richard.henderson@linaro.org> > --- > docs/about/deprecated.rst | 7 +++++++ > docs/user/main.rst | 3 --- > bsd-user/main.c | 9 +++++---- > linux-user/main.c | 11 ++++++----- > 4 files changed, 18 insertions(+), 12 deletions(-) > Reviewed-by: Warner Losh <imp@bsdimp.com>
Ping. r~ On 8/31/23 19:22, Richard Henderson wrote: > Based-on: 20230829220228.928506-1-richard.henderson@linaro.org > ("[PATCH v5 00/20] linux-user: Implement VDSOs") > > Changes for v2: > * Minor adjustments to bsd-user. > * Update docs for deprecation. > * Philippe's r-b. > > 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.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 +- > softmmu/physmem.c | 17 +- > softmmu/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 >