qemu-e2k/target/i386
Gregory Price 9dab7bbb01 target/i386/tcg: Enable page walking from MMIO memory
CXL emulation of interleave requires read and write hooks due to
requirement for subpage granularity. The Linux kernel stack now enables
using this memory as conventional memory in a separate NUMA node. If a
process is deliberately forced to run from that node
$ numactl --membind=1 ls
the page table walk on i386 fails.

Useful part of backtrace:

    (cpu=cpu@entry=0x555556fd9000, fmt=fmt@entry=0x555555fe3378 "cpu_io_recompile: could not find TB for pc=%p")
    at ../../cpu-target.c:359
    (retaddr=0, addr=19595792376, attrs=..., xlat=<optimized out>, cpu=0x555556fd9000, out_offset=<synthetic pointer>)
    at ../../accel/tcg/cputlb.c:1339
    (cpu=0x555556fd9000, full=0x7fffee0d96e0, ret_be=ret_be@entry=0, addr=19595792376, size=size@entry=8, mmu_idx=4, type=MMU_DATA_LOAD, ra=0) at ../../accel/tcg/cputlb.c:2030
    (cpu=cpu@entry=0x555556fd9000, p=p@entry=0x7ffff56fddc0, mmu_idx=<optimized out>, type=type@entry=MMU_DATA_LOAD, memop=<optimized out>, ra=ra@entry=0) at ../../accel/tcg/cputlb.c:2356
    (cpu=cpu@entry=0x555556fd9000, addr=addr@entry=19595792376, oi=oi@entry=52, ra=ra@entry=0, access_type=access_type@entry=MMU_DATA_LOAD) at ../../accel/tcg/cputlb.c:2439
    at ../../accel/tcg/ldst_common.c.inc:301
    at ../../target/i386/tcg/sysemu/excp_helper.c:173
    (err=0x7ffff56fdf80, out=0x7ffff56fdf70, mmu_idx=0, access_type=MMU_INST_FETCH, addr=18446744072116178925, env=0x555556fdb7c0)
    at ../../target/i386/tcg/sysemu/excp_helper.c:578
    (cs=0x555556fd9000, addr=18446744072116178925, size=<optimized out>, access_type=MMU_INST_FETCH, mmu_idx=0, probe=<optimized out>, retaddr=0) at ../../target/i386/tcg/sysemu/excp_helper.c:604

Avoid this by plumbing the address all the way down from
x86_cpu_tlb_fill() where is available as retaddr to the actual accessors
which provide it to probe_access_full() which already handles MMIO accesses.

Resolves: https://gitlab.com/qemu-project/qemu/-/issues/2180
Resolves: https://gitlab.com/qemu-project/qemu/-/issues/2220
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Suggested-by: Peter Maydell <peter.maydell@linaro.org>
Signed-off-by: Gregory Price <gregory.price@memverge.com>
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
Message-ID: <20240307155304.31241-2-Jonathan.Cameron@huawei.com>
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
2024-03-26 14:23:50 +01:00
..
hvf target/i386/hvf: Use CPUState typedef 2024-03-12 12:03:58 +01:00
kvm vmbus: Print a warning when enabled without the recommended set of features 2024-03-08 14:18:56 +01:00
nvmm bulk: Call in place single use cpu_env() 2024-03-12 11:46:16 +01:00
tcg target/i386/tcg: Enable page walking from MMIO memory 2024-03-26 14:23:50 +01:00
whpx bulk: Call in place single use cpu_env() 2024-03-12 11:46:16 +01:00
arch_dump.c
arch_memory_mapping.c
cpu-dump.c
cpu-internal.h
cpu-param.h
cpu-qom.h
cpu-sysemu.c target: Improve error reporting for CpuModelInfo member @props 2024-03-12 14:03:00 +01:00
cpu.c target/i386: fix direction of "32-bit MMU" test 2024-03-18 22:53:23 +01:00
cpu.h target/i386: fix direction of "32-bit MMU" test 2024-03-18 22:53:23 +01:00
gdbstub.c
helper.c target/i386: Revert monitor_puts() in do_inject_x86_mce() 2024-03-20 09:47:00 +01:00
helper.h
host-cpu.c
host-cpu.h
Kconfig
machine.c
meson.build
monitor.c target/i386/monitor: Remove unused 'hw/i386/pc.h' header 2024-02-20 20:34:21 +03:00
ops_sse.h
sev-sysemu-stub.c
sev.c target/i386/sev: Fix missing ERRP_GUARD() for error_prepend() 2024-03-09 18:51:45 +01:00
sev.h
svm.h
trace-events
trace.h
xsave_helper.c