From: "Pavel Dovgalyuk" <dovgaluk@ispras.ru>
To: 'Peter Maydell' <peter.maydell@linaro.org>
Cc: 'Paolo Bonzini' <pbonzini@redhat.com>,
'QEMU Developers' <qemu-devel@nongnu.org>,
'Pavel Dovgalyuk' <pavel.dovgaluk@ispras.ru>
Subject: Re: [Qemu-devel] [PULL 07/11] cpu-exec: don't overwrite exception_index
Date: Wed, 10 Jan 2018 10:04:41 +0300 [thread overview]
Message-ID: <001401d389e1$495ffa30$dc1fee90$@ru> (raw)
In-Reply-To: <CAFEAcA8GiMDyFU4j3OvZ7F=fXk93B4447RQnpp+9cHWUGMp7Ag@mail.gmail.com>
> From: Peter Maydell [mailto:peter.maydell@linaro.org]
> On 9 January 2018 at 13:21, Pavel Dovgalyuk <dovgaluk@ispras.ru> wrote:
> > I tried to get some logs with the following code.
> > It prints that there was an exception 5 and it was overwritten by the standard code.
> > Fixed code prevents this overwrite.
> >
> > I guess that one of the following is true:
> > - unfixed version misses some exceptions
> > - fixed version processes some exceptions twice (e.g., when there is no clear exception)
> >
> > diff --git a/accel/tcg/cpu-exec.c b/accel/tcg/cpu-exec.c
> > index 280200f..fa810f7 100644
> > --- a/accel/tcg/cpu-exec.c
> > +++ b/accel/tcg/cpu-exec.c
> > @@ -605,6 +605,8 @@ static inline bool cpu_handle_interrupt(CPUState *cpu,
> > /* Finally, check if we need to exit to the main loop. */
> > if (unlikely(atomic_read(&cpu->exit_request)
> > || (use_icount && cpu->icount_decr.u16.low + cpu->icount_extra == 0)))
> > + if (cpu->exception_index != -1 && cpu->exception_index != EXCP_INTERRUP
> > + qemu_log("overwriting excp_index %x\n", cpu->exception_index);
> > atomic_set(&cpu->exit_request, 0);
> > cpu->exception_index = EXCP_INTERRUPT;
> > return true;
>
> This looks like it's just working around whatever is going on
> (why should EXCP_INTERRUPT be special?). What we need to do is
> find out what's actually happening here...
The failure cause is in incorrect interrupt processing.
When ARM processes hardware interrupt in arm_cpu_exec_interrupt(),
it executes cs->exception_index = excp_idx;
This assumes, that the exception will be processed later.
But it is processed immediately by calling cc->do_interrupt(cs);
instead of leaving this job to cpu_exec.
I guess these calls should be removed to match the cpu_exec execution pattern.
Pavel Dovgalyuk
next prev parent reply other threads:[~2018-01-10 7:04 UTC|newest]
Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-11-16 11:59 [Qemu-devel] [PULL 00/11] Miscellaneous patches for QEMU 2.11-rc2 Paolo Bonzini
2017-11-16 11:59 ` [Qemu-devel] [PULL 01/11] Enable 8-byte wide MMIO for 16550 serial devices Paolo Bonzini
2017-11-16 11:59 ` [Qemu-devel] [PULL 02/11] ioapic/tracing: Remove last DPRINTFs Paolo Bonzini
2017-11-16 11:59 ` [Qemu-devel] [PULL 03/11] Makefile: simpler/faster "make help" Paolo Bonzini
2017-11-16 11:59 ` [Qemu-devel] [PULL 04/11] thread-posix: fix qemu_rec_mutex_trylock macro Paolo Bonzini
2017-11-16 11:59 ` [Qemu-devel] [PULL 05/11] target-i386: adds PV_TLB_FLUSH CPUID feature bit Paolo Bonzini
2017-11-16 11:59 ` [Qemu-devel] [PULL 06/11] vhost-user-scsi: add missing virtqueue_size param Paolo Bonzini
2017-11-16 11:59 ` [Qemu-devel] [PULL 07/11] cpu-exec: don't overwrite exception_index Paolo Bonzini
2017-11-17 20:07 ` Peter Maydell
2017-11-17 20:26 ` Paolo Bonzini
2017-11-17 20:34 ` Peter Maydell
2017-11-20 10:25 ` Pavel Dovgalyuk
2017-11-20 11:06 ` Peter Maydell
2017-11-20 12:50 ` Peter Maydell
2017-11-20 21:08 ` Paolo Bonzini
2018-01-09 13:21 ` Pavel Dovgalyuk
2018-01-09 13:44 ` Peter Maydell
2018-01-10 7:04 ` Pavel Dovgalyuk [this message]
2018-01-10 10:24 ` Peter Maydell
2018-01-10 10:43 ` Pavel Dovgalyuk
2017-11-16 11:59 ` [Qemu-devel] [PULL 08/11] cpu-exec: avoid cpu_exec_nocache infinite loop with record/replay Paolo Bonzini
2017-11-16 11:59 ` [Qemu-devel] [PULL 09/11] util/stats64: Fix min/max comparisons Paolo Bonzini
2017-11-16 11:59 ` [Qemu-devel] [PULL 10/11] exec: Do not resolve subpage in mru_section Paolo Bonzini
2017-11-16 11:59 ` [Qemu-devel] [PULL 11/11] fix scripts/update-linux-headers.sh here document Paolo Bonzini
2017-11-16 16:11 ` [Qemu-devel] [PULL 00/11] Miscellaneous patches for QEMU 2.11-rc2 Peter Maydell
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='001401d389e1$495ffa30$dc1fee90$@ru' \
--to=dovgaluk@ispras.ru \
--cc=pavel.dovgaluk@ispras.ru \
--cc=pbonzini@redhat.com \
--cc=peter.maydell@linaro.org \
--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 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.