qemu/include/exec
Daniel Henrique Barboza 1770b2f2d3 accel/tcg: Add 'size' param to probe_access_flags()
probe_access_flags() as it is today uses probe_access_full(), which in
turn uses probe_access_internal() with size = 0. probe_access_internal()
then uses the size to call the tlb_fill() callback for the given CPU.
This size param ('fault_size' as probe_access_internal() calls it) is
ignored by most existing .tlb_fill callback implementations, e.g.
arm_cpu_tlb_fill(), ppc_cpu_tlb_fill(), x86_cpu_tlb_fill() and
mips_cpu_tlb_fill() to name a few.

But RISC-V riscv_cpu_tlb_fill() actually uses it. The 'size' parameter
is used to check for PMP (Physical Memory Protection) access. This is
necessary because PMP does not make any guarantees about all the bytes
of the same page having the same permissions, i.e. the same page can
have different PMP properties, so we're forced to make sub-page range
checks. To allow RISC-V emulation to do a probe_acess_flags() that
covers PMP, we need to either add a 'size' param to the existing
probe_acess_flags() or create a new interface (e.g.
probe_access_range_flags).

There are quite a few probe_* APIs already, so let's add a 'size' param
to probe_access_flags() and re-use this API. This is done by open coding
what probe_access_full() does inside probe_acess_flags() and passing the
'size' param to probe_acess_internal(). Existing probe_access_flags()
callers use size = 0 to not change their current API usage. 'size' is
asserted to enforce single page access like probe_access() already does.

No behavioral changes intended.

Signed-off-by: Daniel Henrique Barboza <dbarboza@ventanamicro.com>
Message-Id: <20230223234427.521114-2-dbarboza@ventanamicro.com>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
2023-02-28 10:32:31 -10:00
..
user nomaintainer: Fix Lesser GPL version number 2020-11-15 17:04:40 +01:00
address-spaces.h Clean up header guards that don't match their file name 2016-07-12 16:19:16 +02:00
confidential-guest-support.h confidential guest support: Introduce cgs "ready" flag 2021-02-08 16:57:38 +11:00
cpu-all.h accel/tcg: Simplify page_get/alloc_target_data 2022-10-26 11:11:28 +10:00
cpu-common.h exec/cpu-common: add qemu_ram_get_fd() 2022-10-26 14:56:42 -04:00
cpu-defs.h cpu-defs.h: Expose CPUTLBEntryFull to non-TCG code 2023-02-27 13:27:04 +00:00
cpu_ldst.h tcg: Add guest load/store primitives for TCGv_i128 2023-02-04 06:19:42 -10:00
cputlb.h overall/alpha tcg cpus|hppa: Fix Lesser GPL version number 2020-11-15 16:43:54 +01:00
exec-all.h accel/tcg: Add 'size' param to probe_access_flags() 2023-02-28 10:32:31 -10:00
gdbstub.h gdbstub: Adjust gdb_syscall_complete_cb declaration 2022-06-28 04:35:52 +05:30
gen-icount.h exec: Remove unused 'qemu/timer.h' timer 2023-02-27 22:29:01 +01:00
helper-gen.h tracing: excise the tcg related from tracetool 2022-02-09 12:08:42 +00:00
helper-head.h exec/helper-head: Include missing "fpu/softfloat-types.h" header 2023-02-28 10:32:31 -10:00
helper-proto.h tcg: Mark tcg helpers noinline to avoid an issue with LTO 2023-01-23 14:39:48 -10:00
helper-tcg.h tracing: remove the trace-tcg includes from the build 2022-02-09 12:08:42 +00:00
hwaddr.h bulk: Rename TARGET_FMT_plx -> HWADDR_FMT_plx 2023-01-18 11:14:34 +01:00
ioport.h nomaintainer: Fix Lesser GPL version number 2020-11-15 17:04:40 +01:00
log.h include/exec/log: Do not reference QemuLogFile directly 2022-04-20 10:51:11 -07:00
memattrs.h softmmu/physmem: Introduce MemTxAttrs::memory field and MEMTX_ACCESS_ERROR 2022-03-21 10:10:58 +01:00
memop.h Replace TARGET_WORDS_BIGENDIAN 2022-04-06 10:50:37 +02:00
memopidx.h Normalize header guard symbol definition 2022-05-11 16:50:26 +02:00
memory-internal.h exec/memory: Expose memory_region_access_valid() 2023-01-09 13:50:13 +01:00
memory.h intel-iommu: Document iova_tree 2023-01-27 11:47:02 -05:00
memory_ldst.h.inc exec/memory_ldst: Use correct type sizes 2021-05-26 08:35:51 -07:00
memory_ldst_cached.h.inc exec/memory_ldst_cached: Use correct type size 2021-05-26 08:35:51 -07:00
memory_ldst_phys.h.inc exec/memory_ldst_phys: Use correct type sizes 2021-05-26 08:35:51 -07:00
page-vary.h include: move target page bits declaration to page-vary.h 2022-04-06 14:31:43 +02:00
plugin-gen.h include: Include headers where needed 2023-01-08 01:54:22 -05:00
poison.h mips: Always include nanomips disassembler 2023-01-13 16:22:53 +01:00
ram_addr.h migration: Use non-atomic ops for clear log bitmap 2022-11-21 11:58:10 +01:00
ramblock.h migration: Use non-atomic ops for clear log bitmap 2022-11-21 11:58:10 +01:00
ramlist.h qapi: introduce x-query-ramblock QMP command 2021-11-02 15:55:14 +00:00
replay-core.h replay: Extract core API to 'exec/replay-core.h' 2023-02-27 22:29:01 +01:00
target_page.h migration: Make savevm.c target independent 2017-05-18 19:21:00 +02:00
translate-all.h accel/tcg: Move remainder of page locking to tb-maint.c 2022-12-20 17:11:12 -08:00
translator.h target/s390x: fake instruction loading when handling 'ex' 2022-10-31 20:37:59 +00:00