[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH qom-cpu 39/59] translate-all: Abstract tb_phys_inval
From: |
Andreas Färber |
Subject: |
[Qemu-devel] [PATCH qom-cpu 39/59] translate-all: Abstract tb_phys_invalidate() with qemu_for_each_cpu() |
Date: |
Sun, 9 Jun 2013 21:13:06 +0200 |
Signed-off-by: Andreas Färber <address@hidden>
---
translate-all.c | 27 ++++++++++++++++++++-------
1 file changed, 20 insertions(+), 7 deletions(-)
diff --git a/translate-all.c b/translate-all.c
index 78a6f4d..8e98a13 100644
--- a/translate-all.c
+++ b/translate-all.c
@@ -819,14 +819,31 @@ static inline void tb_reset_jump(TranslationBlock *tb,
int n)
tb_set_jmp_target(tb, n, (uintptr_t)(tb->tc_ptr + tb->tb_next_offset[n]));
}
+typedef struct TBPhysInvalidateRemoveData {
+ TranslationBlock *tb;
+ unsigned int h;
+} TBPhysInvalidateRemoveData;
+
+static void tb_phys_invalidate_remove_one(CPUState *cpu, void *data)
+{
+ TBPhysInvalidateRemoveData *s = data;
+ CPUArchState *env = cpu->env_ptr;
+
+ if (env->tb_jmp_cache[s->h] == s->tb) {
+ env->tb_jmp_cache[s->h] = NULL;
+ }
+}
+
/* invalidate one TB */
void tb_phys_invalidate(TranslationBlock *tb, tb_page_addr_t page_addr)
{
- CPUArchState *env;
PageDesc *p;
unsigned int h, n1;
tb_page_addr_t phys_pc;
TranslationBlock *tb1, *tb2;
+ TBPhysInvalidateRemoveData rm_data = {
+ .tb = tb,
+ };
/* remove the TB from the hash list */
phys_pc = tb->page_addr[0] + (tb->pc & ~TARGET_PAGE_MASK);
@@ -848,12 +865,8 @@ void tb_phys_invalidate(TranslationBlock *tb,
tb_page_addr_t page_addr)
tcg_ctx.tb_ctx.tb_invalidated_flag = 1;
/* remove the TB from the hash list */
- h = tb_jmp_cache_hash_func(tb->pc);
- for (env = first_cpu; env != NULL; env = env->next_cpu) {
- if (env->tb_jmp_cache[h] == tb) {
- env->tb_jmp_cache[h] = NULL;
- }
- }
+ rm_data.h = tb_jmp_cache_hash_func(tb->pc);
+ qemu_for_each_cpu(tb_phys_invalidate_remove_one, &rm_data);
/* suppress this TB from the two jump lists */
tb_jmp_remove(tb, 0);
--
1.8.1.4
- Re: [Qemu-devel] [PATCH qom-cpu 31/59] monitor: Simplify do_info_numa(), (continued)
[Qemu-devel] [PATCH qom-cpu 28/59] cpu: Replace cpu_single_env with CPUState cpu_single_cpu, Andreas Färber, 2013/06/09
[Qemu-devel] [PATCH qom-cpu 32/59] kvm: Simplify kvm_{insert, remove, remove_all}_breakpoint[s](), Andreas Färber, 2013/06/09
[Qemu-devel] [PATCH qom-cpu 33/59] kvm: Simplify kvm_remove_all_breakpoints() further, Andreas Färber, 2013/06/09
[Qemu-devel] [PATCH qom-cpu 34/59] kvm: Change kvm_remove_all_breakpoints() argument to CPUState, Andreas Färber, 2013/06/09
[Qemu-devel] [PATCH qom-cpu 35/59] linux-user: Simplify start_exclusive(), Andreas Färber, 2013/06/09
[Qemu-devel] [PATCH qom-cpu 36/59] linux-user/elfload: Abstract fill_note_info() with qemu_for_each_cpu(), Andreas Färber, 2013/06/09
[Qemu-devel] [PATCH qom-cpu 38/59] translate-all: Abstract tb_flush() with qemu_for_each_cpu(), Andreas Färber, 2013/06/09
[Qemu-devel] [PATCH qom-cpu 37/59] target-i386: Abstract cpu_x86_inject_mce() with qemu_for_each_cpu(), Andreas Färber, 2013/06/09
[Qemu-devel] [PATCH qom-cpu 39/59] translate-all: Abstract tb_phys_invalidate() with qemu_for_each_cpu(),
Andreas Färber <=
[Qemu-devel] [PATCH qom-cpu 40/59] target-ppc: Abstract helper_msgsnd() with qemu_for_each_cpu(), Andreas Färber, 2013/06/09
[Qemu-devel] [PATCH qom-cpu 42/59] target-mips: Abstract helper_evpe() with qemu_for_each_cpu(), Andreas Färber, 2013/06/09
[Qemu-devel] [PATCH qom-cpu 41/59] target-mips: Abstract helper_dvpe() with qemu_for_each_cpu(), Andreas Färber, 2013/06/09
[Qemu-devel] [PATCH qom-cpu 43/59] kvmclock: Abstract kvmclock_vm_state_change() with qemu_for_each_cpu(), Andreas Färber, 2013/06/09
[Qemu-devel] [PATCH qom-cpu 45/59] pc: Abstract pic_irq_request() with qemu_for_each_cpu(), Andreas Färber, 2013/06/09
[Qemu-devel] [PATCH qom-cpu 44/59] kvmvapic: Abstract vapic_enable_tpr_reporting() with qemu_for_each_cpu(), Andreas Färber, 2013/06/09
[Qemu-devel] [PATCH qom-cpu 46/59] ppc: Abstract ppce500_set_mpic_proxy() with qemu_for_each_cpu(), Andreas Färber, 2013/06/09
[Qemu-devel] [PATCH qom-cpu 48/59] cpus: Abstract all_cpu_threads_idle() with qemu_for_each_cpu(), Andreas Färber, 2013/06/09
[Qemu-devel] [PATCH qom-cpu 47/59] spapr: Abstract spapr_fix_cpu_dt() with qemu_for_each_cpu(), Andreas Färber, 2013/06/09