From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:52897) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YGmAB-0003m1-LN for qemu-devel@nongnu.org; Thu, 29 Jan 2015 05:17:28 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1YGmA6-0000IX-Me for qemu-devel@nongnu.org; Thu, 29 Jan 2015 05:17:27 -0500 Received: from mx1.redhat.com ([209.132.183.28]:43190) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YGmA6-0000IK-GC for qemu-devel@nongnu.org; Thu, 29 Jan 2015 05:17:22 -0500 Message-ID: <54C9F74B.4090802@redhat.com> Date: Thu, 29 Jan 2015 10:03:07 +0100 From: Paolo Bonzini MIME-Version: 1.0 References: <20150122085127.5276.53895.stgit@PASHA-ISP.def.inno> <20150122085147.5276.43446.stgit@PASHA-ISP.def.inno> In-Reply-To: <20150122085147.5276.43446.stgit@PASHA-ISP.def.inno> Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [RFC PATCH v8 03/21] sysemu: system functions for replay List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Pavel Dovgalyuk , qemu-devel@nongnu.org Cc: peter.maydell@linaro.org, peter.crosthwaite@xilinx.com, alex.bennee@linaro.org, mark.burton@greensocs.com, real@ispras.ru, batuzovk@ispras.ru, maria.klimushenkova@ispras.ru, afaerber@suse.de, fred.konrad@greensocs.com On 22/01/2015 09:51, Pavel Dovgalyuk wrote: > This patch removes "static" specifier from several qemu function to make > them visible to the replay module. It also invents several system functions > that will be used by replay. > > Signed-off-by: Pavel Dovgalyuk > --- > cpus.c | 4 ++-- > include/exec/exec-all.h | 1 + > include/qom/cpu.h | 10 ++++++++++ > include/sysemu/cpus.h | 1 + > translate-all.c | 8 ++++++++ > 5 files changed, 22 insertions(+), 2 deletions(-) > > diff --git a/cpus.c b/cpus.c > index 3a5323b..c513275 100644 > --- a/cpus.c > +++ b/cpus.c > @@ -88,7 +88,7 @@ static bool cpu_thread_is_idle(CPUState *cpu) > return true; > } > > -static bool all_cpu_threads_idle(void) > +bool all_cpu_threads_idle(void) > { > CPUState *cpu; > > @@ -1121,7 +1121,7 @@ bool qemu_cpu_is_self(CPUState *cpu) > return qemu_thread_is_self(cpu->thread); > } > > -static bool qemu_in_vcpu_thread(void) > +bool qemu_in_vcpu_thread(void) > { > return current_cpu && qemu_cpu_is_self(current_cpu); > } > diff --git a/include/exec/exec-all.h b/include/exec/exec-all.h > index 4a6237f..63fb1a3 100644 > --- a/include/exec/exec-all.h > +++ b/include/exec/exec-all.h > @@ -214,6 +214,7 @@ static inline unsigned int tb_phys_hash_func(tb_page_addr_t pc) > > void tb_free(TranslationBlock *tb); > void tb_flush(CPUArchState *env); > +void tb_flush_all(void); > void tb_phys_invalidate(TranslationBlock *tb, tb_page_addr_t page_addr); > > #if defined(USE_DIRECT_JUMP) > diff --git a/include/qom/cpu.h b/include/qom/cpu.h > index 2098f1c..5afb44c 100644 > --- a/include/qom/cpu.h > +++ b/include/qom/cpu.h > @@ -480,6 +480,16 @@ static inline bool cpu_has_work(CPUState *cpu) > bool qemu_cpu_is_self(CPUState *cpu); > > /** > + * qemu_in_vcpu_thread: > + * > + * Checks whether the caller is executing on the vCPU thread > + * of the current vCPU. > + * > + * Returns: %true if called from vCPU's thread, %false otherwise. > + */ > +bool qemu_in_vcpu_thread(void); > + > +/** > * qemu_cpu_kick: > * @cpu: The vCPU to kick. > * > diff --git a/include/sysemu/cpus.h b/include/sysemu/cpus.h > index 3f162a9..86ae556 100644 > --- a/include/sysemu/cpus.h > +++ b/include/sysemu/cpus.h > @@ -6,6 +6,7 @@ void qemu_init_cpu_loop(void); > void resume_all_vcpus(void); > void pause_all_vcpus(void); > void cpu_stop_current(void); > +bool all_cpu_threads_idle(void); > > void cpu_synchronize_all_states(void); > void cpu_synchronize_all_post_reset(void); > diff --git a/translate-all.c b/translate-all.c > index 4a1b64f..c0cba7d 100644 > --- a/translate-all.c > +++ b/translate-all.c > @@ -812,6 +812,14 @@ void tb_flush(CPUArchState *env1) > tcg_ctx.tb_ctx.tb_flush_count++; > } > > +void tb_flush_all(void) > +{ > + CPUState *cpu; > + for (cpu = first_cpu ; cpu != NULL ; cpu = CPU_NEXT(cpu)) { > + tb_flush(cpu->env_ptr); > + } > +} > + > #ifdef DEBUG_TB_CHECK > > static void tb_invalidate_check(target_ulong address) > Reviewed-by: Paolo Bonzini