From: Richard Henderson <richard.henderson@linaro.org>
To: qemu-devel@nongnu.org
Cc: qemu-arm@nongnu.org, qemu-ppc@nongu.org, qemu-s390x@nongnu.org,
qemu-riscv@nongnu.org,
Alistair Francis <alistair.francis@wdc.com>
Subject: [PATCH v3 12/12] target/riscv: Simplify probing in vext_ldff
Date: Fri, 19 Jul 2024 11:07:07 +1000 [thread overview]
Message-ID: <20240719010707.1319675-13-richard.henderson@linaro.org> (raw)
In-Reply-To: <20240719010707.1319675-1-richard.henderson@linaro.org>
The current pairing of tlb_vaddr_to_host with extra is either
inefficient (user-only, with page_check_range) or incorrect
(system, with probe_pages).
For proper non-fault behaviour, use probe_access_flags with
its nonfault parameter set to true.
Acked-by: Alistair Francis <alistair.francis@wdc.com>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
---
target/riscv/vector_helper.c | 31 +++++++++++++++++--------------
1 file changed, 17 insertions(+), 14 deletions(-)
diff --git a/target/riscv/vector_helper.c b/target/riscv/vector_helper.c
index 1b4d5a8e37..10a52ceb5b 100644
--- a/target/riscv/vector_helper.c
+++ b/target/riscv/vector_helper.c
@@ -474,7 +474,6 @@ vext_ldff(void *vd, void *v0, target_ulong base,
vext_ldst_elem_fn *ldst_elem,
uint32_t log2_esz, uintptr_t ra)
{
- void *host;
uint32_t i, k, vl = 0;
uint32_t nf = vext_nf(desc);
uint32_t vm = vext_vm(desc);
@@ -493,27 +492,31 @@ vext_ldff(void *vd, void *v0, target_ulong base,
}
addr = adjust_addr(env, base + i * (nf << log2_esz));
if (i == 0) {
+ /* Allow fault on first element. */
probe_pages(env, addr, nf << log2_esz, ra, MMU_DATA_LOAD);
} else {
- /* if it triggers an exception, no need to check watchpoint */
remain = nf << log2_esz;
while (remain > 0) {
+ void *host;
+ int flags;
+
offset = -(addr | TARGET_PAGE_MASK);
- host = tlb_vaddr_to_host(env, addr, MMU_DATA_LOAD, mmu_index);
- if (host) {
-#ifdef CONFIG_USER_ONLY
- if (!page_check_range(addr, offset, PAGE_READ)) {
- vl = i;
- goto ProbeSuccess;
- }
-#else
- probe_pages(env, addr, offset, ra, MMU_DATA_LOAD);
-#endif
- } else {
+
+ /* Probe nonfault on subsequent elements. */
+ flags = probe_access_flags(env, addr, offset, MMU_DATA_LOAD,
+ mmu_index, true, &host, 0);
+
+ /*
+ * Stop if invalid (unmapped) or mmio (transaction may fail).
+ * Do not stop if watchpoint, as the spec says that
+ * first-fault should continue to access the same
+ * elements regardless of any watchpoint.
+ */
+ if (flags & ~TLB_WATCHPOINT) {
vl = i;
goto ProbeSuccess;
}
- if (remain <= offset) {
+ if (remain <= offset) {
break;
}
remain -= offset;
--
2.43.0
next prev parent reply other threads:[~2024-07-19 1:08 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-07-19 1:06 [PATCH v3 00/12] Fixes for user-only munmap races Richard Henderson
2024-07-19 1:06 ` [PATCH v3 01/12] accel/tcg: Move {set, clear}_helper_retaddr to cpu_ldst.h Richard Henderson
2024-07-19 1:06 ` [PATCH v3 02/12] target/arm: Use set/clear_helper_retaddr in helper-a64.c Richard Henderson
2024-07-19 1:06 ` [PATCH v3 03/12] target/arm: Use set/clear_helper_retaddr in SVE and SME helpers Richard Henderson
2024-07-22 11:56 ` Peter Maydell
2024-07-19 1:06 ` [PATCH v3 04/12] target/ppc/mem_helper.c: Remove a conditional from dcbz_common() Richard Henderson
2024-07-19 1:07 ` [PATCH v3 05/12] target/ppc: Hoist dcbz_size out of dcbz_common Richard Henderson
2024-07-19 1:07 ` [PATCH v3 06/12] target/ppc: Split out helper_dbczl for 970 Richard Henderson
2024-10-20 21:20 ` Guenter Roeck
2024-10-21 10:40 ` BALATON Zoltan
2024-07-19 1:07 ` [PATCH v3 07/12] target/ppc: Merge helper_{dcbz,dcbzep} Richard Henderson
2024-07-19 1:07 ` [PATCH v3 08/12] target/ppc: Improve helper_dcbz for user-only Richard Henderson
2024-07-22 12:08 ` Peter Maydell
2024-07-19 1:07 ` [PATCH v3 09/12] target/s390x: Use user_or_likely in do_access_memset Richard Henderson
2024-07-19 1:07 ` [PATCH v3 10/12] target/s390x: Use user_or_likely in access_memmove Richard Henderson
2024-07-22 12:10 ` Peter Maydell
2024-07-19 1:07 ` [PATCH v3 11/12] target/s390x: Use set/clear_helper_retaddr in mem_helper.c Richard Henderson
2024-07-22 12:15 ` Peter Maydell
2024-07-19 1:07 ` Richard Henderson [this message]
2024-07-22 16:49 ` [PATCH v3 12/12] target/riscv: Simplify probing in vext_ldff Max Chou
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=20240719010707.1319675-13-richard.henderson@linaro.org \
--to=richard.henderson@linaro.org \
--cc=alistair.francis@wdc.com \
--cc=qemu-arm@nongnu.org \
--cc=qemu-devel@nongnu.org \
--cc=qemu-ppc@nongu.org \
--cc=qemu-riscv@nongnu.org \
--cc=qemu-s390x@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).