From: "Emilio G. Cota" <cota@braap.org>
To: Richard Henderson <rth@twiddle.net>
Cc: qemu-devel@nongnu.org, Paolo Bonzini <pbonzini@redhat.com>,
Peter Crosthwaite <crosthwaite.peter@gmail.com>,
Peter Maydell <peter.maydell@linaro.org>,
Eduardo Habkost <ehabkost@redhat.com>,
Andrzej Zaborowski <balrogg@gmail.com>,
Aurelien Jarno <aurelien@aurel32.net>,
Alexander Graf <agraf@suse.de>, Stefan Weil <sw@weilnetz.de>,
qemu-arm@nongnu.org, alex.bennee@linaro.org,
Pranith Kumar <bobby.prani+qemu@gmail.com>
Subject: Re: [PATCH v3 06/10] target/arm: optimize indirect branches
Date: Wed, 26 Apr 2017 23:20:38 -0400 [thread overview]
Message-ID: <20170427032038.GA5078@flamenco> (raw)
In-Reply-To: <9ed31413-ddd8-b229-9731-a0433f8fbcde@twiddle.net>
On Wed, Apr 26, 2017 at 09:54:07 +0200, Richard Henderson wrote:
> On 04/26/2017 08:23 AM, Emilio G. Cota wrote:
> >+static bool gen_jr;...
> > case DISAS_JUMP:
> >+ if (gen_jr) {
>
> Why the variable? Why not just try the goto_ptr for any DISAS_JUMP?
We have code that assumes DISAS_JUMP implies "go to exec loop", e.g.:
case 6: /* isb */
/* We need to break the TB after this insn to execute
* self-modifying code correctly and also to take
* any pending interrupts immediately.
*/
gen_lookup_tb(s);
where gen_lookup_tb does:
/* Force a TB lookup after an instruction that changes the CPU state. */
static inline void gen_lookup_tb(DisasContext *s)
{
tcg_gen_movi_i32(cpu_R[15], s->pc & ~1);
s->is_jmp = DISAS_JUMP;
}
Also, the gen_exception_* functions set DISAS_JUMP. I suspect we want to go
to the exec loop with those as well.
Testing shows that I'm onto something; if I remove the variable,
and note that I make sure DISAS_UPDATE is not falling through, I get
easily reproducible (~1 out of 5) freezes and other instability
(e.g. RCU lockup warnings) when booting + shutting down debian jessie
in the guest.
In v4 I've added a comment about this.
Thanks,
E.
WARNING: multiple messages have this Message-ID (diff)
From: "Emilio G. Cota" <cota@braap.org>
To: Richard Henderson <rth@twiddle.net>
Cc: qemu-devel@nongnu.org, Paolo Bonzini <pbonzini@redhat.com>,
Peter Crosthwaite <crosthwaite.peter@gmail.com>,
Peter Maydell <peter.maydell@linaro.org>,
Eduardo Habkost <ehabkost@redhat.com>,
Andrzej Zaborowski <balrogg@gmail.com>,
Aurelien Jarno <aurelien@aurel32.net>,
Alexander Graf <agraf@suse.de>, Stefan Weil <sw@weilnetz.de>,
qemu-arm@nongnu.org, alex.bennee@linaro.org,
Pranith Kumar <bobby.prani+qemu@gmail.com>
Subject: Re: [Qemu-devel] [PATCH v3 06/10] target/arm: optimize indirect branches
Date: Wed, 26 Apr 2017 23:20:38 -0400 [thread overview]
Message-ID: <20170427032038.GA5078@flamenco> (raw)
In-Reply-To: <9ed31413-ddd8-b229-9731-a0433f8fbcde@twiddle.net>
On Wed, Apr 26, 2017 at 09:54:07 +0200, Richard Henderson wrote:
> On 04/26/2017 08:23 AM, Emilio G. Cota wrote:
> >+static bool gen_jr;...
> > case DISAS_JUMP:
> >+ if (gen_jr) {
>
> Why the variable? Why not just try the goto_ptr for any DISAS_JUMP?
We have code that assumes DISAS_JUMP implies "go to exec loop", e.g.:
case 6: /* isb */
/* We need to break the TB after this insn to execute
* self-modifying code correctly and also to take
* any pending interrupts immediately.
*/
gen_lookup_tb(s);
where gen_lookup_tb does:
/* Force a TB lookup after an instruction that changes the CPU state. */
static inline void gen_lookup_tb(DisasContext *s)
{
tcg_gen_movi_i32(cpu_R[15], s->pc & ~1);
s->is_jmp = DISAS_JUMP;
}
Also, the gen_exception_* functions set DISAS_JUMP. I suspect we want to go
to the exec loop with those as well.
Testing shows that I'm onto something; if I remove the variable,
and note that I make sure DISAS_UPDATE is not falling through, I get
easily reproducible (~1 out of 5) freezes and other instability
(e.g. RCU lockup warnings) when booting + shutting down debian jessie
in the guest.
In v4 I've added a comment about this.
Thanks,
E.
next prev parent reply other threads:[~2017-04-27 3:20 UTC|newest]
Thread overview: 69+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-04-26 6:23 [PATCH v3 00/10] TCG optimizations for 2.10 Emilio G. Cota
2017-04-26 6:23 ` [Qemu-devel] " Emilio G. Cota
2017-04-26 6:23 ` [PATCH v3 01/10] tcg-runtime: add lookup_tb_ptr helper Emilio G. Cota
2017-04-26 6:23 ` [Qemu-devel] " Emilio G. Cota
2017-04-26 7:50 ` Paolo Bonzini
2017-04-26 7:50 ` [Qemu-devel] " Paolo Bonzini
2017-04-26 8:40 ` Richard Henderson
2017-04-26 8:40 ` [Qemu-devel] " Richard Henderson
2017-04-26 21:56 ` Emilio G. Cota
2017-04-26 21:56 ` [Qemu-devel] " Emilio G. Cota
2017-04-26 22:29 ` Richard Henderson
2017-04-26 22:29 ` [Qemu-devel] " Richard Henderson
2017-04-26 22:45 ` Emilio G. Cota
2017-04-26 22:45 ` [Qemu-devel] " Emilio G. Cota
2017-04-26 23:11 ` Emilio G. Cota
2017-04-26 23:11 ` [Qemu-devel] " Emilio G. Cota
2017-04-26 23:25 ` Emilio G. Cota
2017-04-26 23:25 ` [Qemu-devel] " Emilio G. Cota
2017-04-26 23:17 ` Emilio G. Cota
2017-04-26 23:17 ` [Qemu-devel] " Emilio G. Cota
2017-04-26 10:29 ` Alex Bennée
2017-04-26 10:29 ` [Qemu-devel] " Alex Bennée
2017-04-26 10:43 ` Richard Henderson
2017-04-26 10:43 ` [Qemu-devel] " Richard Henderson
2017-04-26 15:11 ` Paolo Bonzini
2017-04-26 15:11 ` [Qemu-devel] " Paolo Bonzini
2017-04-26 16:16 ` Alex Bennée
2017-04-26 16:16 ` [Qemu-devel] " Alex Bennée
2017-04-26 6:23 ` [PATCH v3 02/10] tcg: introduce goto_ptr opcode Emilio G. Cota
2017-04-26 6:23 ` [Qemu-devel] " Emilio G. Cota
2017-04-26 8:30 ` Richard Henderson
2017-04-26 8:30 ` [Qemu-devel] " Richard Henderson
2017-04-26 12:12 ` Richard Henderson
2017-04-26 12:12 ` [Qemu-devel] " Richard Henderson
2017-04-26 6:23 ` [PATCH v3 03/10] tcg: export tcg_gen_lookup_and_goto_ptr Emilio G. Cota
2017-04-26 6:23 ` [Qemu-devel] " Emilio G. Cota
2017-04-26 8:29 ` Richard Henderson
2017-04-26 8:29 ` [Qemu-devel] " Richard Henderson
2017-04-26 10:33 ` Alex Bennée
2017-04-26 10:33 ` [Qemu-devel] " Alex Bennée
2017-04-26 6:23 ` [PATCH v3 04/10] tcg/i386: implement goto_ptr op Emilio G. Cota
2017-04-26 6:23 ` [Qemu-devel] " Emilio G. Cota
2017-04-26 8:28 ` Richard Henderson
2017-04-26 8:28 ` [Qemu-devel] " Richard Henderson
2017-04-26 6:23 ` [PATCH v3 05/10] target/arm: optimize cross-page direct jumps in softmmu Emilio G. Cota
2017-04-26 6:23 ` [Qemu-devel] " Emilio G. Cota
2017-04-26 8:27 ` Richard Henderson
2017-04-26 8:27 ` [Qemu-devel] " Richard Henderson
2017-04-26 6:23 ` [PATCH v3 06/10] target/arm: optimize indirect branches Emilio G. Cota
2017-04-26 6:23 ` [Qemu-devel] " Emilio G. Cota
2017-04-26 7:54 ` Richard Henderson
2017-04-26 7:54 ` [Qemu-devel] " Richard Henderson
2017-04-27 3:20 ` Emilio G. Cota [this message]
2017-04-27 3:20 ` Emilio G. Cota
2017-04-27 10:25 ` Aurelien Jarno
2017-04-26 6:23 ` [PATCH v3 07/10] target/i386: introduce gen_jr helper to generate lookup_and_goto_ptr Emilio G. Cota
2017-04-26 6:23 ` [Qemu-devel] " Emilio G. Cota
2017-04-26 8:26 ` Richard Henderson
2017-04-26 8:26 ` [Qemu-devel] " Richard Henderson
2017-04-26 6:23 ` [PATCH v3 08/10] target/i386: optimize cross-page direct jumps in softmmu Emilio G. Cota
2017-04-26 6:23 ` [Qemu-devel] " Emilio G. Cota
2017-04-26 8:25 ` Richard Henderson
2017-04-26 8:25 ` [Qemu-devel] " Richard Henderson
2017-04-26 6:23 ` [PATCH v3 09/10] target/i386: optimize indirect branches Emilio G. Cota
2017-04-26 6:23 ` [Qemu-devel] " Emilio G. Cota
2017-04-26 8:24 ` Richard Henderson
2017-04-26 8:24 ` [Qemu-devel] " Richard Henderson
2017-04-26 6:23 ` [PATCH v3 10/10] tb-hash: improve tb_jmp_cache hash function in user mode Emilio G. Cota
2017-04-26 6:23 ` [Qemu-devel] " Emilio G. Cota
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=20170427032038.GA5078@flamenco \
--to=cota@braap.org \
--cc=agraf@suse.de \
--cc=alex.bennee@linaro.org \
--cc=aurelien@aurel32.net \
--cc=balrogg@gmail.com \
--cc=bobby.prani+qemu@gmail.com \
--cc=crosthwaite.peter@gmail.com \
--cc=ehabkost@redhat.com \
--cc=pbonzini@redhat.com \
--cc=peter.maydell@linaro.org \
--cc=qemu-arm@nongnu.org \
--cc=qemu-devel@nongnu.org \
--cc=rth@twiddle.net \
--cc=sw@weilnetz.de \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.