[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH 1b/4] accel/tcg: Unindent tb_invalidate_phys_page_unwind
From: |
Philippe Mathieu-Daudé |
Subject: |
[PATCH 1b/4] accel/tcg: Unindent tb_invalidate_phys_page_unwind |
Date: |
Wed, 28 Dec 2022 13:49:18 +0100 |
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
[PMD: Split patch in 2]
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
accel/tcg/tb-maint.c | 53 ++++++++++++++++++++++----------------------
1 file changed, 27 insertions(+), 26 deletions(-)
diff --git a/accel/tcg/tb-maint.c b/accel/tcg/tb-maint.c
index c9b8d3c6c3..b3d6529ae2 100644
--- a/accel/tcg/tb-maint.c
+++ b/accel/tcg/tb-maint.c
@@ -1024,6 +1024,11 @@ void tb_invalidate_phys_page(tb_page_addr_t addr)
*/
bool tb_invalidate_phys_page_unwind(tb_page_addr_t addr, uintptr_t pc)
{
+ TranslationBlock *current_tb;
+ bool current_tb_modified;
+ TranslationBlock *tb;
+ PageForEachNext n;
+
/*
* Without precise smc semantics, or when outside of a TB,
* we can skip to invalidate.
@@ -1037,36 +1042,32 @@ bool tb_invalidate_phys_page_unwind(tb_page_addr_t
addr, uintptr_t pc)
}
assert_memory_lock();
- {
- TranslationBlock *current_tb = tcg_tb_lookup(pc);
- bool current_tb_modified = false;
- TranslationBlock *tb;
- PageForEachNext n;
+ current_tb = tcg_tb_lookup(pc);
- addr &= TARGET_PAGE_MASK;
+ addr &= TARGET_PAGE_MASK;
+ current_tb_modified = false;
- PAGE_FOR_EACH_TB(addr, addr + TARGET_PAGE_SIZE, unused, tb, n) {
- if (current_tb == tb &&
- (tb_cflags(current_tb) & CF_COUNT_MASK) != 1) {
- /*
- * If we are modifying the current TB, we must stop its
- * execution. We could be more precise by checking that
- * the modification is after the current PC, but it would
- * require a specialized function to partially restore
- * the CPU state.
- */
- current_tb_modified = true;
- cpu_restore_state_from_tb(current_cpu, current_tb, pc);
- }
- tb_phys_invalidate__locked(tb);
+ PAGE_FOR_EACH_TB(addr, addr + TARGET_PAGE_SIZE, unused, tb, n) {
+ if (current_tb == tb &&
+ (tb_cflags(current_tb) & CF_COUNT_MASK) != 1) {
+ /*
+ * If we are modifying the current TB, we must stop its
+ * execution. We could be more precise by checking that
+ * the modification is after the current PC, but it would
+ * require a specialized function to partially restore
+ * the CPU state.
+ */
+ current_tb_modified = true;
+ cpu_restore_state_from_tb(current_cpu, current_tb, pc);
}
+ tb_phys_invalidate__locked(tb);
+ }
- if (current_tb_modified) {
- /* Force execution of one insn next time. */
- CPUState *cpu = current_cpu;
- cpu->cflags_next_tb = 1 | CF_NOIRQ | curr_cflags(current_cpu);
- return true;
- }
+ if (current_tb_modified) {
+ /* Force execution of one insn next time. */
+ CPUState *cpu = current_cpu;
+ cpu->cflags_next_tb = 1 | CF_NOIRQ | curr_cflags(current_cpu);
+ return true;
}
return false;
}
--
2.38.1
- [PATCH 0/4] accel/tcg: Fixes for user-only page tracking, Richard Henderson, 2022/12/24
- [PATCH 3/4] accel/tcg: Handle false negative lookup in page_check_range, Richard Henderson, 2022/12/24
- Re: [PATCH 3/4] accel/tcg: Handle false negative lookup in page_check_range, Philippe Mathieu-Daudé, 2022/12/28
- Re: [PATCH 3/4] accel/tcg: Handle false negative lookup in page_check_range, Philippe Mathieu-Daudé, 2022/12/28
- Re: [PATCH 3/4] accel/tcg: Handle false negative lookup in page_check_range, Richard Henderson, 2022/12/28
- Re: [PATCH 3/4] accel/tcg: Handle false negative lookup in page_check_range, Philippe Mathieu-Daudé, 2022/12/28
- Re: [PATCH 3/4] accel/tcg: Handle false negative lookup in page_check_range, Richard Henderson, 2022/12/28
- Re: [PATCH 3/4] accel/tcg: Handle false negative lookup in page_check_range, Philippe Mathieu-Daudé, 2022/12/28
[PATCH 2/4] accel/tcg: Use g_free_rcu for user-exec interval trees, Richard Henderson, 2022/12/24