[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PULL 18/23] accel/tcg: re-factor non-RAM execution code
From: |
Alex Bennée |
Subject: |
[PULL 18/23] accel/tcg: re-factor non-RAM execution code |
Date: |
Thu, 18 Feb 2021 09:47:01 +0000 |
There is no real need to use CF_NOCACHE here. As long as the TB isn't
linked to other TBs or included in the QHT or jump cache then it will
only get executed once.
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Message-Id: <20210213130325.14781-19-alex.bennee@linaro.org>
diff --git a/accel/tcg/translate-all.c b/accel/tcg/translate-all.c
index c0b98e76b9..72b3c663c5 100644
--- a/accel/tcg/translate-all.c
+++ b/accel/tcg/translate-all.c
@@ -1779,7 +1779,8 @@ static inline void tb_page_add(PageDesc *p,
TranslationBlock *tb,
#endif
}
-/* add a new TB and link it to the physical page tables. phys_page2 is
+/*
+ * Add a new TB and link it to the physical page tables. phys_page2 is
* (-1) to indicate that only one page contains the TB.
*
* Called with mmap_lock held for user-mode emulation.
@@ -1798,17 +1799,6 @@ tb_link_page(TranslationBlock *tb, tb_page_addr_t
phys_pc,
assert_memory_lock();
- if (phys_pc == -1) {
- /*
- * If the TB is not associated with a physical RAM page then
- * it must be a temporary one-insn TB, and we have nothing to do
- * except fill in the page_addr[] fields.
- */
- assert(tb->cflags & CF_NOCACHE);
- tb->page_addr[0] = tb->page_addr[1] = -1;
- return tb;
- }
-
/*
* Add the TB to the page list, acquiring first the pages's locks.
* We keep the locks held until after inserting the TB in the hash table,
@@ -1881,9 +1871,8 @@ TranslationBlock *tb_gen_code(CPUState *cpu,
phys_pc = get_page_addr_code(env, pc);
if (phys_pc == -1) {
- /* Generate a temporary TB with 1 insn in it */
- cflags &= ~CF_COUNT_MASK;
- cflags |= CF_NOCACHE | 1;
+ /* Generate a one-shot TB with 1 insn in it */
+ cflags = (cflags & ~CF_COUNT_MASK) | 1;
}
cflags &= ~CF_CLUSTER_MASK;
@@ -2097,6 +2086,17 @@ TranslationBlock *tb_gen_code(CPUState *cpu,
tb_reset_jump(tb, 1);
}
+ /*
+ * If the TB is not associated with a physical RAM page then
+ * it must be a temporary one-insn TB, and we have nothing to do
+ * except fill in the page_addr[] fields. Return early before
+ * attempting to link to other TBs or add to the lookup table.
+ */
+ if (phys_pc == -1) {
+ tb->page_addr[0] = tb->page_addr[1] = -1;
+ return tb;
+ }
+
/* check next page if needed */
virt_page2 = (pc + tb->size - 1) & TARGET_PAGE_MASK;
phys_page2 = -1;
--
2.20.1
- [PULL 04/23] contrib: Don't use '#' flag of printf format, (continued)
- [PULL 04/23] contrib: Don't use '#' flag of printf format, Alex Bennée, 2021/02/18
- [PULL 02/23] plugins: add API to return a name for a IO device, Alex Bennée, 2021/02/18
- [PULL 10/23] exec: Move TranslationBlock typedef to qemu/typedefs.h, Alex Bennée, 2021/02/18
- [PULL 03/23] plugins: new hwprofile plugin, Alex Bennée, 2021/02/18
- [PULL 05/23] contrib: Fix some code style problems, ERROR: "foo * bar" should be "foo *bar", Alex Bennée, 2021/02/18
- [PULL 07/23] contrib: space required after that ',', Alex Bennée, 2021/02/18
- [PULL 08/23] contrib: Open brace '{' following struct go on the same line, Alex Bennée, 2021/02/18
- [PULL 06/23] contrib: Add spaces around operator, Alex Bennée, 2021/02/18
- [PULL 11/23] accel/tcg: Create io_recompile_replay_branch hook, Alex Bennée, 2021/02/18
- [PULL 15/23] tests/acceptance: add a new set of tests to exercise plugins, Alex Bennée, 2021/02/18
- [PULL 18/23] accel/tcg: re-factor non-RAM execution code,
Alex Bennée <=
- [PULL 21/23] tests/acceptance: add a new tests to detect counting errors, Alex Bennée, 2021/02/18
- [PULL 16/23] accel/tcg: actually cache our partial icount TB, Alex Bennée, 2021/02/18
- [PULL 22/23] tests/plugin: allow memory plugin to do both inline and callbacks, Alex Bennée, 2021/02/18
- [PULL 13/23] target/sh4: Create superh_io_recompile_replay_branch, Alex Bennée, 2021/02/18
- [PULL 09/23] accel/tcg/plugin-gen: fix the call signature for inline callbacks, Alex Bennée, 2021/02/18
- [PULL 19/23] accel/tcg: remove CF_NOCACHE and special cases, Alex Bennée, 2021/02/18
- [PULL 23/23] tests/acceptance: add a memory callback check, Alex Bennée, 2021/02/18
- [PULL 17/23] accel/tcg: cache single instruction TB on pending replay exception, Alex Bennée, 2021/02/18
- [PULL 20/23] accel/tcg: allow plugin instrumentation to be disable via cflags, Alex Bennée, 2021/02/18
- [PULL 14/23] tests/plugin: expand insn test to detect duplicate instructions, Alex Bennée, 2021/02/18