From 1a768018c212db753ee418db079d8cda40d8ce74 Mon Sep 17 00:00:00 2001 From: Sergey Fedorov Date: Fri, 23 Feb 2018 23:43:56 -0500 Subject: [PATCH] tcg: Remove needless CPUState::current_tb This field was used for telling cpu_interrupt() to unlink a chain of TBs being executed when it worked that way. Now, cpu_interrupt() don't do this anymore. So we don't need this field anymore. Backports commit 3213525f8ab48742db09dab18cb9ae6f36a6c921 from qemu --- qemu/cpu-exec-common.c | 2 -- qemu/cpu-exec.c | 2 -- qemu/cputlb.c | 13 ------------- qemu/include/qom/cpu.h | 2 -- qemu/qom/cpu.c | 1 - qemu/translate-all.c | 18 +----------------- 6 files changed, 1 insertion(+), 37 deletions(-) diff --git a/qemu/cpu-exec-common.c b/qemu/cpu-exec-common.c index 9d3268a0..fbb88889 100644 --- a/qemu/cpu-exec-common.c +++ b/qemu/cpu-exec-common.c @@ -38,7 +38,6 @@ void cpu_resume_from_signal(CPUState *cpu, void *puc) void cpu_loop_exit(CPUState *cpu) { - cpu->current_tb = NULL; siglongjmp(cpu->jmp_env, 1); } @@ -47,6 +46,5 @@ void cpu_loop_exit_restore(CPUState *cpu, uintptr_t pc) if (pc) { cpu_restore_state(cpu, pc); } - cpu->current_tb = NULL; siglongjmp(cpu->jmp_env, 1); } diff --git a/qemu/cpu-exec.c b/qemu/cpu-exec.c index 279a46b1..2608fe94 100644 --- a/qemu/cpu-exec.c +++ b/qemu/cpu-exec.c @@ -192,10 +192,8 @@ int cpu_exec(struct uc_struct *uc, CPUState *cpu) } if (likely(!cpu->exit_request)) { uintptr_t ret; - cpu->current_tb = tb; /* execute the generated code */ ret = cpu_tb_exec(cpu, tb); - cpu->current_tb = NULL; last_tb = (TranslationBlock *)(ret & ~TB_EXIT_MASK); tb_exit = ret & TB_EXIT_MASK; switch (tb_exit) { diff --git a/qemu/cputlb.c b/qemu/cputlb.c index 39768802..6af71afe 100644 --- a/qemu/cputlb.c +++ b/qemu/cputlb.c @@ -87,10 +87,6 @@ void tlb_flush(CPUState *cpu, int flush_global) tlb_debug("(%d)\n", flush_global); - /* must reset current TB so that interrupts cannot modify the - links while we are modifying them */ - cpu->current_tb = NULL; - memset(env->tlb_table, -1, sizeof(env->tlb_table)); memset(env->tlb_v_table, -1, sizeof(env->tlb_v_table)); memset(cpu->tb_jmp_cache, 0, sizeof(cpu->tb_jmp_cache)); @@ -118,9 +114,6 @@ void tlb_flush_page(CPUState *cpu, target_ulong addr) tlb_flush(cpu, 1); return; } - /* must reset current TB so that interrupts cannot modify the - links while we are modifying them */ - cpu->current_tb = NULL; addr &= TARGET_PAGE_MASK; i = (addr >> TARGET_PAGE_BITS) & (CPU_TLB_SIZE - 1); @@ -391,9 +384,6 @@ static inline void v_tlb_flush_by_mmuidx(CPUState *cpu, va_list argp) CPUArchState *env = cpu->env_ptr; tlb_debug("start\n"); - /* must reset current TB so that interrupts cannot modify the - links while we are modifying them */ - cpu->current_tb = NULL; for (;;) { int mmu_idx = va_arg(argp, int); @@ -451,9 +441,6 @@ void tlb_flush_page_by_mmuidx(CPUState *cpu, target_ulong addr, ...) va_end(argp); return; } - /* must reset current TB so that interrupts cannot modify the - links while we are modifying them */ - cpu->current_tb = NULL; addr &= TARGET_PAGE_MASK; i = (addr >> TARGET_PAGE_BITS) & (CPU_TLB_SIZE - 1); diff --git a/qemu/include/qom/cpu.h b/qemu/include/qom/cpu.h index ab8fcf69..733e05f2 100644 --- a/qemu/include/qom/cpu.h +++ b/qemu/include/qom/cpu.h @@ -225,7 +225,6 @@ struct CPUAddressSpace { * @as: Pointer to the first AddressSpace, for the convenience of targets which * only have a single AddressSpace * @env_ptr: Pointer to subclass-specific CPUArchState field. - * @current_tb: Currently executing TB. * @next_cpu: Next CPU sharing TB cache. * @opaque: User data. * @mem_io_pc: Host Program Counter at which the memory was accessed. @@ -269,7 +268,6 @@ struct CPUState { MemoryRegion *memory; void *env_ptr; /* CPUArchState */ - struct TranslationBlock *current_tb; struct TranslationBlock *tb_jmp_cache[TB_JMP_CACHE_SIZE]; QTAILQ_ENTRY(CPUState) node; diff --git a/qemu/qom/cpu.c b/qemu/qom/cpu.c index 2144b5bf..22e7843e 100644 --- a/qemu/qom/cpu.c +++ b/qemu/qom/cpu.c @@ -162,7 +162,6 @@ static void cpu_common_reset(CPUState *cpu) } cpu->interrupt_request = 0; - cpu->current_tb = NULL; cpu->halted = 0; cpu->mem_io_pc = 0; cpu->mem_io_vaddr = 0; diff --git a/qemu/translate-all.c b/qemu/translate-all.c index 82d67d1e..7b963e80 100644 --- a/qemu/translate-all.c +++ b/qemu/translate-all.c @@ -297,7 +297,6 @@ bool cpu_restore_state(CPUState *cpu, uintptr_t retaddr) cpu_restore_state_from_tb(cpu, tb, retaddr); if (tb->cflags & CF_NOCACHE) { /* one-shot translation, invalidate it immediately */ - cpu->current_tb = NULL; tb_phys_invalidate(cpu->uc, tb, -1); tb_free(cpu->uc, tb); } @@ -1417,7 +1416,7 @@ void tb_invalidate_phys_range(struct uc_struct *uc, tb_page_addr_t start, tb_pag void tb_invalidate_phys_page_range(struct uc_struct *uc, tb_page_addr_t start, tb_page_addr_t end, int is_cpu_write_access) { - TranslationBlock *tb, *tb_next, *saved_tb; + TranslationBlock *tb, *tb_next; CPUState *cpu = uc->current_cpu; #if defined(TARGET_HAS_PRECISE_SMC) CPUArchState *env = NULL; @@ -1487,20 +1486,7 @@ void tb_invalidate_phys_page_range(struct uc_struct *uc, tb_page_addr_t start, t ¤t_flags); } #endif /* TARGET_HAS_PRECISE_SMC */ - /* we need to do that to handle the case where a signal - occurs while doing tb_phys_invalidate() */ - saved_tb = NULL; - if (cpu != NULL) { - saved_tb = cpu->current_tb; - cpu->current_tb = NULL; - } tb_phys_invalidate(uc, tb, -1); - if (cpu != NULL) { - cpu->current_tb = saved_tb; - if (cpu->interrupt_request && cpu->current_tb) { - cpu_interrupt(cpu, cpu->interrupt_request); - } - } } tb = tb_next; } @@ -1516,7 +1502,6 @@ void tb_invalidate_phys_page_range(struct uc_struct *uc, tb_page_addr_t start, t /* we generate a block containing just the instruction modifying the memory. It will ensure that it cannot modify itself */ - cpu->current_tb = NULL; tb_gen_code(cpu, current_pc, current_cs_base, current_flags, 1); cpu_resume_from_signal(cpu, NULL); } @@ -1620,7 +1605,6 @@ static void tb_invalidate_phys_page(struct uc_struct *uc, tb_page_addr_t addr, /* we generate a block containing just the instruction modifying the memory. It will ensure that it cannot modify itself */ - cpu->current_tb = NULL; tb_gen_code(cpu, current_pc, current_cs_base, current_flags, 1); if (locked) { mmap_unlock();