[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 4/7] Only TCG needs TLB handling
From: |
Juan Quintela |
Subject: |
[Qemu-devel] [PATCH 4/7] Only TCG needs TLB handling |
Date: |
Tue, 22 May 2012 20:32:10 +0200 |
Refactor the code that is only needed for tcg to an static function.
Call that only when tcg is enabled. We can't refactor to a dummy
function in the kvm case, as qemu can be compiled at the same time
with tcg and kvm.
Signed-off-by: Juan Quintela <address@hidden>
---
exec.c | 31 +++++++++++++++++++++----------
1 files changed, 21 insertions(+), 10 deletions(-)
diff --git a/exec.c b/exec.c
index a0494c7..b6c7675 100644
--- a/exec.c
+++ b/exec.c
@@ -1943,11 +1943,29 @@ void tb_flush_jmp_cache(CPUArchState *env, target_ulong
addr)
TB_JMP_PAGE_SIZE * sizeof(TranslationBlock *));
}
+static void tlb_reset_dirty_range_all(ram_addr_t start, ram_addr_t end,
+ uintptr_t length)
+{
+ uintptr_t start1;
+
+ /* we modify the TLB cache so that the dirty bit will be set again
+ when accessing the range */
+ start1 = (uintptr_t)qemu_safe_ram_ptr(start);
+ /* Check that we don't span multiple blocks - this breaks the
+ address comparisons below. */
+ if ((uintptr_t)qemu_safe_ram_ptr(end - 1) - start1
+ != (end - 1) - start) {
+ abort();
+ }
+ cpu_tlb_reset_dirty_all(start1, length);
+
+}
+
/* Note: start and end must be within the same ram block. */
void cpu_physical_memory_reset_dirty(ram_addr_t start, ram_addr_t end,
int dirty_flags)
{
- uintptr_t length, start1;
+ uintptr_t length;
start &= TARGET_PAGE_MASK;
end = TARGET_PAGE_ALIGN(end);
@@ -1957,16 +1975,9 @@ void cpu_physical_memory_reset_dirty(ram_addr_t start,
ram_addr_t end,
return;
cpu_physical_memory_mask_dirty_range(start, length, dirty_flags);
- /* we modify the TLB cache so that the dirty bit will be set again
- when accessing the range */
- start1 = (uintptr_t)qemu_safe_ram_ptr(start);
- /* Check that we don't span multiple blocks - this breaks the
- address comparisons below. */
- if ((uintptr_t)qemu_safe_ram_ptr(end - 1) - start1
- != (end - 1) - start) {
- abort();
+ if (tcg_enabled()) {
+ tlb_reset_dirty_range_all(start, end, length);
}
- cpu_tlb_reset_dirty_all(start1, length);
}
int cpu_physical_memory_set_dirty_tracking(int enable)
--
1.7.7.6
- [Qemu-devel] [RFC 0/7] Fix migration with lots of memory, Juan Quintela, 2012/05/22
- [Qemu-devel] [PATCH 1/7] Add spent time for migration, Juan Quintela, 2012/05/22
- [Qemu-devel] [PATCH 2/7] Add tracepoints for savevm section start/end, Juan Quintela, 2012/05/22
- [Qemu-devel] [PATCH 3/7] No need to iterate if we already are over the limit, Juan Quintela, 2012/05/22
- [Qemu-devel] [PATCH 4/7] Only TCG needs TLB handling,
Juan Quintela <=
- [Qemu-devel] [PATCH 5/7] Only calculate expected_time for stage 2, Juan Quintela, 2012/05/22
- [Qemu-devel] [PATCH 6/7] Exit loop if we have been there too long, Juan Quintela, 2012/05/22
- [Qemu-devel] [PATCH 7/7] Maintaing number of dirty pages, Juan Quintela, 2012/05/22