[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH v1 11/15] accel/tcg: add tb_invalidate_phys_page_range tracepoint
From: |
Alex Bennée |
Subject: |
[PATCH v1 11/15] accel/tcg: add tb_invalidate_phys_page_range tracepoint |
Date: |
Fri, 8 Apr 2022 17:47:38 +0100 |
This gives a little more insight into what is going on as we
invalidate a range of TBs.
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
---
accel/tcg/translate-all.c | 9 +++++++++
accel/tcg/trace-events | 1 +
2 files changed, 10 insertions(+)
diff --git a/accel/tcg/translate-all.c b/accel/tcg/translate-all.c
index b0009177b9..625c46dd9b 100644
--- a/accel/tcg/translate-all.c
+++ b/accel/tcg/translate-all.c
@@ -1671,6 +1671,7 @@ tb_invalidate_phys_page_range__locked(struct
page_collection *pages,
TranslationBlock *tb;
tb_page_addr_t tb_start, tb_end;
int n;
+ int checked = 0, removed = 0;
#ifdef TARGET_HAS_PRECISE_SMC
CPUState *cpu = current_cpu;
CPUArchState *env = NULL;
@@ -1695,6 +1696,7 @@ tb_invalidate_phys_page_range__locked(struct
page_collection *pages,
the code */
PAGE_FOR_EACH_TB(p, tb, n) {
assert_page_locked(p);
+ checked++;
/* NOTE: this is subtle as a TB may span two physical pages */
if (n == 0) {
/* NOTE: tb_end may be after the end of the page, but
@@ -1728,13 +1730,20 @@ tb_invalidate_phys_page_range__locked(struct
page_collection *pages,
}
#endif /* TARGET_HAS_PRECISE_SMC */
tb_phys_invalidate__locked(tb);
+ removed++;
}
}
+
+
#if !defined(CONFIG_USER_ONLY)
/* if no code remaining, no need to continue to use slow writes */
if (!p->first_tb) {
invalidate_page_bitmap(p);
tlb_unprotect_code(start);
+ trace_tb_invalidate_phys_page_range(checked, removed, 0);
+ } else {
+ TranslationBlock *tb = (TranslationBlock *) p->first_tb;
+ trace_tb_invalidate_phys_page_range(checked, removed, tb->pc);
}
#endif
#ifdef TARGET_HAS_PRECISE_SMC
diff --git a/accel/tcg/trace-events b/accel/tcg/trace-events
index c034649dc2..fdc64e1423 100644
--- a/accel/tcg/trace-events
+++ b/accel/tcg/trace-events
@@ -15,5 +15,6 @@ memory_notdirty_set_dirty(uint64_t vaddr) "0x%" PRIx64
# translate-all.c
tb_phys_invalidate(void *tb, uintptr_t pc) "tb:%p, pc:0x%"PRIxPTR""
+tb_invalidate_phys_page_range(int checked, int removed, uintptr_t ftb_pc)
"checked:%d removed:%d first_tb_pc:0x%"PRIxPTR""
tb_invalidate_phys_page_fast(uint64_t page_start, int len, uint64_t ret, int
wc, void *bmap) "addr:0x%" PRIx64 "/%d pc:0x%" PRIx64" wc:%d/%p"
translate_block(void *tb, uintptr_t pc, const void *tb_code) "tb:%p,
pc:0x%"PRIxPTR", tb_code:%p"
--
2.30.2
- Re: [PATCH v1 06/15] monitor: expose monitor_puts to rest of code, (continued)
- [PATCH v1 05/15] accel/tcg: add tb_invalidate_phy_pages_fast tracepoint, Alex Bennée, 2022/04/08
- [PATCH v1 12/15] tests/tcg: add memory-sve test for aarch64, Alex Bennée, 2022/04/08
- [PATCH v1 08/15] disas: use result of ->read_memory_func, Alex Bennée, 2022/04/08
- [PATCH v1 10/15] cputlb: add tracepoints for TB invalidation, Alex Bennée, 2022/04/08
- [PATCH v1 13/15] plugins: extend execlog to filter matches, Alex Bennée, 2022/04/08
- [PATCH v1 11/15] accel/tcg: add tb_invalidate_phys_page_range tracepoint,
Alex Bennée <=
- [PATCH v1 15/15] accel/tcg: add heuristic to invalidate al TBs in a page [hack!], Alex Bennée, 2022/04/08
- [PATCH v1 14/15] plugins: Assert mmu_idx in range before use in qemu_plugin_get_hwaddr, Alex Bennée, 2022/04/08