[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 18/29] translate-all: make less of tb_invalidate_phy
From: |
Paolo Bonzini |
Subject: |
[Qemu-devel] [PATCH 18/29] translate-all: make less of tb_invalidate_phys_page_range depend on is_cpu_write_access |
Date: |
Mon, 27 Apr 2015 18:28:26 +0200 |
is_cpu_write_access is only set if tb_invalidate_phys_page_range is called
from tb_invalidate_phys_page_fast, and hence from notdirty_mem_write.
However:
- the code bitmap can be built directly in tb_invalidate_phys_page_fast
(unconditionally, since is_cpu_write_access would always be passed as 1);
- the virtual address is not needed to mark the page as "not containing
code" (dirty code bitmap = 1), so we can also remove that use of
is_cpu_write_access. For calls of tb_invalidate_phys_page_range
that do not come from notdirty_mem_write, the next call to
notdirty_mem_write will notice that the page does not contain code
anymore, and will fix up the TLB entry.
The parameter needs to remain in order to guard accesses to cpu->mem_io_pc.
Signed-off-by: Paolo Bonzini <address@hidden>
---
translate-all.c | 15 ++++++---------
1 file changed, 6 insertions(+), 9 deletions(-)
diff --git a/translate-all.c b/translate-all.c
index 0283edc..855b329 100644
--- a/translate-all.c
+++ b/translate-all.c
@@ -1082,12 +1082,6 @@ void tb_invalidate_phys_page_range(tb_page_addr_t start,
tb_page_addr_t end,
if (!p) {
return;
}
- if (!p->code_bitmap &&
- ++p->code_write_count >= SMC_BITMAP_USE_THRESHOLD &&
- is_cpu_write_access) {
- /* build code bitmap */
- build_page_bitmap(p);
- }
#if defined(TARGET_HAS_PRECISE_SMC)
if (cpu != NULL) {
env = cpu->env_ptr;
@@ -1157,9 +1151,7 @@ void tb_invalidate_phys_page_range(tb_page_addr_t start,
tb_page_addr_t end,
/* if no code remaining, no need to continue to use slow writes */
if (!p->first_tb) {
invalidate_page_bitmap(p);
- if (is_cpu_write_access) {
- tlb_unprotect_code(start);
- }
+ tlb_unprotect_code(start);
}
#endif
#ifdef TARGET_HAS_PRECISE_SMC
@@ -1192,6 +1184,11 @@ void tb_invalidate_phys_page_fast(tb_page_addr_t start,
int len)
if (!p) {
return;
}
+ if (!p->code_bitmap &&
+ ++p->code_write_count >= SMC_BITMAP_USE_THRESHOLD) {
+ /* build code bitmap */
+ build_page_bitmap(p);
+ }
if (p->code_bitmap) {
unsigned int nr;
unsigned long b;
--
1.8.3.1
- [Qemu-devel] [PATCH 08/29] ui/console: remove dpy_gfx_update_dirty, (continued)
- [Qemu-devel] [PATCH 08/29] ui/console: remove dpy_gfx_update_dirty, Paolo Bonzini, 2015/04/27
- [Qemu-devel] [PATCH 10/29] kvm: accept non-mapped memory in kvm_dirty_pages_log_change, Paolo Bonzini, 2015/04/27
- [Qemu-devel] [PATCH 09/29] memory: track DIRTY_MEMORY_CODE in mr->dirty_log_mask, Paolo Bonzini, 2015/04/27
- [Qemu-devel] [PATCH 11/29] memory: include DIRTY_MEMORY_MIGRATION in the dirty log mask, Paolo Bonzini, 2015/04/27
- [Qemu-devel] [PATCH 12/29] kvm: remove special handling of DIRTY_MEMORY_MIGRATION in the dirty log mask, Paolo Bonzini, 2015/04/27
- [Qemu-devel] [PATCH 13/29] ram_addr: tweaks to xen_modified_memory, Paolo Bonzini, 2015/04/27
- [Qemu-devel] [PATCH 15/29] exec: move functions to translate-all.h, Paolo Bonzini, 2015/04/27
- [Qemu-devel] [PATCH 14/29] exec: use memory_region_get_dirty_log_mask to optimize dirty tracking, Paolo Bonzini, 2015/04/27
- [Qemu-devel] [PATCH 16/29] translate-all: remove unnecessary argument to tb_invalidate_phys_range, Paolo Bonzini, 2015/04/27
- [Qemu-devel] [PATCH 17/29] cputlb: remove useless arguments to tlb_unprotect_code_phys, rename, Paolo Bonzini, 2015/04/27
- [Qemu-devel] [PATCH 18/29] translate-all: make less of tb_invalidate_phys_page_range depend on is_cpu_write_access,
Paolo Bonzini <=
- [Qemu-devel] [PATCH 21/29] exec: only check relevant bitmaps for cleanliness, Paolo Bonzini, 2015/04/27
- [Qemu-devel] [PATCH 20/29] exec: invert return value of cpu_physical_memory_get_clean, rename, Paolo Bonzini, 2015/04/27
- [Qemu-devel] [PATCH 22/29] memory: do not touch code dirty bitmap unless TCG is enabled, Paolo Bonzini, 2015/04/27
- [Qemu-devel] [PATCH 19/29] exec: pass client mask to cpu_physical_memory_set_dirty_range, Paolo Bonzini, 2015/04/27
- [Qemu-devel] [PATCH 23/29] bitmap: add atomic set functions, Paolo Bonzini, 2015/04/27
- [Qemu-devel] [PATCH 24/29] bitmap: add atomic test and clear, Paolo Bonzini, 2015/04/27
- [Qemu-devel] [PATCH 25/29] memory: use atomic ops for setting dirty memory bits, Paolo Bonzini, 2015/04/27
- [Qemu-devel] [PATCH 27/29] memory: replace cpu_physical_memory_reset_dirty() with test-and-clear, Paolo Bonzini, 2015/04/27
- [Qemu-devel] [PATCH 28/29] memory: make cpu_physical_memory_sync_dirty_bitmap() fully atomic, Paolo Bonzini, 2015/04/27
- [Qemu-devel] [PATCH 26/29] migration: move dirty bitmap sync to ram_addr.h, Paolo Bonzini, 2015/04/27