From: Igor Mammedov <imammedo@redhat.com>
To: "Andreas Färber" <afaerber@suse.de>
Cc: Marcelo Tosatti <mtosatti@redhat.com>,
qemu-devel@nongnu.org, "open list:Overall" <kvm@vger.kernel.org>,
Avi Kivity <avi@redhat.com>
Subject: Re: [Qemu-devel] [PATCH qom-cpu v2 4/7] cpus: Pass CPUState to qemu_cpu_is_self()
Date: Tue, 16 Oct 2012 02:49:23 +0200 [thread overview]
Message-ID: <20121016024923.6b29da4a@thinkpad.mammed.net> (raw)
In-Reply-To: <1350005203-15405-5-git-send-email-afaerber@suse.de>
On Fri, 12 Oct 2012 03:26:40 +0200
Andreas Färber <afaerber@suse.de> wrote:
> Change return type to bool, move to include/qemu/cpu.h and
> add documentation.
>
> Signed-off-by: Andreas Färber <afaerber@suse.de>
> ---
> cpus.c | 10 ++++------
> exec.c | 3 ++-
> hw/apic.c | 6 ++++--
> include/qemu/cpu.h | 10 ++++++++++
> kvm-all.c | 4 +++-
> qemu-common.h | 1 -
> target-i386/kvm.c | 6 ++++--
> 7 Dateien geändert, 27 Zeilen hinzugefügt(+), 13 Zeilen entfernt(-)
>
> diff --git a/cpus.c b/cpus.c
> index 750a76f..849ea8a 100644
> --- a/cpus.c
> +++ b/cpus.c
> @@ -638,9 +638,10 @@ void qemu_init_cpu_loop(void)
>
> void run_on_cpu(CPUArchState *env, void (*func)(void *data), void *data)
> {
> + CPUState *cpu = ENV_GET_CPU(env);
> struct qemu_work_item wi;
>
> - if (qemu_cpu_is_self(env)) {
> + if (qemu_cpu_is_self(cpu)) {
> func(data);
> return;
> }
> @@ -855,7 +856,7 @@ static void qemu_cpu_kick_thread(CPUArchState *env)
> exit(1);
> }
> #else /* _WIN32 */
> - if (!qemu_cpu_is_self(env)) {
> + if (!qemu_cpu_is_self(cpu)) {
> SuspendThread(cpu->hThread);
> cpu_signal(0);
> ResumeThread(cpu->hThread);
> @@ -890,11 +891,8 @@ void qemu_cpu_kick_self(void)
> #endif
> }
>
> -int qemu_cpu_is_self(void *_env)
> +bool qemu_cpu_is_self(CPUState *cpu)
> {
> - CPUArchState *env = _env;
> - CPUState *cpu = ENV_GET_CPU(env);
> -
> return qemu_thread_is_self(cpu->thread);
> }
>
> diff --git a/exec.c b/exec.c
> index 7899042..e21be32 100644
> --- a/exec.c
> +++ b/exec.c
> @@ -1685,6 +1685,7 @@ static void cpu_unlink_tb(CPUArchState *env)
> /* mask must never be zero, except for A20 change call */
> static void tcg_handle_interrupt(CPUArchState *env, int mask)
> {
> + CPUState *cpu = ENV_GET_CPU(env);
Is there any chance to get rid of expensive cast on this call path?
> int old_mask;
>
> old_mask = env->interrupt_request;
> @@ -1694,7 +1695,7 @@ static void tcg_handle_interrupt(CPUArchState *env, int mask)
> * If called from iothread context, wake the target cpu in
> * case its halted.
> */
> - if (!qemu_cpu_is_self(env)) {
> + if (!qemu_cpu_is_self(cpu)) {
> qemu_cpu_kick(env);
> return;
> }
> diff --git a/hw/apic.c b/hw/apic.c
> index ccf2819..1b4cd2f 100644
> --- a/hw/apic.c
> +++ b/hw/apic.c
> @@ -107,7 +107,7 @@ static void apic_sync_vapic(APICCommonState *s, int sync_type)
> length = offsetof(VAPICState, enabled) - offsetof(VAPICState, isr);
>
> if (sync_type & SYNC_TO_VAPIC) {
> - assert(qemu_cpu_is_self(&s->cpu->env));
> + assert(qemu_cpu_is_self(CPU(s->cpu)));
>
> vapic_state.tpr = s->tpr;
> vapic_state.enabled = 1;
> @@ -363,10 +363,12 @@ static int apic_irq_pending(APICCommonState *s)
> /* signal the CPU if an irq is pending */
> static void apic_update_irq(APICCommonState *s)
> {
> + CPUState *cpu = CPU(s->cpu);
> +
> if (!(s->spurious_vec & APIC_SV_ENABLE)) {
> return;
> }
> - if (!qemu_cpu_is_self(&s->cpu->env)) {
> + if (!qemu_cpu_is_self(cpu)) {
> cpu_interrupt(&s->cpu->env, CPU_INTERRUPT_POLL);
> } else if (apic_irq_pending(s) > 0) {
> cpu_interrupt(&s->cpu->env, CPU_INTERRUPT_HARD);
> diff --git a/include/qemu/cpu.h b/include/qemu/cpu.h
> index ad706a6..7be983d 100644
> --- a/include/qemu/cpu.h
> +++ b/include/qemu/cpu.h
> @@ -78,5 +78,15 @@ struct CPUState {
> */
> void cpu_reset(CPUState *cpu);
>
> +/**
> + * qemu_cpu_is_self:
> + * @cpu: The vCPU to check against.
> + *
> + * Checks whether the caller is executing on the vCPU thread.
> + *
> + * Returns: %true if called from @cpu's thread, %false otherwise.
> + */
> +bool qemu_cpu_is_self(CPUState *cpu);
> +
>
> #endif
> diff --git a/kvm-all.c b/kvm-all.c
> index 92a7137..db01aeb 100644
> --- a/kvm-all.c
> +++ b/kvm-all.c
> @@ -854,9 +854,11 @@ static MemoryListener kvm_memory_listener = {
>
> static void kvm_handle_interrupt(CPUArchState *env, int mask)
> {
> + CPUState *cpu = ENV_GET_CPU(env);
> +
> env->interrupt_request |= mask;
>
> - if (!qemu_cpu_is_self(env)) {
> + if (!qemu_cpu_is_self(cpu)) {
> qemu_cpu_kick(env);
> }
> }
> diff --git a/qemu-common.h b/qemu-common.h
> index b54612b..2094742 100644
> --- a/qemu-common.h
> +++ b/qemu-common.h
> @@ -326,7 +326,6 @@ int cpu_load(QEMUFile *f, void *opaque, int version_id);
> /* Unblock cpu */
> void qemu_cpu_kick(void *env);
> void qemu_cpu_kick_self(void);
> -int qemu_cpu_is_self(void *env);
>
> /* work queue */
> struct qemu_work_item {
> diff --git a/target-i386/kvm.c b/target-i386/kvm.c
> index 5b18383..cf3d2f1 100644
> --- a/target-i386/kvm.c
> +++ b/target-i386/kvm.c
> @@ -1552,9 +1552,10 @@ static int kvm_get_debugregs(CPUX86State *env)
>
> int kvm_arch_put_registers(CPUX86State *env, int level)
> {
> + CPUState *cpu = ENV_GET_CPU(env);
> int ret;
>
> - assert(cpu_is_stopped(env) || qemu_cpu_is_self(env));
> + assert(cpu_is_stopped(env) || qemu_cpu_is_self(cpu));
>
> ret = kvm_getput_regs(env, 1);
> if (ret < 0) {
> @@ -1609,9 +1610,10 @@ int kvm_arch_put_registers(CPUX86State *env, int level)
>
> int kvm_arch_get_registers(CPUX86State *env)
> {
> + CPUState *cpu = ENV_GET_CPU(env);
> int ret;
>
> - assert(cpu_is_stopped(env) || qemu_cpu_is_self(env));
> + assert(cpu_is_stopped(env) || qemu_cpu_is_self(cpu));
>
> ret = kvm_getput_regs(env, 0);
> if (ret < 0) {
> --
> 1.7.10.4
>
>
Reviewed-by: Igor Mammedov <imammedo@redhat.com>
--
Regards,
Igor
next prev parent reply other threads:[~2012-10-16 0:49 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-10-12 1:26 [Qemu-devel] [PATCH qom-cpu v2 0/7] QOM CPUState, part 4a: CPU_COMMON, continued Andreas Färber
2012-10-12 1:26 ` [Qemu-devel] [PATCH qom-cpu v2 1/7] target-i386: Inline APIC cpu_env property setting Andreas Färber
2012-10-15 23:22 ` Igor Mammedov
2012-10-16 16:02 ` Andreas Färber
2012-10-16 16:04 ` Paolo Bonzini
2012-10-17 12:50 ` Jan Kiszka
2012-10-12 1:26 ` [Qemu-devel] [PATCH qom-cpu v2 2/7] apic: Store X86CPU in APICCommonState Andreas Färber
2012-10-15 23:28 ` Igor Mammedov
2012-10-12 1:26 ` [Qemu-devel] [PATCH qom-cpu v2 3/7] target-i386: Pass X86CPU to cpu_x86_load_seg_cache_sipi() Andreas Färber
2012-10-15 23:29 ` Igor Mammedov
2012-10-12 1:26 ` [Qemu-devel] [PATCH qom-cpu v2 4/7] cpus: Pass CPUState to qemu_cpu_is_self() Andreas Färber
2012-10-16 0:49 ` Igor Mammedov [this message]
2012-10-30 20:08 ` Andreas Färber
2012-10-30 20:33 ` Andreas Färber
2012-10-12 1:26 ` [Qemu-devel] [PATCH qom-cpu v2 5/7] cpus: Pass CPUState to qemu_cpu_kick_thread() Andreas Färber
2012-10-16 0:53 ` Igor Mammedov
2012-10-12 1:26 ` [Qemu-devel] [PATCH qom-cpu v2 6/7] cpu: Move created field to CPUState Andreas Färber
2012-10-12 1:26 ` [Qemu-devel] [PATCH qom-cpu v2 7/7] cpu: Move stop " Andreas Färber
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20121016024923.6b29da4a@thinkpad.mammed.net \
--to=imammedo@redhat.com \
--cc=afaerber@suse.de \
--cc=avi@redhat.com \
--cc=kvm@vger.kernel.org \
--cc=mtosatti@redhat.com \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).