From: Idan Horowitz <idan.horowitz@gmail.com>
To: qemu-riscv@nongnu.org
Cc: Alistair Francis <alistair.francis@wdc.com>,
Bin Meng <bin.meng@windriver.com>,
Palmer Dabbelt <palmer@dabbelt.com>,
qemu-devel@nongnu.org, Idan Horowitz <idan.horowitz@gmail.com>
Subject: [PATCH] target/riscv: Exit current TB after an sfence.vma
Date: Tue, 15 Mar 2022 21:23:00 +0200 [thread overview]
Message-ID: <20220315192300.250310-1-idan.horowitz@gmail.com> (raw)
If the pages which control the translation of the currently executing
instructions are changed, and then the TLB is flushed using sfence.vma
we have to exit the current TB early, to ensure we don't execute stale
instructions.
Signed-off-by: Idan Horowitz <idan.horowitz@gmail.com>
---
target/riscv/insn_trans/trans_privileged.c.inc | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/target/riscv/insn_trans/trans_privileged.c.inc b/target/riscv/insn_trans/trans_privileged.c.inc
index 53613682e8..f265e8202d 100644
--- a/target/riscv/insn_trans/trans_privileged.c.inc
+++ b/target/riscv/insn_trans/trans_privileged.c.inc
@@ -114,6 +114,13 @@ static bool trans_sfence_vma(DisasContext *ctx, arg_sfence_vma *a)
{
#ifndef CONFIG_USER_ONLY
gen_helper_tlb_flush(cpu_env);
+ /*
+ * The flush might have changed the backing physical memory of
+ * the instructions we're currently executing
+ */
+ gen_set_pc_imm(ctx, ctx->pc_succ_insn);
+ tcg_gen_exit_tb(NULL, 0);
+ ctx->base.is_jmp = DISAS_NORETURN;
return true;
#endif
return false;
--
2.35.1
next reply other threads:[~2022-03-15 19:26 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-03-15 19:23 Idan Horowitz [this message]
2022-03-15 19:37 ` [PATCH] target/riscv: Exit current TB after an sfence.vma Richard Henderson
2022-03-15 22:52 ` Alistair Francis
2022-03-15 23:42 ` Alistair Francis
2022-03-30 6:09 ` Alistair Francis
[not found] <7f383fc2.81a2.17f93c0dad7.Coremail.phantom@zju.edu.cn>
2022-03-29 23:15 ` Atish Patra
2022-03-30 6:15 ` Idan Horowitz
2022-03-30 7:28 ` Atish Patra
2022-03-30 7:35 ` Idan Horowitz
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=20220315192300.250310-1-idan.horowitz@gmail.com \
--to=idan.horowitz@gmail.com \
--cc=alistair.francis@wdc.com \
--cc=bin.meng@windriver.com \
--cc=palmer@dabbelt.com \
--cc=qemu-devel@nongnu.org \
--cc=qemu-riscv@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).