From: Sergey Fedorov <serge.fdrv@gmail.com>
To: QEMU Developers <qemu-devel@nongnu.org>
Cc: "Alex Bennée" <alex.bennee@linaro.org>,
"Paolo Bonzini" <pbonzini@redhat.com>,
"Richard Henderson" <rth@twiddle.net>,
"Blue Swirl" <blauwirbel@gmail.com>,
"Riku Voipio" <riku.voipio@iki.fi>
Subject: Re: [Qemu-devel] tcg: How 'CPUState::current_tb' is used?
Date: Mon, 2 May 2016 23:18:43 +0300 [thread overview]
Message-ID: <5727B623.2070901@gmail.com> (raw)
In-Reply-To: <5727B088.1090400@gmail.com>
[-- Attachment #1: Type: text/plain, Size: 1770 bytes --]
On 02/05/16 22:54, Sergey Fedorov wrote:
> Hi,
>
> I can't figure out how this field is used. The comment says it's
> "Currently executing TB", but actually it's the first TB in a chain of
> TBs executed. Grep shows the only place it is really checked is
> tb_invalidate_phys_page_range(). That code seems to be introduced long
> ago in:
>
> commit ea1c18022edd0e2c45552d6fc2da6e15a3486b33
> Author: bellard <bellard@c046a42c-6fe2-441c-8c8c-71466251a162>
> Date: Mon Jun 14 18:56:36 2004 +0000
>
> fixed self modifying code in case of asynchronous interrupt
>
>
> I suspect it's only related to user emulation. But I would appreciate
> if someone could give me an idea of how this really works :)
UPD: 'CPUState::current_tb' was used in that version of QEMU by this code:
/* mask must never be zero, except for A20 change call */
void cpu_interrupt(CPUState *env, int mask)
{
TranslationBlock *tb;
static int interrupt_lock;
env->interrupt_request |= mask;
/* if the cpu is currently executing code, we must unlink it and
all the potentially executing TB */
tb = env->current_tb;
if (tb && !testandset(&interrupt_lock)) {
env->current_tb = NULL;
tb_reset_jump_recursive(tb);
interrupt_lock = 0;
}
}
cpu_interrupt() has changed almost completely since that time. I'm
wondering if checking 'cpu->current_tb' by this code in
tb_invalidate_phys_page_range() still makes any sense:
if (cpu->interrupt_request && cpu->current_tb) {
cpu_interrupt(cpu, cpu->interrupt_request);
}
BTW, I'm not sure about the purpose of this piece of code either :)
Kind regards,
Sergey
[-- Attachment #2: Type: text/html, Size: 2723 bytes --]
next prev parent reply other threads:[~2016-05-02 20:19 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-05-02 19:54 [Qemu-devel] tcg: How CPUState::current_tb is used? Sergey Fedorov
2016-05-02 20:18 ` Sergey Fedorov [this message]
2016-05-03 0:02 ` [Qemu-devel] tcg: How 'CPUState::current_tb' " Peter Maydell
2016-05-03 9:56 ` Sergey Fedorov
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=5727B623.2070901@gmail.com \
--to=serge.fdrv@gmail.com \
--cc=alex.bennee@linaro.org \
--cc=blauwirbel@gmail.com \
--cc=pbonzini@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=riku.voipio@iki.fi \
--cc=rth@twiddle.net \
/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.