qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: "Pavel Dovgalyuk" <dovgaluk@ispras.ru>
To: 'Paolo Bonzini' <pbonzini@redhat.com>,
	'Pavel Dovgalyuk' <pavel.dovgaluk@ispras.ru>,
	qemu-devel@nongnu.org
Cc: kwolf@redhat.com, peter.maydell@linaro.org, mst@redhat.com,
	jasowang@redhat.com, quintela@redhat.com, kraxel@redhat.com
Subject: Re: [Qemu-devel] [PATCH v7 04/14] icount: exit cpu loop on expire
Date: Wed, 25 Jan 2017 14:50:02 +0300	[thread overview]
Message-ID: <000701d27701$2a0aa8e0$7e1ffaa0$@ru> (raw)
In-Reply-To: <db455af4-4d66-d81f-4f4f-1ad47100dffe@redhat.com>

> From: Paolo Bonzini [mailto:pbonzini@redhat.com]
> On 24/01/2017 08:17, Pavel Dovgalyuk wrote:
> > This patch adds check to break cpu loop when icount expires without
> > setting the TB_EXIT_ICOUNT_EXPIRED flag. It happens when there is no
> > available translated blocks and all instructions were executed.
> > In icount replay mode unnecessary tb_find will be called (which may
> > cause an exception) and execution will be non-deterministic.
> >
> > Signed-off-by: Pavel Dovgalyuk <pavel.dovgaluk@ispras.ru>
> > ---
> >  cpu-exec.c |   15 ++++++++++++---
> >  1 file changed, 12 insertions(+), 3 deletions(-)
> >
> > diff --git a/cpu-exec.c b/cpu-exec.c
> > index 79a2167..e603da4 100644
> > --- a/cpu-exec.c
> > +++ b/cpu-exec.c
> > @@ -582,9 +582,6 @@ static inline void cpu_loop_exec_tb(CPUState *cpu, TranslationBlock *tb,
> >                  cpu_exec_nocache(cpu, insns_left, *last_tb, false);
> >                  align_clocks(sc, cpu);
> >              }
> > -            cpu->exception_index = EXCP_INTERRUPT;
> > -            *last_tb = NULL;
> > -            cpu_loop_exit(cpu);
> >          }
> >          break;
> >  #endif
> > @@ -638,6 +635,18 @@ int cpu_exec(CPUState *cpu)
> >
> >              for(;;) {
> >                  cpu_handle_interrupt(cpu, &last_tb);
> > +                /* icount has expired, we need to break the execution loop.
> > +                   This check is needed before tb_find to make execution
> > +                   deterministic - tb_find may cause an exception
> > +                   while translating the code from non-mapped page. */
> > +                if (use_icount && ((cpu->icount_extra == 0
> > +                                    && cpu->icount_decr.u16.low == 0)
> > +                                || (int32_t)cpu->icount_decr.u32 < 0)) {
> > +                    if (cpu->exception_index == -1) {
> > +                        cpu->exception_index = EXCP_INTERRUPT;
> > +                    }
> > +                    cpu_loop_exit(cpu);
> > +                }
> 
> Can this can be placed in cpu_handle_interrupt itself?  

I guess it could. I placed it here because it doesn't related to interrupts.

> Also, can the cpu->exception_index != -1 case happen?

This branch is executed where there are no instructions to replay.
It may happen due to an exception (which is already set) or because
execution loop has to break. In the first case exception_index != -1.

> We really should add assertions on cpu->exception_index, maybe after
> cpu_handle_exception and cc->cpu_exec_interrupt returns true.  Without
> some idea of the invariants, I'm not competent enough to review this patch.

Pavel Dovgalyuk

  reply	other threads:[~2017-01-25 11:50 UTC|newest]

Thread overview: 33+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-01-24  7:16 [Qemu-devel] [PATCH v7 00/14] replay additions Pavel Dovgalyuk
2017-01-24  7:17 ` [Qemu-devel] [PATCH v7 01/14] icount: update instruction counter on apic patching Pavel Dovgalyuk
2017-01-24  7:17 ` [Qemu-devel] [PATCH v7 02/14] replay: improve interrupt handling Pavel Dovgalyuk
2017-01-24  7:17 ` [Qemu-devel] [PATCH v7 03/14] replay: exception replay fix Pavel Dovgalyuk
2017-01-25 10:50   ` Paolo Bonzini
2017-01-25 11:12     ` Pavel Dovgalyuk
2017-01-25 11:18       ` Paolo Bonzini
2017-01-25 11:33         ` Pavel Dovgalyuk
2017-01-25 11:56           ` Paolo Bonzini
2017-01-25 12:27             ` Pavel Dovgalyuk
2017-01-25 13:21               ` Paolo Bonzini
2017-01-25 13:26                 ` Pavel Dovgalyuk
2017-01-24  7:17 ` [Qemu-devel] [PATCH v7 04/14] icount: exit cpu loop on expire Pavel Dovgalyuk
2017-01-25 11:06   ` Paolo Bonzini
2017-01-25 11:50     ` Pavel Dovgalyuk [this message]
2017-01-25 12:00       ` Paolo Bonzini
2017-01-24  7:17 ` [Qemu-devel] [PATCH v7 05/14] apic: save apic_delivered flag Pavel Dovgalyuk
2017-01-25 11:07   ` Paolo Bonzini
2017-01-25 11:52     ` Pavel Dovgalyuk
2017-01-25 11:57       ` Paolo Bonzini
2017-01-25 13:01         ` Pavel Dovgalyuk
2017-01-25 13:14           ` Paolo Bonzini
2017-01-24  7:17 ` [Qemu-devel] [PATCH v7 06/14] replay: don't use rtc clock on loadvm phase Pavel Dovgalyuk
2017-01-24  7:17 ` [Qemu-devel] [PATCH v7 07/14] integratorcp: adding vmstate for save/restore Pavel Dovgalyuk
2017-01-24  7:17 ` [Qemu-devel] [PATCH v7 08/14] savevm: add public save_vmstate function Pavel Dovgalyuk
2017-01-24  7:17 ` [Qemu-devel] [PATCH v7 09/14] replay: save/load initial state Pavel Dovgalyuk
2017-01-24  7:17 ` [Qemu-devel] [PATCH v7 10/14] block: implement bdrv_snapshot_goto for blkreplay Pavel Dovgalyuk
2017-01-24  7:17 ` [Qemu-devel] [PATCH v7 11/14] blkreplay: create temporary overlay for underlaying devices Pavel Dovgalyuk
2017-01-24  7:18 ` [Qemu-devel] [PATCH v7 12/14] replay: disable default snapshot for record/replay Pavel Dovgalyuk
2017-01-24  7:18 ` [Qemu-devel] [PATCH v7 13/14] audio: make audio poll timer deterministic Pavel Dovgalyuk
2017-01-24  7:18 ` [Qemu-devel] [PATCH v7 14/14] replay: add record/replay for audio passthrough Pavel Dovgalyuk
2017-01-24  7:43 ` [Qemu-devel] [PATCH v7 00/14] replay additions no-reply
2017-01-25 11:12 ` Paolo Bonzini

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='000701d27701$2a0aa8e0$7e1ffaa0$@ru' \
    --to=dovgaluk@ispras.ru \
    --cc=jasowang@redhat.com \
    --cc=kraxel@redhat.com \
    --cc=kwolf@redhat.com \
    --cc=mst@redhat.com \
    --cc=pavel.dovgaluk@ispras.ru \
    --cc=pbonzini@redhat.com \
    --cc=peter.maydell@linaro.org \
    --cc=qemu-devel@nongnu.org \
    --cc=quintela@redhat.com \
    /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).